diff options
Diffstat (limited to 'examples')
| -rw-r--r-- | examples/docs/grammar.md | 63 | ||||
| -rw-r--r-- | examples/docs/precedence.md | 17 |
2 files changed, 80 insertions, 0 deletions
diff --git a/examples/docs/grammar.md b/examples/docs/grammar.md new file mode 100644 index 0000000..6edb686 --- /dev/null +++ b/examples/docs/grammar.md @@ -0,0 +1,63 @@ +Formal grammar definition for Sloth. + +``` +program → statement* ; +block → "{" statement* "}" + +statement → exprStmt + | valStmt + | varStmt + | returnStmt + | printStmt + | functionStmt + | ifStmt + | forStmt ; + +exprStmt → expression ";" ; +valStmt → "val" IDENTIFIER "=" expression ";" ; +varStmt → "var" IDENTIFIER "=" expression ";" ; +returnStmt → "return" expression ";" ; +printStmt → "print" expression ";" ; + +functionStmt → "fn" IDENTIFIER "(" (IDENTIFIER ":" IDENTIFIER)* ")" block ; +ifStmt → "if" expression block ; +forStmt → "for" IDENTIFIER "in" expression ".." expression block ; + +expression → logical_or ; + +logical_or → logical_and ( "||" logical_and )* ; +logical_and → equality ( "&&" equality )* ; +equality → comparison ( ( "!=" | "==" ) comparison )* ; +comparison → bitwise_shift ( ( "<" | ">" | "<=" | ">=" ) bitwise_shift )* ; +bitwise_shifting → additive ( ( "<<" | ">>" ) additive )* ; +additive → multiplicative ( ( "+" | "-" ) multiplicative )* ; +multiplicative → unary ( ( "*" | "/" | "%" ) unary )* ; +unary → ( "!" | "+" | "-" ) unary | call ; + +call → primary ( "(" arguments? ")" )* ; +primary → "true" | "false" | NUMBER | STRING | IDENTIFIER | "(" expression ")" ; + +## Operations +logical_or : logical_and ( "||" logical_and )* ; +logical_and : bitwise ( "&&" bitwise )* ; +bitwise : equality ( ( "&" | "^" | "|" ) equality )* ; +equality : comparison ( ( "==" | "!=" ) comparison )* ; +comparison : bitwise_shift ( ( ">" | ">=" | "<" | "<=" ) bitwise_shift )*; +bitwise_shift : additive ( ( "<<" | ">>" ) additive )* ; +additive : multiplicative ( ( "+" | "-" ) multiplicative )* ; +multiplicative : unary ( ( "*" | "/" | "%" ) unary )* ; +unary : ( "!" | "+" | "-" ) unary | call ; + +## Related to calling of functions +call : primary ( "(" arguments ")" )* ; +arguments : ( "labeled"? IDENTIFIER ( ":" IDENTIFIER )? ","? )* ; + +## Represents a base value +primary : "true" + | "false" + | NUMBER + | STRING + | IDENTIFIER + | "(" expression ")" ; + +``` diff --git a/examples/docs/precedence.md b/examples/docs/precedence.md new file mode 100644 index 0000000..32cc5de --- /dev/null +++ b/examples/docs/precedence.md @@ -0,0 +1,17 @@ +Operating precedence in sloth from highest to lowest. + +| Name | Operators | Associates | +| -------------- | --------- | ---------- | +| parentheses | () | Left | +| member access | . ! !! ?. | Left | +| defaulting | ?: | Right | +| function call | () | Left | +| unary | ! + - | Right | +| multiplicative | \* / % | Left | +| additive | + - | Left | +| bitwise shift | << >> | Left | +| comparison | < > <= >= | Left | +| equality | == != | Left | +| bitwise | & ^ \| | Left | +| logical and | && | Left | +| logical or | \|\| | Left | |
