minidecaf-tutorial

parser-stage 语法规范(同 step6)


program
    : function
function
    : type Identifier '(' ')' '{' block_item* '}'
type
    : 'int'
block_item
    : statement
    | declaration
statement
    : 'return' expression ';'
    | expression? ';'
    | 'if' '(' expression ')' statement ('else' statement)?
declaration
    : type Identifier ('=' expression)? ';'
expression
    : assignment
assignment
    : conditional
    | Identifier '=' expression
conditional
    : logical_or
    | logical_or '?' expression ':' conditional
logical_or
    : logical_and
    | logical_or '||' logical_and
logical_and
    : equality
    | logical_and '&&' equality
equality
    : relational
    | equality ('=='|'!=') relational
relational
    : additive
    | relational ('<'|'>'|'<='|'>=') additive
additive
    : multiplicative
    | additive ('+'|'-') multiplicative
multiplicative
    : unary
    | multiplicative ('*'|'/'|'%') unary
unary
    : primary
    | ('-'|'~'|'!') unary
primary
    : Integer
    | '(' expression ')'
    | Identifier