Skip to content

Commit 124e775

Browse files
committed
#201 - parser refactor
1 parent d27cb92 commit 124e775

File tree

1 file changed

+22
-25
lines changed

1 file changed

+22
-25
lines changed

src/Domain/HydraScript.Domain.FrontEnd/Parser/Impl/TopDownParser.cs

Lines changed: 22 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,18 @@ private bool CurrentIsOperator(string @operator) =>
5959
CurrentIs("Operator") &&
6060
_tokens.Current.Value == @operator;
6161

62+
private bool CurrentIsUnaryOperator() =>
63+
CurrentIsOperator("-") || CurrentIsOperator("!") ||
64+
CurrentIsOperator("~") || CurrentIsOperator("$");
65+
66+
private bool CurrentIsDeclaration() =>
67+
CurrentIsKeyword("function") || CurrentIsKeyword("let") ||
68+
CurrentIsKeyword("const") || CurrentIsKeyword("type");
69+
70+
private bool CurrentIsExpression() =>
71+
CurrentIs("Ident") || CurrentIsLiteral() || CurrentIsUnaryOperator() ||
72+
CurrentIs("LeftParen") || CurrentIs("LeftCurl") || CurrentIs("LeftBracket");
73+
6274
/// <summary>
6375
/// Script -> StatementList
6476
/// </summary>
@@ -71,14 +83,9 @@ private ScriptBody Script() =>
7183
private List<StatementListItem> StatementList()
7284
{
7385
var statementList = new List<StatementListItem>();
74-
while (
75-
CurrentIsKeyword("function") || CurrentIsKeyword("let") || CurrentIsKeyword("const") ||
76-
CurrentIs("Ident") || CurrentIsLiteral() || CurrentIs("LeftParen") ||
77-
CurrentIsOperator("-") || CurrentIsOperator("!") || CurrentIsOperator("~") ||
78-
CurrentIs("LeftCurl") || CurrentIsKeyword("return") || CurrentIsKeyword("break") ||
79-
CurrentIsKeyword("continue") || CurrentIsKeyword("if") || CurrentIsKeyword("while") ||
80-
CurrentIsKeyword("type") || CurrentIs("Print")
81-
)
86+
while (CurrentIsDeclaration() || CurrentIsExpression() || CurrentIs("Print") ||
87+
CurrentIsKeyword("return") || CurrentIsKeyword("break") || CurrentIsKeyword("continue") ||
88+
CurrentIsKeyword("if") || CurrentIsKeyword("while"))
8289
{
8390
statementList.Add(StatementListItem());
8491
}
@@ -91,8 +98,7 @@ private List<StatementListItem> StatementList()
9198
/// </summary>
9299
private StatementListItem StatementListItem()
93100
{
94-
if (CurrentIsKeyword("function") || CurrentIsKeyword("let") ||
95-
CurrentIsKeyword("const") || CurrentIsKeyword("type"))
101+
if (CurrentIsDeclaration())
96102
{
97103
return Declaration();
98104
}
@@ -113,8 +119,7 @@ private StatementListItem StatementListItem()
113119
private Statement Statement()
114120
{
115121
if (CurrentIs("Ident") || CurrentIsLiteral() ||
116-
CurrentIs("LeftParen") || CurrentIsOperator("-") ||
117-
CurrentIsOperator("!") || CurrentIsOperator("~"))
122+
CurrentIs("LeftParen") || CurrentIsUnaryOperator())
118123
return ExpressionStatement();
119124

120125
if (CurrentIs("LeftCurl"))
@@ -173,9 +178,7 @@ private ExpressionStatement ExpressionStatement()
173178
private ReturnStatement ReturnStatement()
174179
{
175180
var ret = Expect("Keyword", "return");
176-
if (CurrentIs("Ident") || CurrentIsLiteral() || CurrentIs("LeftParen")||
177-
CurrentIsOperator("-") || CurrentIsOperator("!") || CurrentIsOperator("~") ||
178-
CurrentIs("LeftCurl") || CurrentIs("LeftBracket"))
181+
if (CurrentIsExpression())
179182
{
180183
return new ReturnStatement(Expression()) { Segment = ret.Segment };
181184
}
@@ -472,10 +475,7 @@ private Expression CallExpression()
472475
{
473476
Expect("LeftParen");
474477
var expressions = new List<Expression>();
475-
if (CurrentIs("Ident") || CurrentIsLiteral() ||
476-
CurrentIs("LeftParen") || CurrentIsOperator("-") ||
477-
CurrentIsOperator("!") || CurrentIsOperator("~") ||
478-
CurrentIs("LeftCurl") || CurrentIs("LeftBracket"))
478+
if (CurrentIsExpression())
479479
{
480480
expressions.Add(Expression());
481481
}
@@ -711,11 +711,11 @@ private Expression MultiplicativeExpression()
711711
}
712712

713713
/// <summary>
714-
/// UnaryExpression -> LeftHandSideExpression | ('-'|'!'|'~') UnaryExpression
714+
/// UnaryExpression -> LeftHandSideExpression | ('-'|'!'|'~'|'$') UnaryExpression
715715
/// </summary>
716716
private Expression UnaryExpression()
717717
{
718-
if (CurrentIsOperator("-") || CurrentIsOperator("!") || CurrentIsOperator("~"))
718+
if (CurrentIsUnaryOperator())
719719
{
720720
var op = Expect("Operator");
721721
return new UnaryExpression(op.Value, UnaryExpression())
@@ -864,10 +864,7 @@ private ArrayLiteral ArrayLiteral()
864864
{
865865
var lb = Expect("LeftBracket").Segment;
866866
var expressions = new List<Expression>();
867-
while (CurrentIs("Ident") || CurrentIsLiteral() ||
868-
CurrentIs("LeftParen") || CurrentIsOperator("-") ||
869-
CurrentIsOperator("!") || CurrentIsOperator("~") ||
870-
CurrentIs("LeftCurl") || CurrentIs("LeftBracket"))
867+
while (CurrentIsExpression())
871868
{
872869
expressions.Add(Expression());
873870
if (!CurrentIs("RightBracket"))

0 commit comments

Comments
 (0)