Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Original EBNF grammar
- prog -> {classDecl} {funcDef} 'program' funcBody ';'
- classDecl -> 'class' 'id' '{' {varDecl} {funcDecl} '}' ';'
- funcDecl -> type 'id' '(' fParams ')' ';'
- funcHead -> type ['id' 'sr'] 'id' '(' fParams ')'
- funcDef -> funcHead funcBody ';'
- funcBody -> '{' {varDecl} {statement} '}'
- varDecl -> type 'id' {arraySize} ';'
- statement -> assignStat ';'
- | 'if' '(' expr ')' 'then' statBlock 'else' statBlock ';'
- | 'for' '(' type 'id' assignOp expr ';' relExpr ';' assignStat ')' statBlock ';'
- | 'get' '(' variable ')' ';'
- | 'put' '(' expr ')' ';'
- | 'return' '(' expr ')' ';'
- assignStat -> variable assignOp expr
- statBlock -> '{' {statement} '}' | statement | EPSILON
- expr -> arithExpr | relExpr
- relExpr -> arithExpr relOp arithExpr
- arithExpr -> arithExpr addOp term | term
- sign -> '+' | '-'
- term -> term multOp factor | factor
- factor -> variable
- | functionCall
- | 'intNum' | 'floatNum'
- | '(' arithExpr ')'
- | 'not' factor
- | sign factor
- variable -> {idnest} 'id' {indice}
- functionCall -> {idnest} 'id' '(' aParams ')'
- idnest -> 'id' {indice} '.'
- | 'id' '(' aParams ')' '.'
- indice -> '[' arithExpr ']'
- arraySize -> '[' 'intNum' ']'
- type -> 'int' | 'float' | 'id'
- fParams -> type 'id' {arraySize} {fParamsTail} | EPSILON
- aParams -> expr {aParamsTail} | EPSILON
- fParamsTail -> ',' type 'id' {arraySize}
- aParamsTail -> ',' expr
- assignOp -> '='
- relOp -> 'eq' | 'neq' | 'lt' | 'gt' | 'leq' | 'geq'
- addOp -> '+' | '-' | 'or'
- multOp -> '*' | '/' | 'and'
- The point at which I am right now
- prog -> multClassDecl multFuncDef_ 'program' funcBody ';'
- classDecl -> 'class' 'id' '{' multVarDecl multFuncDecl '}' ';'
- multClassDecl -> classDecl multClassDecl | EPSILON
- funcDecl -> type 'id' '(' fParams ')' ';'
- multFuncDecl -> funcDecl multFuncDecl | EPSILON
- funcHead -> type 'id' funcHead_
- funcHead_ -> 'sr' 'id' '(' fParams ')'
- | '(' fParams ')'
- funcDef -> funcHead funcBody ';'
- multFuncDef_ -> funcDef multFuncDef_ | EPSILON
- funcBody -> '{' multVarDecl multStatement '}'
- varDecl -> type 'id' multArraySize ';'
- multVarDecl -> varDecl multVarDecl | EPSILON
- statement -> assignStat ';'
- | 'if' '(' expr ')' 'then' statBlock 'else' statBlock ';'
- | 'for' '(' type 'id' assignOp expr ';' relExpr ';' assignStat ')' statBlock ';'
- | 'get' '(' variable ')' ';'
- | 'put' '(' expr ')' ';'
- | 'return' '(' expr ')' ';'
- multStatement -> statement multStatement | EPSILON
- assignStat -> variable assignOp expr
- statBlock -> '{' multStatement '}' | statement | EPSILON
- expr -> arithExpr expr_
- expr_ -> relOp arithExpr | EPSILON
- relExpr -> arithExpr relOp arithExpr
- arithExpr -> term arithExpr_
- arithExpr_ -> addOp term arithExpr_ | EPSILON
- sign -> '+' | '-'
- term -> factor term_
- term_ -> multOp factor term_ | EPSILON
- postCall -> multIndice | '(' aParams ')'
- factor -> multIdnest 'id' postCall
- | 'intNum' | 'floatNum'
- | '(' arithExpr ')'
- | 'not' factor
- | sign factor
- variable -> multIdnest 'id' multIndice
- functionCall -> multIdnest 'id' '(' aParams ')'
- multIdnest -> idnest multIdnest | EPSILON
- idnest -> 'id' idnest_
- idnest_ -> multIndice '.' | '(' aParams ')' '.'
- indice -> '[' arithExpr ']'
- multIndice -> indice multIndice | EPSILON
- arraySize -> '[' 'intNum' ']'
- multArraySize -> arraySize multArraySize | EPSILON
- type -> 'int' | 'float' | 'id'
- fParams -> type 'id' multArraySize multFParamsTail | EPSILON
- aParams -> expr multAParamsTail | EPSILON
- fParamsTail -> ',' type 'id' multArraySize
- multFParamsTail -> fParamsTail multFParamsTail | EPSILON
- aParamsTail -> ',' expr
- multAParamsTail -> aParamsTail multAParamsTail | EPSILON
- assignOp -> '='
- relOp -> 'eq' | 'neq' | 'lt' | 'gt' | 'leq' | 'geq'
- addOp -> '+' | '-' | 'or'
- multOp -> '*' | '/' | 'and'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement