@@ -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