Skip to content
Snippets Groups Projects
grammar.txt 3.92 KiB
Newer Older
  • Learn to ignore specific revisions
  • Peter Matta's avatar
    Peter Matta committed
    Program -> eof                           // eof | epsilon
    
    Program -> GDecl ';' Program             // 'const', 'var'
    
    Peter Matta's avatar
    Peter Matta committed
    Program -> Func Program                  // 'func'
    
    
    GDecl -> 'const' identifier '=' GDecl_   // 'const'
    GDecl -> 'var' identifier '=' GDecl_     // 'var'
    GDecl_ -> identifier                     // 'identifier'
    GDecl_ -> number_literal                 // 'number_literal'
    
    Peter Matta's avatar
    Peter Matta committed
    
    Func -> 'func' identifier '(' Args ')' Block // 'func'
    
    
    
    Block -> '{' Block_ '}'                  // '{'
    Block_ -> epsilon                        // _ | '}'
    Block_ -> Decl ';' Block_                // 'var' | '}'
    Block_ -> Expr ';' Block_                // identifier, number_literal, '(' | '}'
    Block_ -> Stmt Block_                    // 'for', 'while', 'if' | '}'
    
    Peter Matta's avatar
    Peter Matta committed
    
    
    Decl -> 'var' identifier '=' Expr        // 'var'
    
    Peter Matta's avatar
    Peter Matta committed
    
    
    Peter Matta's avatar
    Peter Matta committed
    TopExpr -> identifier TopExpr_ ';'       // identifier
    TopExpr -> number_literal Expr_ ';'      // number_literal
    TopExpr_ -> epsilon                      // _ | ';'
    TopExpr_ -> '=' Expr                     // '='
    TopExpr_ -> FuncCall                     // '('
    
    
    Expr -> identifier idExpr Expr_          // identifier | Operator, ')', '{', ';'
    Expr -> number_literal Expr_             // number_literal | Operator, ')', '{', ';'
    Expr -> '(' Expr ')'                     // '('
    Expr_ -> Operator Expr                   // Operator
    
    Peter Matta's avatar
    Peter Matta committed
    Expr_ -> epsilon                         // _ | ')', '{', ';'
    
    idExpr -> epsilon                        // _ | Operator, ')', '{', ';'
    idExpr -> FuncCall                       // '(' | Operator ')', '{', ';'
    
    Stmt -> For                              // 'for'
    Stmt -> While                            // 'while'
    Stmt -> If                               // 'if'
    
    Peter Matta's avatar
    Peter Matta committed
    
    
    FuncCall -> epsilon                      // _ | Operator, ')', '{', ';'
    
    Peter Matta's avatar
    Peter Matta committed
    FuncCall -> '(' Args ')'                 // '('
    
    
    Peter Matta's avatar
    Peter Matta committed
    ExprPattern -> '(' ExprPattern_ ')'      // '('
    ExprPattern_ -> epsilon                  // _ | ')'
    ExprPattern_ -> Expr ExprPattern__       // identifier, number_literal, '('
    ExprPattern__ -> epsilon                 // ')'
    ExprPattern__ -> ',' Expr ExprPattern__  // ','
    
    VarPattern -> '(' VarPattern_ ')'        // '('
    VarPattern_ -> epsilon                   // ')'
    VarPattern_ -> identifier VarPattern__   // identifier
    VarPattern__ -> epsilon                  // ')'
    VarPattern__ -> ',' identifier           // ','
                    VarPattern__
    
    
    Peter Matta's avatar
    Peter Matta committed
    
    For -> 'for' identifier 'in' Range Block // 'for'
    While -> 'while' Expr Block              // 'while'
    If -> 'if' Expr Block Else               // 'if'
    Else -> epsilon                          // _ | 'var', identifier, number_literal, '(', 'for', 'while', 'if', '}'
    Else -> 'else' Block                     // 'else'
    
    Args -> epsilon                          // _ | ')'
    Args -> identifier Args_                 // identifier
    Args_ -> epsilon                         // _ | ')'
    Args_ -> ',' identifier Args_            // ','
    
    Range -> Expr Range_                     // identifier, number_literal, '('
    Range_ -> '..' Expr                      // '..'
    Range_ -> '...' Expr                     // '...'
    
    Peter Matta's avatar
    Peter Matta committed
    
    
    
    
    
    Expr          -> LogExpr                     //
    
    LogExpr       -> ArithAddExpr LogExpr_       // '(', identifier, number_literal, '-'
    LogExpr_      -> epsilon                     // _
    LogExpr_      -> LogOp ArithAddExpr          // '==', '!=', '<', '>', '<=', '>='
    
    ArithAddExpr  -> ArithMulExpr ArithAddExpr_  // '(', identifier, number_literal, '-'
    ArithAddExpr  -> epsilon                     // _ |
    ArithAddExpr  -> AddOp ArithMulExpr          // '+', '-'
    
    ArithMulExpr  -> PrimaryExpr ArithMulExpr_   // '(', identifier, number_literal, '-'
    ArithMulExpr_ -> epsilon                     // _ |
    ArithMulExpr_ -> MulOp PrimaryExpr           // '*', '/'
    
    PrimaryExpr   -> '(' Expr ')'                // '('
    PrimaryExpr   -> identifier                  // identifier
    PrimaryExpr   -> number_literal              // number_literal
    PrimaryExpr   -> '-' PrimaryExpr             // '-'
    PrimaryExpr   -> '-' PrimaryExpr             // '!'