diff --git a/scanner.go b/scanner.go index 1dd5701..4dd3b95 100644 --- a/scanner.go +++ b/scanner.go @@ -38,6 +38,7 @@ func DefaultTranslations() map[Symbol]Symbol { SymKwAnd: SymAnd, SymDoubleVertBar: SymOr, SymKwOr: SymOr, + SymTilde: SymNot, SymKwNot: SymNot, SymLessGreater: SymNotEqual, } @@ -220,6 +221,8 @@ func (self *scanner) fetchNextToken() (tk *Token) { tk = self.makeToken(SymOpenBrace, ch) case '}': tk = self.makeToken(SymClosedBrace, ch) + case '~': + tk = self.makeToken(SymTilde, ch) case 0: if escape { tk = self.makeErrorToken(errors.New("incomplete escape sequence")) @@ -334,7 +337,7 @@ func (self *scanner) fetchIdentifier(firstCh byte) (tk *Token) { tk = self.makeValueToken(SymBool, txt, false) } else if ch, _ := self.peek(); ch == '(' { self.readChar() - tk = self.makeValueToken(SymFunction, txt+"(", uptxt) + tk = self.makeValueToken(SymFunction, txt+"(", txt) } else { tk = self.makeValueToken(SymIdentifier, txt, txt) } diff --git a/symbol.go b/symbol.go index 3b6c75f..95987c9 100644 --- a/symbol.go +++ b/symbol.go @@ -30,30 +30,31 @@ const ( SymDotSlash // 19: './' SymQuote // 20: '\'' SymDoubleQuote // 21: '"' - SymBackTick // 0: '`' - SymExclamation // 0: '!' - SymQuestion // 0: '?' - SymAmpersand // 0: '&&' - SymDoubleAmpersand // 0: '&&' - SymPercent // 0: '%' - SymAt // 0: '@' - SymUndescore // 0: '_' - SymEqual // 0: '=' - SymDoubleEqual // 0: '==' - SymLess // 0: '<' - SymLessOrEqual // 0: '<=' - SymGreater // 0: '>' - SymGreaterOrEqual // 0: '>=' - SymLessGreater // 0: '<>' - SymNotEqual // 0: '!=' - SymDollar // 0: '$' - SymHash // 0: '#' - SymOpenRound // 0: '(' - SymClosedRound // 0: ')' - SymOpenSquare // 0: '[' - SymClosedSquare // 0: ']' - SymOpenBrace // 0: '{' - SymClosedBrace // 0: '}' + SymBackTick // 22: '`' + SymExclamation // 23: '!' + SymQuestion // 24: '?' + SymAmpersand // 25: '&&' + SymDoubleAmpersand // 26: '&&' + SymPercent // 27: '%' + SymAt // 28: '@' + SymUndescore // 29: '_' + SymEqual // 30: '=' + SymDoubleEqual // 31: '==' + SymLess // 32: '<' + SymLessOrEqual // 33: '<=' + SymGreater // 34: '>' + SymGreaterOrEqual // 35: '>=' + SymLessGreater // 36: '<>' + SymNotEqual // 37: '!=' + SymDollar // 38: '$' + SymHash // 39: '#' + SymOpenRound // 40: '(' + SymClosedRound // 41: ')' + SymOpenSquare // 42: '[' + SymClosedSquare // 43: ']' + SymOpenBrace // 44: '{' + SymClosedBrace // 45: '}' + SymTilde // 46: '~' SymChangeSign SymUnchangeSign SymIdentifier diff --git a/term.go b/term.go index 957c299..924541d 100644 --- a/term.go +++ b/term.go @@ -177,7 +177,7 @@ func (self *term) source() string { func (self *term) compute(ctx exprContext) (v any, err error) { if self.evalFunc == nil { - err = fmt.Errorf("undfined eval-func for %v term type", self.kind) + err = fmt.Errorf("undefined eval-func for %v term type", self.kind) } else { v, err = self.evalFunc(ctx, self) }