Improved expression parser
This commit is contained in:
@ -12,7 +12,9 @@ type Operator struct {
|
||||
// Operators defines the operators used in the language.
|
||||
// The number corresponds to the operator priority and can not be zero.
|
||||
var Operators = map[string]*Operator{
|
||||
".": {".", 12, 2},
|
||||
".": {".", 14, 2},
|
||||
"λ": {"λ", 13, 1},
|
||||
"!": {"λ", 12, 1},
|
||||
"*": {"*", 11, 2},
|
||||
"/": {"/", 11, 2},
|
||||
"%": {"%", 11, 2},
|
||||
@ -32,6 +34,7 @@ var Operators = map[string]*Operator{
|
||||
"&&": {"&&", 3, 2},
|
||||
"||": {"||", 2, 2},
|
||||
"=": {"=", 1, 2},
|
||||
":=": {":=", 1, 2},
|
||||
"+=": {"+=", 1, 2},
|
||||
"-=": {"-=", 1, 2},
|
||||
"*=": {"*=", 1, 2},
|
||||
@ -45,11 +48,11 @@ func isComplete(expr *Expression) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
if expr.Token.Kind == token.Identifier {
|
||||
if expr.Token.Kind == token.Identifier || expr.Token.Kind == token.Number || expr.Token.Kind == token.String {
|
||||
return true
|
||||
}
|
||||
|
||||
if expr.Token.Kind == token.Operator && len(expr.Children) == numOperands(expr.Token.Text()) {
|
||||
if expr.Token.Kind == token.Operator && len(expr.Children) >= numOperands(expr.Token.Text()) {
|
||||
return true
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user