160 lines
6.8 KiB
Go
160 lines
6.8 KiB
Go
// Copyright (c) 2024-2026 Celestino Amoroso (celestino.amoroso@gmail.com).
|
|
// All rights reserved.
|
|
|
|
// symbol.go
|
|
package scan
|
|
|
|
type Symbol int16
|
|
|
|
const (
|
|
SymUnknown Symbol = iota - 1 // -1: Unknown symbol
|
|
SymNone // 0: Null value for variable of type symbol
|
|
SymError // 1: Error reading from stream
|
|
SymEos // 2: End of stream
|
|
SymMinus // 3: '-'
|
|
SymMinusEqual // 4: '-='
|
|
SymDoubleMinus // 5: '--'
|
|
SymPlus // 6: '+'
|
|
SymPlusEqual // 7: '+='
|
|
SymDoublePlus // 8: '++'
|
|
SymStar // 9: '*'
|
|
SymDoubleStar // 10: '**'
|
|
SymSlash // 11: '/'
|
|
SymBackSlash // 12: '\'
|
|
SymVertBar // 13: '|'
|
|
SymDoubleVertBar // 14: '||'
|
|
SymComma // 15: ','
|
|
SymColon // 16: ':'
|
|
SymSemiColon // 17: ';'
|
|
SymDot // 18: '.'
|
|
SymDotSlash // 19: './'
|
|
SymQuote // 20: '\''
|
|
SymDoubleQuote // 21: '"'
|
|
SymBackTick // 22: '`'
|
|
SymExclamation // 23: '!'
|
|
SymQuestion // 24: '?'
|
|
SymAmpersand // 25: '&'
|
|
SymDoubleAmpersand // 26: '&&'
|
|
SymPercent // 27: '%'
|
|
SymAt // 28: '@'
|
|
SymUndescore // 29: '_'
|
|
SymEqual // 30: '='
|
|
SymColonEqual // 31: ':='
|
|
SymDoubleEqual // 32: '=='
|
|
SymLess // 33: '<'
|
|
SymLessOrEqual // 34: '<='
|
|
SymGreater // 35: '>'
|
|
SymGreaterOrEqual // 36: '>='
|
|
SymLessGreater // 37: '<>'
|
|
SymNotEqual // 38: '!='
|
|
SymDollar // 39: '$'
|
|
SymHash // 40: '#'
|
|
SymOpenRound // 41: '('
|
|
SymClosedRound // 42: ')'
|
|
SymOpenSquare // 43: '['
|
|
SymClosedSquare // 44: ']'
|
|
SymOpenBrace // 45: '{'
|
|
SymClosedBrace // 46: '}'
|
|
SymTilde // 47: '~'
|
|
SymDoubleQuestion // 48: '??'
|
|
SymQuestionEqual // 49: '?='
|
|
SymQuestionExclam // 50: '?!'
|
|
SymDoubleAt // 51: '@@'
|
|
SymDoubleColon // 52: '::'
|
|
SymDoubleGreater // 53: '>>'
|
|
SymDoubleLess // 54: '<<'
|
|
SymCaret // 55: '^'
|
|
SymDollarRound // 56: '$('
|
|
SymOpenClosedRound // 57: '()'
|
|
SymDoubleDollar // 58: '$$'
|
|
SymDoubleDot // 59: '..'
|
|
SymTripleDot // 60: '...'
|
|
SymStarEqual // 61: '*='
|
|
SymSlashEqual // 62: '/='
|
|
SymPercEqual // 63: '%='
|
|
SymDoubleLessEqual // 64: '<<='
|
|
SymDoubleGreaterEqual // 65: '>>='
|
|
SymAmpersandEqual // 66: '&='
|
|
SymVertBarEqual // 67: '|='
|
|
SymCaretEqual // 68: '^='
|
|
SymPlusGreater // 69: '+>'
|
|
SymLessPlus // 70: '<+'
|
|
SymChangeSign // 71: '-'
|
|
SymUnchangeSign // 72: '+''
|
|
SymDereference // 73: '*'
|
|
SymPreInc // 74: '++'
|
|
SymPreDec // 75: '--'
|
|
SymIdentifier // 76: identifier
|
|
SymBool // 77: boolean
|
|
SymInteger // 78: integer
|
|
SymVariable // 79: variable
|
|
SymFloat // 80: float
|
|
SymFraction // 81: fraction
|
|
SymString // 82: string
|
|
SymIterator // 83: iterator
|
|
SymOr // 84: 'or'
|
|
SymAnd // 85: 'and'
|
|
SymNot // 86: 'not'
|
|
SymComment // 87: comment
|
|
SymFuncCall // 88: function call
|
|
SymFuncDef // 89: function definition
|
|
SymList // 90: list
|
|
SymDict // 91: dict
|
|
SymIndex // 92: index
|
|
SymRange // 93: range [index : index]
|
|
SymExpression // 94: expression
|
|
SymSelector // 95: selector <selector> ::= <expr> "?" <selector-case> {":" <selector-case>} ["::" <default-selector-case>]
|
|
SymSelectorCase // 96: <selector-case> ::= [<list>] "{" <multi-expr> "}"
|
|
SymOpenSquareLess // 97: '[<'
|
|
SymGreaterClosedSquare // 98: '>]'
|
|
SymLinkedList // 99: linked-list
|
|
// SymOpenComment // 0: '/*'
|
|
// SymClosedComment // 0: '*/'
|
|
// SymOneLineComment // 0: '//'
|
|
keywordBase
|
|
)
|
|
const (
|
|
SymKwAnd = keywordBase + iota
|
|
SymKwNot
|
|
SymKwOr
|
|
SymKwBut
|
|
SymKwFunc
|
|
SymKwBuiltin
|
|
SymKwPlugin
|
|
SymKwIn
|
|
SymKwInclude
|
|
SymKwMap
|
|
SymKwFilter
|
|
SymKwDigest
|
|
SymKwCat
|
|
SymKwGroupBy
|
|
SymKwJoin
|
|
SymKwNil
|
|
SymKwUnset
|
|
)
|
|
|
|
var keywords map[string]Symbol
|
|
|
|
func init() {
|
|
//keywords = make(map[string]Symbol)
|
|
keywords = map[string]Symbol{
|
|
"AND": SymKwAnd,
|
|
"BUILTIN": SymKwBuiltin,
|
|
"PLUGIN": SymKwPlugin,
|
|
"BUT": SymKwBut,
|
|
"FUNC": SymKwFunc,
|
|
"IN": SymKwIn,
|
|
"INCLUDE": SymKwInclude,
|
|
"MAP": SymKwMap,
|
|
"CAT": SymKwCat,
|
|
"FILTER": SymKwFilter,
|
|
"NOT": SymKwNot,
|
|
"OR": SymKwOr,
|
|
"NIL": SymKwNil,
|
|
"UNSET": SymKwUnset,
|
|
"DIGEST": SymKwDigest,
|
|
"JOIN": SymKwJoin,
|
|
"GROUPBY": SymKwGroupBy,
|
|
}
|
|
}
|