-
Notifications
You must be signed in to change notification settings - Fork 0
/
LL-GRAMMAR
121 lines (87 loc) · 3.98 KB
/
LL-GRAMMAR
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
Terminální abeceda T:
ident number string + - * div mod = <> < <= > >= or and ( ) [ ] . .. , : ; := var const program function procedure forward integer array of begin end if then else while do for to downto exit inc dec readln write writeln
Neterminální abeceda N:
parseProgram parseFunDeclArgs parseFunDeclArgsRest parseFunExprArgs parseFunExprArgsRest parseFunDeclBody parseDeclsGlob parseDeclsLoc parseDeclGlob parseDeclLoc parseConstDeclRest parseVarDeclRest parseBlock parseBlockRest parseStmt parseStmtIdent parseStmtLvalIdent parseElseBranch parseForDirection parseExpr0 parseExpr0Rest parseExpr1 parseExpr1Rest parseExpr2 parseExpr2Rest parseExpr3 parseExpr3Rest parseExpr4 parseExpr4Rest parseExpr5 parseExpr5Ident parseMinusNumber parseTypeIdent parseIdentListRest
Pravidla P:
parseProgram -> program ident ; parseDeclsGlob parseBlock .
parseDeclsGlob -> function ident ( parseFunDeclArgs ) : parseTypeIdent ; parseFunDeclBody ; parseDeclsGlob
parseDeclsGlob -> procedure ident ( parseFunDeclArgs ) ; parseFunDeclBody ; parseDeclsGlob
parseDeclsGlob ->
parseFunDeclArgs -> ident : parseTypeIdent parseFunDeclArgsRest
parseFunDeclArgs ->
parseFunDeclArgsRest -> ; ident : parseTypeIdent parseFunDeclArgsRest
parseFunDeclArgsRest ->
parseFunDeclBody -> parseBlock
parseFunDeclBody -> forward
parseDeclsLoc -> const ident parseIdentListRest = parseMinusNumber ; parseConstDeclRest parseDeclsLoc
parseDeclsLoc -> var ident parseIdentListRest : parseTypeIdent ; parseVarDeclRest parseDeclsLoc
parseDeclsLoc ->
parseConstDeclRest -> ident parseIdentListRest = parseMinusNumber ; parseConstDeclRest
parseConstDeclRest ->
parseVarDeclRest -> ident parseIdentListRest : parseTypeIdent ; parseVarDeclRest
parseVarDeclRest ->
parseBlock -> parseDeclsLoc begin parseStmt parseBlockRest end
parseBlockRest -> ; parseStmt parseBlockRest
parseBlockRest ->
parseStmt -> ident parseStmtIdent
parseStmt -> if parseExpr0 then parseStmt parseElseBranch
parseStmt -> while parseExpr0 do parseStmt
parseStmt -> for ident := parseExpr0 parseForDirection parseExpr0 do parseStmt
parseStmt -> exit
parseStmt -> parseBlock
parseStmt -> inc ( ident parseStmtLvalIdent )
parseStmt -> dec ( ident parseStmtLvalIdent )
parseStmt -> readln ( ident parseStmtLvalIdent )
parseStmt -> write ( string )
parseStmt -> writeln ( parseExpr0 )
parseStmt ->
parseStmtIdent -> parseStmtLvalIdent := parseExpr0
parseStmtIdent -> ( parseFunExprArgs )
parseStmtLvalIdent -> [ parseExpr0 ]
parseStmtLvalIdent ->
parseElseBranch -> else parseStmt
parseElseBranch ->
parseForDirection -> to
parseForDirection -> downto
parseExpr0 -> parseExpr1 parseExpr0Rest
parseExpr0Rest -> or parseExpr1 parseExpr0Rest
parseExpr0Rest ->
parseExpr1 -> parseExpr2 parseExpr1Rest
parseExpr1Rest -> and parseExpr2 parseExpr1Rest
parseExpr1Rest ->
parseExpr2 -> parseExpr3 parseExpr2Rest
parseExpr2Rest -> = parseExpr3
parseExpr2Rest -> <> parseExpr3
parseExpr2Rest -> < parseExpr3
parseExpr2Rest -> <= parseExpr3
parseExpr2Rest -> > parseExpr3
parseExpr2Rest -> >= parseExpr3
parseExpr2Rest ->
parseExpr3 -> parseExpr4 parseExpr3Rest
parseExpr3 -> - parseExpr4 parseExpr3Rest
parseExpr3Rest -> + parseExpr4 parseExpr3Rest
parseExpr3Rest -> - parseExpr4 parseExpr3Rest
parseExpr3Rest ->
parseExpr4 -> parseExpr5 parseExpr4Rest
parseExpr4Rest -> * parseExpr5 parseExpr4Rest
parseExpr4Rest -> div parseExpr5 parseExpr4Rest
parseExpr4Rest -> mod parseExpr5 parseExpr4Rest
parseExpr4Rest ->
parseExpr5 -> ident parseExpr5Ident
parseExpr5 -> number
parseExpr5 -> ( parseExpr0 )
parseExpr5Ident -> ( parseFunExprArgs )
parseExpr5Ident -> [ parseExpr0 ]
parseExpr5Ident ->
parseFunExprArgs -> parseExpr0 parseFunExprArgsRest
parseFunExprArgs ->
parseFunExprArgsRest -> , parseExpr0 parseFunExprArgsRest
parseFunExprArgsRest ->
parseMinusNumber -> number
parseMinusNumber -> - number
parseTypeIdent -> integer
parseTypeIdent -> array [ parseMinusNumber .. parseMinusNumber ] of parseTypeIdent
parseIdentListRest -> , ident parseIdentListRest
parseIdentListRest ->
Počáteční symbol S:
parseProgram