-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathspecification.txt
105 lines (89 loc) · 2.36 KB
/
specification.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
OUTER_STMTS ::= TSPEC T_IDENTIFIER OUTER_STMT OUTER_STMTS
OUTER_STMTS ::= ''
OUTER_STMT ::= FN
OUTER_STMT ::= OPT_ASSIGN T_SEMICOLON
FN ::= T_LPAREN PL T_RPAREN T_LCURLY INNER_STMTS OPT_RETURN T_RCURLY
PL ::= TSPEC T_IDENTIFIER O_PL
PL ::= ''
O_PL ::= T_COMMA PL
O_PL ::= ''
OPT_RETURN ::= T_RETURN EXPR T_SEMICOLON
OPT_RETURN ::= ''
TSPEC ::= T_INT
TSPEC ::= T_FLOAT
TSPEC ::= T_CHAR
TSPEC ::= T_VOID
TSPEC ::= T_BOOL
OPT_TSPEC ::= TSPEC
OPT_TSPEC ::= ''
INNER_STMTS ::= INNER_STMT INNER_STMTS
INNER_STMTS ::= ''
INNER_STMT ::= DECL_INIT T_SEMICOLON
INNER_STMT ::= T_IDENTIFIER ASSIGN_FNCALL T_SEMICOLON
INNER_STMT ::= IF_STMT
INNER_STMT ::= LOOP
INNER_STMT ::= T_PRINT T_LPAREN ARGS T_RPAREN T_SEMICOLON
INNER_STMT ::= T_BREAK T_SEMICOLON
INNER_STMT ::= T_CONTINUE T_SEMICOLON
DECL_INIT ::= TSPEC T_IDENTIFIER OPT_ASSIGN
OPT_ASSIGN ::= ASSIGN_OP EXPR
OPT_ASSIGN ::= ''
ASSIGN_FNCALL ::= T_LPAREN ARGS T_RPAREN
ASSIGN_FNCALL ::= ASSIGN_P
ASSIGN_P ::= ASSIGN_OP EXPR
ASSIGN_P ::= T_UNARY_PLUS
ASSIGN_P ::= T_UNARY_MINUS
ASSIGN_OP ::= T_ASSIGN
ASSIGN_OP ::= T_PLUS_ASSIGN
ASSIGN_OP ::= T_MINUS_ASSIGN
ASSIGN_OP ::= T_STAR_ASSIGN
ASSIGN_OP ::= T_SLASH_ASSIGN
IF_STMT ::= T_IF T_LPAREN EXPR T_RPAREN T_LCURLY INNER_STMTS T_RCURLY ELSE
ELSE ::= T_ELSE O_ELSE
ELSE ::= ''
O_ELSE ::= T_IF T_LPAREN EXPR T_RPAREN T_LCURLY INNER_STMTS T_RCURLY
O_ELSE ::= T_LCURLY INNER_STMTS T_RCURLY
LOOP ::= T_WHILE T_LPAREN EXPR T_RPAREN T_LCURLY INNER_STMTS T_RCURLY
LOOP ::= T_FOR T_LPAREN OPT_TSPEC FOR_P T_SEMICOLON OPT_EXPR T_SEMICOLON FOR_P T_RPAREN T_LCURLY INNER_STMTS T_RCURLY
FOR_P ::= T_IDENTIFIER ASSIGN_P
FOR_P ::= ''
ARGS ::= EXPR OPT_ARGS
ARGS ::= ''
OPT_ARGS ::= T_COMMA ARGS
OPT_ARGS ::= ''
EXPR ::= ADD EXPR_P
EXPR ::= T_NEGATION EXPR
EXPR_P ::= O_OP EXPR
EXPR_P ::= ''
OPT_EXPR ::= EXPR
OPT_EXPR ::= ''
ADD ::= MULT ADD_P
ADD_P ::= ADD_OP MULT ADD_P
ADD_P ::= ''
MULT ::= TERM MULT_P
MULT_P ::= MULT_OP TERM MULT_P
MULT_P ::= ''
ADD_OP ::= T_PLUS
ADD_OP ::= T_MINUS
MULT_OP ::= T_STAR
MULT_OP ::= T_SLASH
O_OP ::= T_LT
O_OP ::= T_LEQ
O_OP ::= T_GT
O_OP ::= T_GEQ
O_OP ::= T_EQ
O_OP ::= T_NEQ
O_OP ::= T_AND
O_OP ::= T_OR
O_OP ::= T_BITW_AND
O_OP ::= T_BITW_OR
TERM ::= T_LPAREN EXPR T_RPAREN
TERM ::= CONST
TERM ::= T_IDENTIFIER TERM_FNCALL
TERM_FNCALL ::= T_LPAREN ARGS T_RPAREN
TERM_FNCALL ::= ''
CONST ::= T_INT_LIT
CONST ::= T_FLOAT_LIT
CONST ::= T_STR_LIT
CONST ::= T_CHAR_LIT
CONST ::= T_BOOL_LIT