From ebfd74ddf0ef6372624ea171e06f8460d0e1351b Mon Sep 17 00:00:00 2001 From: Cody Date: Mon, 27 Feb 2023 07:21:50 -0600 Subject: pain --- docs/grammar.md | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docs/grammar.md (limited to 'docs/grammar.md') diff --git a/docs/grammar.md b/docs/grammar.md new file mode 100644 index 0000000..d172254 --- /dev/null +++ b/docs/grammar.md @@ -0,0 +1,39 @@ +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 ")" ; +``` -- cgit v1.2.3