| 123456789101112131415161718192021222324252627282930313233343536373839404142 |
- 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]+)
|