update grammar to remove more junk + upate tests + codegen

This commit is contained in:
ChUrl
2021-02-05 14:08:08 +01:00
parent d1790e526f
commit 384c318c18
11 changed files with 44 additions and 125 deletions

View File

@ -61,25 +61,27 @@ compare_op[promote] -> LESS | LESS_EQUAL | GREATER | GREATER_EQUAL | EQUAL | NOT
// -------------------------------------------------------------------------------------------------
// START -> class IDENTIFIER { class_cnt }
S[promote] -> CLASS IDENTIFIER L_BRACE class_cnt R_BRACE | eps
S[renameto=CLASS delchild=CLASS,R_BRACE,L_BRACE] -> CLASS IDENTIFIER L_BRACE class_cnt R_BRACE | eps
// class_cnt -> public static void main(String[] args) { block_cnt }
class_cnt[promote delifempty] -> PUBLIC STATIC VOID_TYPE IDENTIFIER_MAIN L_PAREN STRING_TYPE L_BRACKET R_BRACKET IDENTIFIER R_PAREN L_BRACE block_cnt R_BRACE | eps
// remove all the stuff that is irrelevant to this simple case
class_cnt[promote delifempty delchild=L_BRACE,R_BRACE,L_PAREN,R_PAREN,L_BRACKET,R_BRACKET,IDENTIFIER,IDENTIFIER_MAIN,STRING_TYPE,VOID_TYPE,STATIC,PUBLIC] -> PUBLIC STATIC VOID_TYPE IDENTIFIER_MAIN L_PAREN STRING_TYPE L_BRACKET R_BRACKET IDENTIFIER R_PAREN L_BRACE block_cnt R_BRACE | eps
// block_ccnt -> stuff in {} | list of statements
block_cnt[promote delifempty] -> statement block_cnt | L_BRACE block_cnt R_BRACE | eps
// statement -> stuff ending with ; | loop | condition
statement[promote] -> stmt SEMICOLON | loop | cond
statement[promote delchild=SEMICOLON] -> stmt SEMICOLON | loop | cond
stmt[promote] -> print | declaration | assignment
print -> PRINTLN par_expr
print[nametoval=PRINTLN] -> PRINTLN par_expr
// declaration -> type IDENTIFIER = expr;
declaration[nametoval=INTEGER_TYPE,BOOLEAN_TYPE,STRING_TYPE] -> type assignment
assignment[delchild=ASSIGN valtoval=IDENTIFIER] -> IDENTIFIER ASSIGN expr
// par_expr -> ( expr )
par_expr -> L_PAREN expr R_PAREN
// dont [promote] par_expr to make parenthesis-precedence easier
par_expr[delchild=L_PAREN,R_PAREN] -> L_PAREN expr R_PAREN
// expr -> expression that returns something | literal
expr[promote nametoval=ADD,SUB,MUL,DIV,MOD,AND,OR,NOT,LESS,LESS_EQUAL,GREATER,GREATER_EQUAL,EQUAL,NOT_EQUAL] -> expr_f expr_2
@ -87,7 +89,8 @@ expr_2[promote delifempty renameto=expr] -> op expr_f expr_2 | eps
expr_f[promote renameto=expr] -> unary expr_f | par_expr | val
// Control-Flow
// Don't [delifempty] single_or_braced to make it easier to get the expression
loop[delchild=WHILE] -> WHILE par_expr single_or_braced
cond[delchild=IF] -> IF par_expr single_or_braced cond_else
cond_else[delifempty delchild=ELSE] -> ELSE single_or_braced | eps
single_or_braced -> L_BRACE block_cnt R_BRACE | stmt SEMICOLON
single_or_braced[promote delchild=L_BRACE,R_BRACE] -> L_BRACE block_cnt R_BRACE | stmt SEMICOLON