-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrammar.txt
59 lines (41 loc) · 1.35 KB
/
grammar.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
# Non-terminals in ALLCAPS.
# Terminals written as they appear in the programs.
# The | in the rules means "or". A * in front of a non-terminal means
# "zero or more". Square brackets are used to denote zero or one
# (i.e. optional).
PROGRAM := PROGRAM_PART*
PROGRAM_PART := STATEMENT
| FUNCTION
STATEMENT := { STATEMENT* }
| DECLARATION
| ASSIGNMENT
| IDENTIFIER [CALL_PARAMS] ;
| if EXPR : STATEMENT [else STATEMENT]
| return [EXPR] ;
| loop STATEMENT
| while EXPR : STATEMENT
| for FOR_DECLARATION , EXPR , FOR_ASSIGNMENT : STATEMENT
| break ;
| next ;
FUNCTION := fn IDENTIFIER [PARAMS] => STATEMENT
DECLARATION := TYPE IDENTIFIER [= EXPR] ;
FOR_DECLARATION := TYPE IDENTIFIER = EXPR
ASSIGNMENT := IDENTIFIER = EXPR ;
| IDENTIFIER INC_DEC ;
| IDENTIFIER ASSIGN_OP EXPR ;
FOR_ASSIGNMENT := IDENTIFIER = EXPR
| IDENTIFIER INC_DEC
| IDENTIFIER ASSIGN_OP EXPR
EXPR := TERM
| EXPR OP EXPR
| not EXPR
| - EXPR
| ( EXPR )
PARAMS := TYPE IDENTIFIER [, PARAMS]
INC_DEC := ++ | --
ASSIGN_OP := += | -=
CALL_PARAMS := EXPR [, CALL_PARAMS]
TYPE := int | string | float | bool
TERM := LITERAL
| IDENTIFIER [( [CALL_PARAMS] )]
OP := + | - | * | / | % | and | or