Added the tilde '~' operator acting as NOT
This commit is contained in:
parent
998580772a
commit
9fa3d9fcb2
@ -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)
|
||||||
}
|
}
|
||||||
|
49
symbol.go
49
symbol.go
@ -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
|
||||||
|
2
term.go
2
term.go
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user