@@ -83,7 +83,8 @@ private ScriptBody Script() =>
8383 private List < StatementListItem > StatementList ( )
8484 {
8585 var statementList = new List < StatementListItem > ( ) ;
86- while ( CurrentIsDeclaration ( ) || CurrentIsExpression ( ) || CurrentIs ( "Output" ) ||
86+ while ( CurrentIsDeclaration ( ) || CurrentIsExpression ( ) ||
87+ CurrentIs ( "Output" ) || CurrentIs ( "Input" ) ||
8788 CurrentIsKeyword ( "return" ) || CurrentIsKeyword ( "break" ) || CurrentIsKeyword ( "continue" ) ||
8889 CurrentIsKeyword ( "if" ) || CurrentIsKeyword ( "while" ) )
8990 {
@@ -115,6 +116,7 @@ private StatementListItem StatementListItem()
115116 /// BreakStatement
116117 /// ReturnStatement
117118 /// OutputStatement
119+ /// InputStatement
118120 /// </summary>
119121 private Statement Statement ( )
120122 {
@@ -149,6 +151,9 @@ private Statement Statement()
149151 if ( CurrentIs ( "Output" ) )
150152 return OutputStatement ( ) ;
151153
154+ if ( CurrentIs ( "Input" ) )
155+ return InputStatement ( ) ;
156+
152157 return null ! ;
153158 }
154159
@@ -228,6 +233,32 @@ private OutputStatement OutputStatement()
228233 return new OutputStatement ( Expression ( ) ) ;
229234 }
230235
236+ /// <summary>
237+ /// InputStatement -> '<<<' (Ident | EnvVar)
238+ /// </summary>
239+ private InputStatement InputStatement ( )
240+ {
241+ var input = Expect ( "Input" ) ;
242+ if ( CurrentIsOperator ( "$" ) )
243+ {
244+ var dollar = Expect ( "Operator" ) ;
245+ var envIdent = Expect ( "Ident" ) ;
246+ return new InputStatement ( new EnvVarReference ( envIdent . Value )
247+ {
248+ Segment = dollar . Segment + envIdent . Segment
249+ } )
250+ {
251+ Segment = input . Segment + envIdent . Segment
252+ } ;
253+ }
254+
255+ var ident = Expect ( "Ident" ) ;
256+ return new InputStatement ( new IdentifierReference ( ident . Value ) { Segment = ident . Segment } )
257+ {
258+ Segment = input . Segment + ident . Segment
259+ } ;
260+ }
261+
231262 /// <summary>
232263 /// TypeDeclaration -> 'type' "Ident" = TypeValue
233264 /// </summary>
0 commit comments