Improved expression parser

This commit is contained in:
2024-06-16 22:48:14 +02:00
parent ef16bdb4c7
commit 23c6134d9a
5 changed files with 152 additions and 138 deletions

View File

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