1SourceFile = Expr23ExprBinary =4 lhs:Expr5 BinaryOperator6 rhs:Expr7ExprUnary =8 UnaryOperator9 rhs:Expr10ExprSlice =11 Expr12 '['13 SliceDesc14 ']'15ExprIndex =16 Expr17 '.'18 index:Name19ExprIndexExpr =20 base:Expr21 '['22 index:Expr23 ']'24ExprApply =25 Expr26 '('27 ArgsDesc28 ')'29 'tailstrict'?30ExprObjExtend =31 Expr32 '{'33 ObjBody34 '}'35ExprParened =36 '('37 Expr38 ')'3940ExprLiteral =41 Literal42ExprIntrinsicThisFile =43 '$intrinsicThisFile'44ExprIntrinsicId =45 '$intrinsicId'46ExprIntrinsic =47 '$intrinsic'48 '('49 name:Name50 ')'51ExprString =52 String53ExprNumber =54 Number55ExprArray =56 '['57 (Expr (',' Expr)* ','?)?58 ']'59ExprObject =60 '{'61 ObjBody62 '}'63ExprArrayComp =64 '['65 Expr66 ','?67 ForSpec68 CompSpec*69 ']'70ExprImport =71 'importstr' String72| 'importbin' String73| 'import' String7475ExprVar =76 name:Name77ExprLocal =78 'local'79 (Bind (',' Bind)* ','?)80 ';'81ExprIfThenElse =82 'if'83 cond:Expr84 'then'85 then:Expr86 ('else' else_:Expr)?87ExprFunction =88 'function'89 '('90 ParamsDesc91 ')'92 Expr93ExprAssert =94 Assertion95 ';'96 Expr97ExprError =98 'error'99 Expr100101Expr =102 ExprBinary103| ExprUnary104| ExprSlice105| ExprIndex106| ExprIndexExpr107| ExprApply108| ExprObjExtend109| ExprParened110| ExprIntrinsicThisFile111| ExprIntrinsicId112| ExprIntrinsic113| ExprString114| ExprNumber115| ExprArray116| ExprObject117| ExprArrayComp118| ExprImport119| ExprVar120| ExprLocal121| ExprIfThenElse122| ExprFunction123| ExprAssert124| ExprError125126BinaryOperator =127 '||' | '&&'128| '|' | '^' | '&'129| '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in'130| '<<' | '>>'131| '+' | '-'132| '*' | '/' | '%'133134UnaryOperator =135 '-' | '!' | '~'136137SliceDesc =138 from:Expr?139 ':'140 (141 end:Expr?142 (143 ':'144 step:Expr?145 )?146 )?147148Name =149 'ident'150151ArgsDesc =152 (Arg (',' Arg)* ','?)?153Arg =154 (name:Name '=')? Expr155156ObjBodyComp =157 pre:ObjLocalPostComma*158 '['159 key:Expr160 ']'161 '+'?162 ':'163 value:Expr164 post:ObjLocalPreComma*165 ForSpec166 CompSpec*167ObjBodyMemberList =168 (Member (',' Member) ','?)?169ObjBody =170 ObjBodyComp171| ObjBodyMemberList172173ObjLocalPostComma =174 ObjLocal175 ','176ObjLocalPreComma =177 ','178 ObjLocal179180MemberBindStmt = ObjLocal181MemberAssertStmt = Assertion182MemberField = Field183Member =184 MemberBindStmt185| MemberAssertStmt186| MemberField187188ObjLocal =189 'local'190 Bind191192FieldNormal =193 FieldName194 '+'?195 Visibility196 Expr197FieldMethod =198 FieldName199 '('200 ParamsDesc201 ')'202 Visibility203 Expr204Field =205 FieldNormal206| FieldMethod207208FieldNameFixed =209 id:Name210| String211FieldNameDynamic =212 '['213 Expr214 ']'215FieldName =216 FieldNameFixed217| FieldNameDynamic218219Visibility =220 ':::'221| '::'222| ':'223224Literal =225 'null'226| 'true'227| 'false'228| 'self'229| '$'230| 'super'231232String =233 'string_double'234| 'string_single'235| 'string_double_verbatim'236| 'string_single_verbatim'237| 'string_block'238239Number =240 'number'241242ForSpec =243 'for'244 bind:Name245 'in'246 Expr247IfSpec =248 'if'249 Expr250CompSpec =251 ForSpec252| IfSpec253254BindDestruct =255 into:Destruct256 '='257 value:Expr258BindFunction =259 name:Name260 '('261 params:ParamsDesc262 ')'263 '='264 value:Expr265Bind =266 BindDestruct267| BindFunction268269ParamsDesc =270 (Param (',' Param)* ','?)?271Param =272 Destruct273 (274 '='275 Expr276 )?277278Assertion =279 'assert'280 condition:Expr281 (282 ':'283 Expr284 )?285286DestructFull =287 into:Name288DestructSkip =289 '?'290DestructArray =291 '['292 start:(293 Destruct294 (',' Destruct)*295 ','?296 )?297 DestructRest?298 ','?299 end:(300 Destruct301 (',' Destruct)*302 ','?303 )304 ']'305DestructObject =306 '{'307 (308 DestructObjectField309 (',' DestructObjectField)*310 ','?311 )?312 DestructRest?313 ','?314 '}'315Destruct =316 DestructFull317 DestructSkip318 DestructArray319 DestructObject320321DestructRest =322 '...'323 into:Name?324325DestructObjectField =326 field:Name327 (328 ':'329 Destruct330 )?331 (332 '='333 Expr334 )?