No edit summary |
|||
| Line 13: | Line 13: | ||
Minus ::= '-'? Call | Minus ::= '-'? Call | ||
Call ::= Var | Name ('(' Args ')')? | Call ::= Var | Name ('(' Args ')')? | ||
Var ::= Name | Num | '(' Expr ')' | Var ::= Name | Num | Str | '(' Expr ')' | ||
Args ::= Expr (',' Expr)? | Args ::= Expr (',' Expr)? | ||
| Line 19: | Line 19: | ||
PlusMinus ::= [+-] /* ws: explicit */ | PlusMinus ::= [+-] /* ws: explicit */ | ||
MulDiv ::= [*/] /* ws: explicit */ | MulDiv ::= [*/] /* ws: explicit */ | ||
Num ::= ('0' | [1-9]+) ('.' [ | Num ::= ('0' | [1-9]+) ('.' [0-9]+)? /* ws: explicit */ | ||
Str ::= '"' [^"]* '"' /* ws: explicit */ | |||
Name ::= [a-z] [a-z0-9_]* /* ws: explicit */ | Name ::= [a-z] [a-z0-9_]* /* ws: explicit */ | ||
</pre> | </pre> | ||
Latest revision as of 20:05, 12 February 2024
EBNF Grammar
For a graphical representation, take a look at this website.
Expr ::= Add
Add ::= Mod (PlusMinus Add)?
Mod ::= Mul ('%' Mul)?
Mul ::= Pow (MulDiv Mul)?
Pow ::= Minus ('^' Minus)?
Minus ::= '-'? Call
Call ::= Var | Name ('(' Args ')')?
Var ::= Name | Num | Str | '(' Expr ')'
Args ::= Expr (',' Expr)?
PlusMinus ::= [+-] /* ws: explicit */
MulDiv ::= [*/] /* ws: explicit */
Num ::= ('0' | [1-9]+) ('.' [0-9]+)? /* ws: explicit */
Str ::= '"' [^"]* '"' /* ws: explicit */
Name ::= [a-z] [a-z0-9_]* /* ws: explicit */
Example
{{#invoke:ColinTheCat/Expression|Eval
| 2 * (1 + min(10, x))
| {"x": 2}
}}
2 * (1 + min(10, x)) (x=2) evaluates to
6