update grammar with actions

This commit is contained in:
ChUrl
2020-12-11 17:37:39 +01:00
parent 88aeacad35
commit 95709d3f59

View File

@ -2,7 +2,8 @@ START: S
EPS: epsilon
// Structures:
NTERM: VAL TYPE OP ARITH_OP LOGIC_OP COMPARE_OP
NTERM: VAL TYPE
NTERM: OP UNARY ARITH_OP LOGIC_OP COMPARE_OP
NTERM: S CLASS_CNT BLOCK_CNT
NTERM: STATEMENT STMT PRINT
NTERM: DECLARATION ASSIGNMENT
@ -22,29 +23,35 @@ TERM: L_BRACE R_BRACE L_BRACKET R_BRACKET L_PAREN R_PAREN SEMICOLON COMMA DOT
TERM: INTEGER_LIT STRING_LIT BOOLEAN_LIT
TERM: IDENTIFIER IDENTIFIER_MAIN
// Actions: compact - Value hochreichen
// nullable - Kann entfernt werden, wenn keine value und keine children
// General -----------------------------------------------------------------------------------------
VAL -> INTEGER_LIT | STRING_LIT | BOOLEAN_LIT | IDENTIFIER
TYPE -> INTEGER_TYPE | STRING_TYPE | BOOLEAN_TYPE
VAL[compact] -> INTEGER_LIT | STRING_LIT | BOOLEAN_LIT | IDENTIFIER
TYPE[compact] -> INTEGER_TYPE | STRING_TYPE | BOOLEAN_TYPE
OP -> ARITH_OP | LOGIC_OP | COMPARE_OP
ARITH_OP -> ADD | SUB | MUL | DIV | MOD
LOGIC_OP -> AND | OR | NOT
COMPARE_OP -> LESS | LESS_EQUAL | GREATER | GREATER_EQUAL | EQUAL | NOT_EQUAL
OP[compact] -> ARITH_OP | LOGIC_OP | COMPARE_OP
UNARY[compact] -> ADD | SUB | NOT
ARITH_OP[compact] -> ADD | SUB | MUL | DIV | MOD
LOGIC_OP[compact] -> AND | OR | NOT
COMPARE_OP[compact] -> LESS | LESS_EQUAL | GREATER | GREATER_EQUAL | EQUAL | NOT_EQUAL
// -------------------------------------------------------------------------------------------------
// class IDENTIFIER { CLASS_CNT }
S -> CLASS IDENTIFIER L_BRACE CLASS_CNT R_BRACE | EPS
S[compact] -> CLASS IDENTIFIER L_BRACE CLASS_CNT R_BRACE | EPS
// public static void main(String[] args) { BLOCK_CNT }
CLASS_CNT -> PUBLIC STATIC VOID_TYPE IDENTIFIER_MAIN L_PAREN STRING_TYPE L_BRACKET R_BRACKET IDENTIFIER R_PAREN L_BRACE BLOCK_CNT R_BRACE | EPS
CLASS_CNT -> PUBLIC STATIC VOID_TYPE IDENTIFIER_MAIN L_PAREN STRING_TYPE L_BRACKET R_BRACKET IDENTIFIER R_PAREN L_BRACE BLOCK_CNT R_BRACE
CLASS_CNT[compact nullable] -> EPS
// Stuff in {}
BLOCK_CNT -> STATEMENT BLOCK_CNT | L_BRACE BLOCK_CNT R_BRACE | EPS
BLOCK_CNT[compact nullable] -> STATEMENT BLOCK_CNT | L_BRACE BLOCK_CNT R_BRACE | EPS
STATEMENT -> STMT SEMICOLON | LOOP | COND
STMT -> PRINT | DECLARATION | ASSIGNMENT
STATEMENT -> STMT SEMICOLON
STATEMENT[compact] -> LOOP | COND
STMT[compact] -> PRINT | DECLARATION | ASSIGNMENT
PRINT -> PRINTLN PAR_EXPR
// Declaration with Assignment: TYPE IDENTIFIER = LITERAL;
@ -54,13 +61,11 @@ ASSIGNMENT -> IDENTIFIER ASSIGN EXPR
// Stuff that returns something
PAR_EXPR -> L_PAREN EXPR R_PAREN
EXPR -> EXPR_F EXPR_2
EXPR_2 -> ARITH_OP EXPR_F EXPR_2 | LOGIC_OP EXPR_F EXPR_2 | COMPARE_OP EXPR_F EXPR_2 | EPS
EXPR_F -> SUB EXPR_F | NOT EXPR_F | L_PAREN EXPR R_PAREN | VAL
EXPR_2[compact nullable] -> OP EXPR_F EXPR_2 | EPS
EXPR_F[compact] -> UNARY EXPR_F | L_PAREN EXPR R_PAREN | VAL
// Control-Flow
LOOP -> WHILE PAR_EXPR SINGLE_OR_BRACED
COND -> IF PAR_EXPR SINGLE_OR_BRACED COND_ELSE
COND_ELSE -> ELSE SINGLE_OR_BRACED | EPS
SINGLE_OR_BRACED -> L_BRACE BLOCK_CNT R_BRACE | STMT SEMICOLON
LOOP -> WHILE PAR_EXPR SINGLE_OR_BRACED
COND -> IF PAR_EXPR SINGLE_OR_BRACED COND_ELSE
COND_ELSE[compact nullable] -> ELSE SINGLE_OR_BRACED | EPS