-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParserFirstSets.cs
More file actions
143 lines (142 loc) · 5.29 KB
/
Copy pathParserFirstSets.cs
File metadata and controls
143 lines (142 loc) · 5.29 KB
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
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace JavaScriptInterpreter
{
partial class Parser
{
// sym in FIRST[Statement]
private bool inFirstOfStatement()
{
return checkTokenTag(DomainTag.LBRACE) || checkReservedWord("var") || checkTokenTag(DomainTag.SEMICOLON) ||
checkReservedWord("if") || checkReservedWord("for") || checkReservedWord("while") || checkReservedWord("do") ||
checkReservedWord("break") || checkReservedWord("continue") || checkReservedWord("return") ||
checkReservedWord("switch") || inFirstOfExpressionStatement();
}
// sym in FIRST[ExpressionStatement]
private bool inFirstOfExpressionStatement()
{
// TEST
return inFirstOfExpression() && !(checkTokenTag(DomainTag.LBRACE) || checkReservedWord("function"));
}
// sym in FIRST[Literal]
private bool inFirstOfLiteral()
{
return checkReservedWord("null") || checkReservedWord("true") || checkReservedWord("false") ||
checkTokenTag(DomainTag.STRING) || checkTokenTag(DomainTag.NUMBER);
}
// sym in FIRST[ObjectLiteral]
private bool inFirstOfObjectLiteral()
{
return checkTokenTag(DomainTag.LBRACE);
}
// sym in FIRST[PrimaryExpression]
private bool inFirstOfPrimaryExpression()
{
return checkReservedWord("this") || checkTokenTag(DomainTag.IDENT) ||
inFirstOfLiteral() || checkTokenTag(DomainTag.LBRACE) || checkTokenTag(DomainTag.LPARENT) || checkTokenTag(DomainTag.LSBRACKET);
}
// sym in FIRST[PropertyAssignmnet]
private bool inFirstOfPropertyAssignmnet()
{
return checkTokenTag(DomainTag.IDENT) ||
checkTokenTag(DomainTag.STRING) ||
checkReservedWord("get") ||
checkReservedWord("set");
}
// sym in FIRST[PropertyNamesAndValues]
private bool inFirstOfPropertyNamesAndValues()
{
return inFirstOfPropertyAssignmnet();
}
// sym in FIRST[PropertyName]
private bool inFirstOfProperyName()
{
return checkTokenTag(DomainTag.IDENT) || checkTokenTag(DomainTag.STRING);
}
// sym in FIRST[MemberExpression]
private bool inFirstOfMemberExpression()
{
return inFirstOfPrimaryExpression() || checkReservedWord("function");
}
// sym in First[ArgumentList]
private bool inFirstOfArgumentList()
{
return inFirstOfAssignmentExpression();
}
// sym in FIRST[UnaryExpression]
private bool inFirstOfUnaryExpression()
{
return inFirstOfMemberExpression() || checkTokenTag(DomainTag.PLUS)
|| checkTokenTag(DomainTag.MINUS) || checkTokenTag(DomainTag.INCREMENT) || checkTokenTag(DomainTag.DECREMENT)
|| checkReservedWord("new") || checkReservedWord("delete") || checkTokenTag(DomainTag.LOGICAL_NOT);
}
// sym in FIRST[MultiplicativeExpression]
private bool inFirstOfMultiplicativeExpression()
{
return inFirstOfUnaryExpression();
}
// sym in FIRST[AdditiveExpression]
private bool inFirstOfAdditiveExpression()
{
return inFirstOfMultiplicativeExpression(); // TEST
}
// sym in FIRST[ShiftExpression]
private bool inFirstOfShiftExpression()
{
return inFirstOfAdditiveExpression();
}
// sym in FIRST[RelationalExpressionNoIn]
private bool inFirstOfRelationalExpression()
{
return inFirstOfShiftExpression();
}
// sym in FIRST[EqualityExpressionNoIn]
private bool inFirstOfEqualityExpression()
{
return inFirstOfRelationalExpression();
}
// sym in FIRST[BitwiseAndExpression]
private bool inFirstOfBitwiseAndExpression()
{
return inFirstOfEqualityExpression();
}
// sym in FIRST[BitwiseXorExpressionNoIn]
private bool inFirstOfBitwiseXorExpression()
{
return inFirstOfBitwiseAndExpression();
}
// sym in FIRST[BitwiseXorExpression]
private bool inFirstOfBitwiseOrExpression()
{
return inFirstOfBitwiseXorExpression();
}
// sym in FIRST[LogicalAndExpression]
private bool inFirstOfLogicalAndExpression()
{
return inFirstOfBitwiseOrExpression();
}
// sym in FIRST[LogicalOrExpression]
private bool inFirstOfLogicalOrExpression()
{
return inFirstOfLogicalAndExpression();
}
// sym in FIRST[ConditionalExpression]
private bool inFirstOfConditionalExpression()
{
return inFirstOfLogicalOrExpression();
}
// sym in FIRST[AssignmentExpression]
private bool inFirstOfAssignmentExpression()
{
return inFirstOfConditionalExpression();
}
// sym in FIRST[Expression]
private bool inFirstOfExpression()
{
return inFirstOfAssignmentExpression();
}
}
}