diff options
| author | Cori Barker <coribarker2@gmail.com> | 2026-02-23 15:45:03 +0000 |
|---|---|---|
| committer | Cori Barker <coribarker2@gmail.com> | 2026-02-23 15:45:03 +0000 |
| commit | 4b33b1f31862cd505fd9c90cf8d2e696c6f6ec97 (patch) | |
| tree | fa2c5cd9aec9fed35dd482b60237e52d26203bfe /bnf | |
| parent | 5c1f937a7eb7a9cc9cd86cb69b3263f41f24408f (diff) | |
partial refactor of ast_node.hpp
Diffstat (limited to 'bnf')
| -rw-r--r-- | bnf | 115 |
1 files changed, 115 insertions, 0 deletions
@@ -0,0 +1,115 @@ +<program> ::= { <function_declaration> } + +<function_declaration> ::= + "function" <identifier> "(" [ <parameter_list> ] ")" + "->" <type> + <block> + +<parameter_list> ::= <parameter> { "," <parameter> } + +<parameter> ::= <type> <identifier> + +<type> ::= "int" + | "bool" + + +<block> ::= "{" + <statement_list> + "}" + +<statement_list> ::= { <statement> } + +<statement> ::= <variable_declaration> + | <assignment_statement> + | <if_statement> + | <while_statement> + | <for_statement> + | <return_statement> + | <expression_statement> + + +<variable_declaration> ::= + <type> <identifier> [ "=" <expression> ] ";" + +<assignment_statement> ::= + <identifier> "=" <expression> ";" + +<return_statement> ::= + "return" [ <expression> ] ";" + +<expression_statement> ::= + <expression> ";" + + +<if_statement> ::= + "if" "(" <expression> ")" + <block> + [ "else" <block> ] + +<while_statement> ::= + "while" "(" <expression> ")" + <block> + +<for_statement> ::= + "for" "(" + [ <for_init> ] + ";" + [ <expression> ] + ";" + [ <expression> ] + ")" + <block> + +<for_init> ::= <type> <identifier> [ "=" <expression> ] + | <expression> + + +<expression> ::= <logical_or> + +<logical_or> ::= <logical_and> + { "||" <logical_and> } + +<logical_and> ::= <equality> + { "&&" <equality> } + +<equality> ::= <comparison> + { ( "==" | "!=" ) <comparison> } + +<comparison> ::= <term> + { ( "<" | ">" | "<=" | ">=" ) <term> } + +<term> ::= <factor> + { ( "+" | "-" ) <factor> } + +<factor> ::= <unary> + { ( "*" | "/" | "%" ) <unary> } + +<unary> ::= ( "!" | "-" ) <unary> + | <primary> + +<primary> ::= <number> + | <boolean> + | <identifier> + | <function_call> + | "(" <expression> ")" + + +<function_call> ::= + <identifier> "(" [ <argument_list> ] ")" + +<argument_list> ::= <expression> + { "," <expression> } + + +<identifier> ::= <letter> { <letter> | <digit> } + +<number> ::= <digit> { <digit> } + +<boolean> ::= "true" + | "false" + +<letter> ::= "a" | ... | "z" + | "A" | ... | "Z" + | "_" + +<digit> ::= "0" | ... | "9"
\ No newline at end of file |
