-
Notifications
You must be signed in to change notification settings - Fork 0
/
Grammar.txt
51 lines (51 loc) · 2.5 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
<program>- <moduleDeclarations> <otherModules> <driverModule> <otherModules>
<moduleDeclarations>- <moduleDeclaration> <moduleDeclarations> | e
<moduleDeclaration>- DECLARE MODULE ID SEMICOL
<otherModules>- <module> <otherModules> | e
<driverModule>- DRIVERDEF DRIVER PROGRAM DRIVERENDDEF <moduleDef>
<module>- DEF MODULE ID ENDDEF TAKES INPUT SQBO <input_plist> SQBC SEMICOL <ret> <moduleDef>
<ret>- RETURNS SQBO <output_plist> SQBC SEMICOL | e
<input_plist>- ID COLON <dataType> <N1>
<N1>- COMMA ID COLON <dataType> <N1> | e
<output_plist>- ID COLON <type> <N2>
<N2>- COMMA ID COLON <type> <N2> | e
<dataType>- INTEGER | REAL | BOOLEAN | ARRAY SQBO <range> SQBC OF <type>
<type>- INTEGER | REAL | BOOLEAN
<moduleDef>- START <statements> END
<statements>- <statement> <statements> | e
<statement>- <ioStmt> | <simpleStmt> | <declareStmt> | <condionalStmt> | <iterativeStmt>
<ioStmt>- GET_VALUE BO ID BC SEMICOL | PRINT BO <var> BC SEMICOL
<var>- ID <whichId> | NUM | RNUM | TRUE | FALSE
<whichId>- SQBO <index> SQBC | e
<simpleStmt>- <assignmentStmt> | <moduleReuseStmt>
<assignmentStmt>- ID <whichStmt>
<whichStmt>- <lvalueIDStmt> | <lvalueARRStmt>
<lvalueIDStmt>- ASSIGNOP <expression> SEMICOL
<lvalueARRStmt>- SQBO <index> SQBC ASSIGNOP <expression> SEMICOL
<index>- NUM | ID
<moduleReuseStmt>- <optional> USE MODULE ID WITH PARAMETERS <idList> SEMICOL
<optional>- SQBO <idList> SQBC ASSIGNOP | e
<idList>- ID <N3>
<N3>- COMMA ID <N3> | e
<expression>- <arithmeticOrBooleanExpr> | MINUS BO <arithmeticExpr> BC
<arithmeticOrBooleanExpr>- <AnyTerm> <N7>
<N7>- <logicalOp> <AnyTerm> <N7> | e
<AnyTerm>- <arithmeticExpr> <N8>
<N8>- <relationalOp> <arithmeticExpr> <N8> | e
<arithmeticExpr>- <term> <N4>
<N4>- <op1> <term> <N4> | e
<term>- <factor> <N5>
<N5>- <op2> <factor> <N5> | e
<factor>- BO <arithmeticOrBooleanExpr> BC | <var>
<op1>- PLUS | MINUS
<op2>- MUL | DIV
<logicalOp>- AND | OR
<relationalOp>- LT | LE | GT | GE | EQ | NE
<declareStmt>- DECLARE <idList> COLON <dataType> SEMICOL
<condionalStmt>- SWITCH BO ID BC START <caseStmts> <default> END
<caseStmts>- CASE <value> COLON <statements> BREAK SEMICOL <N9>
<N9>- CASE <value> COLON <statements> BREAK SEMICOL <N9> | e
<value>- NUM | TRUE | FALSE
<default>- DEFAULT COLON <statements> BREAK SEMICOL | e
<iterativeStmt>- FOR BO ID IN <range> BC START <statements> END | WHILE BO <expression> BC START <statements> END
<range>- NUM RANGEOP NUM