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,
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)
}

View File

@ -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

View File

@ -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)
}