Added the tilde '~' operator acting as NOT

This commit is contained in:
Celestino Amoroso 2024-03-28 06:25:29 +01:00
parent 998580772a
commit 9fa3d9fcb2
3 changed files with 30 additions and 26 deletions

View File

@ -38,6 +38,7 @@ func DefaultTranslations() map[Symbol]Symbol {
SymKwAnd: SymAnd, SymKwAnd: SymAnd,
SymDoubleVertBar: SymOr, SymDoubleVertBar: SymOr,
SymKwOr: SymOr, SymKwOr: SymOr,
SymTilde: SymNot,
SymKwNot: SymNot, SymKwNot: SymNot,
SymLessGreater: SymNotEqual, SymLessGreater: SymNotEqual,
} }
@ -220,6 +221,8 @@ func (self *scanner) fetchNextToken() (tk *Token) {
tk = self.makeToken(SymOpenBrace, ch) tk = self.makeToken(SymOpenBrace, ch)
case '}': case '}':
tk = self.makeToken(SymClosedBrace, ch) tk = self.makeToken(SymClosedBrace, ch)
case '~':
tk = self.makeToken(SymTilde, ch)
case 0: case 0:
if escape { if escape {
tk = self.makeErrorToken(errors.New("incomplete escape sequence")) 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) tk = self.makeValueToken(SymBool, txt, false)
} else if ch, _ := self.peek(); ch == '(' { } else if ch, _ := self.peek(); ch == '(' {
self.readChar() self.readChar()
tk = self.makeValueToken(SymFunction, txt+"(", uptxt) tk = self.makeValueToken(SymFunction, txt+"(", txt)
} else { } else {
tk = self.makeValueToken(SymIdentifier, txt, txt) tk = self.makeValueToken(SymIdentifier, txt, txt)
} }

View File

@ -30,30 +30,31 @@ const (
SymDotSlash // 19: './' SymDotSlash // 19: './'
SymQuote // 20: '\'' SymQuote // 20: '\''
SymDoubleQuote // 21: '"' SymDoubleQuote // 21: '"'
SymBackTick // 0: '`' SymBackTick // 22: '`'
SymExclamation // 0: '!' SymExclamation // 23: '!'
SymQuestion // 0: '?' SymQuestion // 24: '?'
SymAmpersand // 0: '&&' SymAmpersand // 25: '&&'
SymDoubleAmpersand // 0: '&&' SymDoubleAmpersand // 26: '&&'
SymPercent // 0: '%' SymPercent // 27: '%'
SymAt // 0: '@' SymAt // 28: '@'
SymUndescore // 0: '_' SymUndescore // 29: '_'
SymEqual // 0: '=' SymEqual // 30: '='
SymDoubleEqual // 0: '==' SymDoubleEqual // 31: '=='
SymLess // 0: '<' SymLess // 32: '<'
SymLessOrEqual // 0: '<=' SymLessOrEqual // 33: '<='
SymGreater // 0: '>' SymGreater // 34: '>'
SymGreaterOrEqual // 0: '>=' SymGreaterOrEqual // 35: '>='
SymLessGreater // 0: '<>' SymLessGreater // 36: '<>'
SymNotEqual // 0: '!=' SymNotEqual // 37: '!='
SymDollar // 0: '$' SymDollar // 38: '$'
SymHash // 0: '#' SymHash // 39: '#'
SymOpenRound // 0: '(' SymOpenRound // 40: '('
SymClosedRound // 0: ')' SymClosedRound // 41: ')'
SymOpenSquare // 0: '[' SymOpenSquare // 42: '['
SymClosedSquare // 0: ']' SymClosedSquare // 43: ']'
SymOpenBrace // 0: '{' SymOpenBrace // 44: '{'
SymClosedBrace // 0: '}' SymClosedBrace // 45: '}'
SymTilde // 46: '~'
SymChangeSign SymChangeSign
SymUnchangeSign SymUnchangeSign
SymIdentifier SymIdentifier

View File

@ -177,7 +177,7 @@ func (self *term) source() string {
func (self *term) compute(ctx exprContext) (v any, err error) { func (self *term) compute(ctx exprContext) (v any, err error) {
if self.evalFunc == nil { 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 { } else {
v, err = self.evalFunc(ctx, self) v, err = self.evalFunc(ctx, self)
} }