0% found this document useful (0 votes)
99 views3 pages

Syntax For CFG of DECAF

This document defines the syntax for a compiler. It defines tokens like keywords, operators, and punctuation. It also defines the grammar rules for the language's basic constructs like classes, methods, variables, expressions, and statements. The grammar is defined using BNF notation to specify the valid structures and hierarchies of the language.

Uploaded by

Vihar Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
99 views3 pages

Syntax For CFG of DECAF

This document defines the syntax for a compiler. It defines tokens like keywords, operators, and punctuation. It also defines the grammar rules for the language's basic constructs like classes, methods, variables, expressions, and statements. The grammar is defined using BNF notation to specify the valid structures and hierarchies of the language.

Uploaded by

Vihar Patel
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Compilers

Module 0
Vihar M Patel - 201201064
Gaurav Singh - 201264059

MICRO SYNTAX:
=============================================================================
ALPHA
DIGIT
HEX_DIGIT
DELIM
COMMENT
SINGLE_QUOTE
DOUBLE_QUOTE
BACKSLASH
WHITESPACE
DECIMAL_LITERAL
HEX_LITERAL
CHAR
CHAR_LITERAL
STRING_LITERAL

[A-Za-z_]
[0-9]
[DIGITa-fA-F]
[\t\f \n]
[//]+[^\n]*
\'
\"
\\

BOOL_LITERAL

true | false

MINUS
PLUS
LOGICAL_NOT
MUL
DIV
MOD
LT
LE
GT
GE
EQEQ
NEQ
AND
OR
EQ
PLUSEQ
MINUSEQ
ID
INT
VOID
BOOL
BREAK
CONT
COMMA
SEMICOLON
CLASS
PROGRAM
IF
ELSE
CALLOUT
FOR
RET
OPEN_CURLY
CLOSE_CURLY

+
!
*
/
%
<
<=
>
>=
==
!=
&&
||
=
+=
-=
(ALPHA)[ALPHADIGIT]*
int
void
boolean
break
continue
,
;
class
Program
if
else
callout
for
return
{
}

(DELIM|COMMENT)+
[DIGIT]+
0x[HEX_DIGIT]+
[\40-\176 ^"^'^\ \' \" \\]
'[CHAR]'
"[CHAR]*"

OPEN_ROUND
CLOSE_ROUND
OPEN_SQUARE
CLOSE_SQUARE

(
)
[
]

MACRO SYNTAX:
=============================================================================
INITIAL_PROGRAM

-> CLASS PROGRAM OPEN_CURLY FIELD_DECL0


METHOD_DECL0 CLOSE_CURLY

FIELD_DECL0
FIELD_DECL1
VARS0
COMMA_VARS
VARS1

-> EPSILON | FIELD_DECL1 | FIELD_DECL0


-> TYPE VARS0 SEMICOLON
-> VARS1 COMMA_VARS
-> EPSILON | COMMA VARS1 | COMMA_VARS
-> ID | ID OPEN_SQUARE INT_LITERAL CLOSE_SQUARE

METHOD_DECL0
METHOD_DECL1
FUNC_VARS0
COMMA_FUNC_VARS
FUNC_VARS1
TYPE0
TYPE

-> EPSILON | METHOD_DECL1 | METHOD_DECL0


-> TYPE0 ID OPEN_ROUND FUNC_VARS0 CLOSE_ROUND BLOCK
-> FUNC_VARS1 COMMA_FUNC_VARS | EPSILON
-> COMMA FUNC_VARS1 | EPSILON | COMMA_FUNC_VARS
-> TYPE ID
-> TYPE | VOID
-> INT | BOOL

BLOCK

-> OPEN_CURLY VAR_DECL0 STATEMENT0 CLOSE_CURLY

VAR_DECL0
VAR_DECL1
VAR_DEC
COMMA_VAR_DECL

-> EPSILON | VAR_DECL1 | VAR_DECL0


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

STATEMENT0
ELSE0
STATEMENT

-> EPSILON | STATEMENT | STATEMENT0


-> EPSILON | ELSE BLOCK
-> 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
-> EQ | PLUSEQ | MINUSEQ

ASSIGN_OP
METHOD_CALL

-> ID OPEN_ROUND MULTIPLE_EXPR CLOSE_ROUND


| CALLOUT OPEN_ROUND STRING_LITERAL CALLOUT_ARG0
CLOSE_ROUND

LOCATION
MULTIPLE_EXPR
COMMA_EXPR

-> ID | ID OPEN_SQUARE EXPR CLOSE_SQUARE


-> EPSILON | EXPR COMMA_EXPR
-> EPSILON | COMMA EXPR | COMMA_EXPR

EXPR

-> LOCATION
| METHOD_CALL
| LITERAL
| UNARY_OP EXPR
| BINARY_EXPR0
| OPEN_ROUND EXPR CLOSE_ROUND

CALLOUT_ARG0
CALLOUT_ARG

-> COMMA CALLOUT_ARG | EPSILON | CALLOUT_ARG0


-> EXPR | STRING_LITERAL

UNARY_OP
ARITH_OP1
ARITH_OP2
REL_OP
EQ_OP

-> MINUS | LOGICAL_NOT


-> MUL | DIV | MOD
-> PLUS | MINUS
-> LE | LT | GE | GT
-> EQEQ | NEQ

BINARY_EXPR0
BINARY_EXPR1
BINARY_EXPR2
BINARY_EXPR3
BINARY_EXPR4
BINARY_EXPR5

-> BINARY_EXPR0 ARITH_OP1 BINARY_EXPR0 | BINARY_EXPR1


-> BINARY_EXPR1 ARITH_OP2 BINARY_EXPR1 | BINARY_EXPR2
-> BINARY_EXPR2 REL_OP BINARY_EXPR2 | BINARY_EXPR3
-> BINARY_EXPR3 EQ_OP BINARY_EXPR3 | BINARY_EXPR4
-> BINARY_EXPR4 AND BINARY_EXPR4 | BINARY_EXPR5
-> BINARY_EXPR5 OR BINARY_EXPR5 | LITERAL

LITERAL
INT_LITERAL

-> INT_LITERAL | CHAR_LITERAL | BOOL_LITERAL


-> MINUS DECIMAL_LITERAL | DECIMAL_LITERAL |
MINUS HEX_LITERAL | HEX_LITERAL
-> TRUE | FALSE

BOOL_LITERAL

You might also like