Syntax for CFG of DECAF

3
Compilers Module 0 Vihar M Patel - 201201064 Gaurav Singh - 201264059 MICRO SYNTAX: ============================================================================= ALPHA [A-Za-z_] DIGIT [0-9] HEX_DIGIT [DIGITa-fA-F] DELIM [\t\f \n] COMMENT [//]+[^\n]* SINGLE_QUOTE \' DOUBLE_QUOTE \" BACKSLASH \\ WHITESPACE (DELIM|COMMENT)+ DECIMAL_LITERAL [DIGIT]+ HEX_LITERAL 0x[HEX_DIGIT]+ CHAR [\40-\176 ^"^'^\ \' \" \\] CHAR_LITERAL '[CHAR]' STRING_LITERAL "[CHAR]*" BOOL_LITERAL true | false MINUS - PLUS + LOGICAL_NOT ! MUL * DIV / MOD % LT < LE <= GT > GE >= EQEQ == NEQ != AND && OR || EQ = PLUSEQ += MINUSEQ -= ID (ALPHA)[ALPHADIGIT]* INT int VOID void BOOL boolean BREAK break CONT continue COMMA , SEMICOLON ; CLASS class PROGRAM Program IF if ELSE else CALLOUT callout FOR for RET return OPEN_CURLY { CLOSE_CURLY }

description

DECAF Compilers

Transcript of Syntax for CFG of DECAF

Page 1: Syntax for CFG of DECAF

Compilers Module 0 Vihar M Patel - 201201064

Gaurav Singh - 201264059

MICRO SYNTAX: =============================================================================

ALPHA [A-Za-z_] DIGIT [0-9] HEX_DIGIT [DIGITa-fA-F] DELIM [\t\f \n] COMMENT [//]+[^\n]* SINGLE_QUOTE \' DOUBLE_QUOTE \" BACKSLASH \\ WHITESPACE (DELIM|COMMENT)+ DECIMAL_LITERAL [DIGIT]+ HEX_LITERAL 0x[HEX_DIGIT]+ CHAR [\40-\176 ^"^'^\ \' \" \\] CHAR_LITERAL '[CHAR]' STRING_LITERAL "[CHAR]*"

BOOL_LITERAL true | false MINUS - PLUS + LOGICAL_NOT ! MUL * DIV / MOD % LT < LE <= GT > GE >= EQEQ == NEQ != AND && OR || EQ = PLUSEQ += MINUSEQ -= ID (ALPHA)[ALPHADIGIT]* INT int VOID void BOOL boolean BREAK break CONT continue COMMA , SEMICOLON ; CLASS class PROGRAM Program IF if ELSE else CALLOUT callout FOR for RET return OPEN_CURLY { CLOSE_CURLY }

Page 2: Syntax for CFG of DECAF

OPEN_ROUND ( CLOSE_ROUND ) OPEN_SQUARE [ CLOSE_SQUARE ]

MACRO SYNTAX: ============================================================================= INITIAL_PROGRAM -> CLASS PROGRAM OPEN_CURLY FIELD_DECL0

METHOD_DECL0 CLOSE_CURLY FIELD_DECL0 -> EPSILON | FIELD_DECL1 | FIELD_DECL0 FIELD_DECL1 -> TYPE VARS0 SEMICOLON VARS0 -> VARS1 COMMA_VARS COMMA_VARS -> EPSILON | COMMA VARS1 | COMMA_VARS VARS1 -> ID | ID OPEN_SQUARE INT_LITERAL CLOSE_SQUARE

METHOD_DECL0 -> EPSILON | METHOD_DECL1 | METHOD_DECL0 METHOD_DECL1 -> TYPE0 ID OPEN_ROUND FUNC_VARS0 CLOSE_ROUND BLOCK FUNC_VARS0 -> FUNC_VARS1 COMMA_FUNC_VARS | EPSILON COMMA_FUNC_VARS -> COMMA FUNC_VARS1 | EPSILON | COMMA_FUNC_VARS FUNC_VARS1 -> TYPE ID TYPE0 -> TYPE | VOID TYPE -> INT | BOOL BLOCK -> OPEN_CURLY VAR_DECL0 STATEMENT0 CLOSE_CURLY

VAR_DECL0 -> EPSILON | VAR_DECL1 | VAR_DECL0 VAR_DECL1 -> TYPE VAR_DEC SEMICOLON VAR_DEC -> ID COMMA_VAR_DECL COMMA_VAR_DECL -> COMMA ID | EPSILON | COMMA_VAR_DECL

STATEMENT0 -> EPSILON | STATEMENT | STATEMENT0 ELSE0 -> EPSILON | ELSE BLOCK STATEMENT -> LOCATION ASSIGN_OP EXPR SEMICOLON | METHOD_CALL SEMICOLON | IF OPEN_ROUND EXPR CLOSE_ROUND BLOCK ELSE0 | FOR ID EQ EXPR COMMA EXPR BLOCK

| RETURN SEMICOLON | RETURN EXPR SEMICOLON | BREAK SEMICOLON

| CONTINUE SEMICOLON | BLOCK ASSIGN_OP -> EQ | PLUSEQ | MINUSEQ METHOD_CALL -> ID OPEN_ROUND MULTIPLE_EXPR CLOSE_ROUND | CALLOUT OPEN_ROUND STRING_LITERAL CALLOUT_ARG0 CLOSE_ROUND

LOCATION -> ID | ID OPEN_SQUARE EXPR CLOSE_SQUARE MULTIPLE_EXPR -> EPSILON | EXPR COMMA_EXPR COMMA_EXPR -> EPSILON | COMMA EXPR | COMMA_EXPR

Page 3: Syntax for CFG of DECAF

EXPR -> LOCATION | METHOD_CALL

| LITERAL | UNARY_OP EXPR | BINARY_EXPR0

| OPEN_ROUND EXPR CLOSE_ROUND CALLOUT_ARG0 -> COMMA CALLOUT_ARG | EPSILON | CALLOUT_ARG0 CALLOUT_ARG -> EXPR | STRING_LITERAL UNARY_OP -> MINUS | LOGICAL_NOT ARITH_OP1 -> MUL | DIV | MOD ARITH_OP2 -> PLUS | MINUS REL_OP -> LE | LT | GE | GT EQ_OP -> EQEQ | NEQ

BINARY_EXPR0 -> BINARY_EXPR0 ARITH_OP1 BINARY_EXPR0 | BINARY_EXPR1 BINARY_EXPR1 -> BINARY_EXPR1 ARITH_OP2 BINARY_EXPR1 | BINARY_EXPR2 BINARY_EXPR2 -> BINARY_EXPR2 REL_OP BINARY_EXPR2 | BINARY_EXPR3 BINARY_EXPR3 -> BINARY_EXPR3 EQ_OP BINARY_EXPR3 | BINARY_EXPR4 BINARY_EXPR4 -> BINARY_EXPR4 AND BINARY_EXPR4 | BINARY_EXPR5 BINARY_EXPR5 -> BINARY_EXPR5 OR BINARY_EXPR5 | LITERAL LITERAL -> INT_LITERAL | CHAR_LITERAL | BOOL_LITERAL INT_LITERAL -> MINUS DECIMAL_LITERAL | DECIMAL_LITERAL |

MINUS HEX_LITERAL | HEX_LITERAL BOOL_LITERAL -> TRUE | FALSE