Spaces:
Paused
Paused
| root ::= (declaration)* | |
| declaration ::= dataType identifier "(" parameter? ")" "{" statement* "}" | |
| dataType ::= "int" ws | "float" ws | "char" ws | |
| identifier ::= [a-zA-Z_] [a-zA-Z_0-9]* | |
| parameter ::= dataType identifier | |
| statement ::= | |
| ( dataType identifier ws "=" ws expression ";" ) | | |
| ( identifier ws "=" ws expression ";" ) | | |
| ( identifier ws "(" argList? ")" ";" ) | | |
| ( "return" ws expression ";" ) | | |
| ( "while" "(" condition ")" "{" statement* "}" ) | | |
| ( "for" "(" forInit ";" ws condition ";" ws forUpdate ")" "{" statement* "}" ) | | |
| ( "if" "(" condition ")" "{" statement* "}" ("else" "{" statement* "}")? ) | | |
| ( singleLineComment ) | | |
| ( multiLineComment ) | |
| forInit ::= dataType identifier ws "=" ws expression | identifier ws "=" ws expression | |
| forUpdate ::= identifier ws "=" ws expression | |
| condition ::= expression relationOperator expression | |
| relationOperator ::= ("<=" | "<" | "==" | "!=" | ">=" | ">") | |
| expression ::= term (("+" | "-") term)* | |
| term ::= factor(("*" | "/") factor)* | |
| factor ::= identifier | number | unaryTerm | funcCall | parenExpression | |
| unaryTerm ::= "-" factor | |
| funcCall ::= identifier "(" argList? ")" | |
| parenExpression ::= "(" ws expression ws ")" | |
| argList ::= expression ("," ws expression)* | |
| number ::= [0-9]+ | |
| singleLineComment ::= "//" [^\n]* "\n" | |
| multiLineComment ::= "/*" ( [^*] | ("*" [^/]) )* "*/" | |
| ws ::= ([ \t\n]+) | |