1// This file describes structure of jsonnet source code2// It is also used to generate files in src/generated34// Token names ending with `!` are considered meta, and handled specifically56SourceFile = Expr78ExprBinary =9 lhs:LhsExpr10 BinaryOperator11 rhs:Expr12ExprUnary =13 UnaryOperator14 rhs:Expr15ExprSlice =16 Expr17 SliceDesc18ExprIndex =19 Expr20 '.'21 index:Name22ExprIndexExpr =23 base:LhsExpr24 '['25 index:Expr26 ']'27ExprApply =28 Expr29 ArgsDesc30 'tailstrict'?31ExprObjExtend =32 LhsExpr33 Expr34ExprParened =35 '('36 Expr37 ')'3839ExprLiteral =40 Literal41ExprIntrinsicThisFile =42 '$intrinsicThisFile'43ExprIntrinsicId =44 '$intrinsicId'45ExprIntrinsic =46 '$intrinsic'47 '('48 name:Name49 ')'50ExprString =51 Text52ExprNumber =53 Number54ExprArray =55 '['56 (Expr (',' Expr)* ','?)?57 ']'58ExprObject =59 '{'60 ObjBody61 '}'62ExprArrayComp =63 '['64 Expr65 ','?66 CompSpec*67 ']'6869ExprImport =70 ImportKind Text7172ImportKind =73 'importstr'74| 'importbin'75| 'import'7677ExprVar =78 name:Name79ExprLocal =80 'local'81 (Bind (',' Bind)* ','?)82 ';'83 Expr8485ExprIfThenElse =86 'if'87 cond:Expr88 'then'89 then:TrueExpr90 ('else' else_:FalseExpr)?9192ExprFunction =93 'function'94 '('95 ParamsDesc96 ')'97 Expr98ExprAssert =99 Assertion100 ';'101 Expr102ExprError =103 'error'104 Expr105106Expr =107 ExprBinary108| ExprUnary109| ExprSlice110| ExprIndex111| ExprIndexExpr112| ExprApply113| ExprObjExtend114| ExprParened115| ExprIntrinsicThisFile116| ExprIntrinsicId117| ExprIntrinsic118| ExprString119| ExprNumber120| ExprLiteral121| ExprArray122| ExprObject123| ExprArrayComp124| ExprImport125| ExprVar126| ExprLocal127| ExprIfThenElse128| ExprFunction129| ExprAssert130| ExprError131132BinaryOperator =133 '||' | '&&'134| '|' | '^' | '&'135| '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in'136| '<<' | '>>'137| '+' | '-'138| '*' | '/' | '%'139| 'ERROR_NO_OPERATOR!'140141UnaryOperator =142 '-' | '!' | '~'143144SliceDescEnd=Expr145SliceDescStep=Expr146SliceDesc =147 '['148 from:Expr?149 ':'150 (151 end:SliceDescEnd?152 (153 ':'154 step:SliceDescStep?155 )?156 )?157 ']'158159Name =160 'LIT_IDENT!'161162ArgsDesc =163 '('164 (Arg (',' Arg)* ','?)?165 ')'166Arg =167 (name:Name '=')? Expr168169ObjBodyComp =170 pre:ObjLocalPostComma*171 '['172 key:LhsExpr173 ']'174 '+'?175 ':'176 value:Expr177 post:ObjLocalPreComma*178 CompSpec*179ObjBodyMemberList =180 (Member (',' Member)* ','?)?181ObjBody =182 ObjBodyComp183| ObjBodyMemberList184185ObjLocalPostComma =186 ObjLocal187 ','188ObjLocalPreComma =189 ','190 ObjLocal191192MemberBindStmt = ObjLocal193MemberAssertStmt = Assertion194MemberField = Field195Member =196 MemberBindStmt197| MemberAssertStmt198| MemberField199200ObjLocal =201 'local'202 Bind203204FieldNormal =205 FieldName206 '+'?207 Visibility208 Expr209FieldMethod =210 FieldName211 ParamsDesc212 Visibility213 Expr214Field =215 FieldNormal216| FieldMethod217218FieldNameFixed =219 id:Name220| Text221FieldNameDynamic =222 '['223 Expr224 ']'225FieldName =226 FieldNameFixed227| FieldNameDynamic228229Visibility =230 ':::'231| '::'232| ':'233234Literal =235 'null'236| 'true'237| 'false'238| 'self'239| '$'240| 'super'241242Text =243 'LIT_STRING_DOUBLE!'244| 'ERROR_STRING_DOUBLE_UNTERMINATED!'245| 'LIT_STRING_SINGLE!'246| 'ERROR_STRING_SINGLE_UNTERMINATED!'247| 'LIT_STRING_DOUBLE_VERBATIM!'248| 'ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED!'249| 'LIT_STRING_SINGLE_VERBATIM!'250| 'ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED!'251| 'ERROR_STRING_VERBATIM_MISSING_QUOTES!'252| 'LIT_STRING_BLOCK!'253| 'ERROR_STRING_BLOCK_UNEXPECTED_END!'254| 'ERROR_STRING_BLOCK_MISSING_NEW_LINE!'255| 'ERROR_STRING_BLOCK_MISSING_TERMINATION!'256| 'ERROR_STRING_BLOCK_MISSING_INDENT!'257258Number =259 'LIT_FLOAT!'260| 'ERROR_FLOAT_JUNK_AFTER_POINT!'261| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT!'262| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN!'263264ForSpec =265 'for'266 bind:Name267 'in'268 Expr269IfSpec =270 'if'271 Expr272CompSpec =273 ForSpec274| IfSpec275276BindDestruct =277 into:Destruct278 '='279 value:Expr280BindFunction =281 name:Name282 params:ParamsDesc283 '='284 value:Expr285Bind =286 BindDestruct287| BindFunction288289ParamsDesc =290 '('291 (Param (',' Param)* ','?)?292 ')'293Param =294 Destruct295 (296 '='297 Expr298 )?299300Assertion =301 'assert'302 condition:LhsExpr303 (304 ':'305 message:Expr306 )?307308DestructFull =309 Name310DestructSkip =311 '?'312DestructArray =313 '['314 (315 DestructArrayPart316 (',' DestructArrayPart)*317 ','?318 )?319 ']'320DestructObject =321 '{'322 (323 DestructObjectField324 (',' DestructObjectField)*325 ','?326 )?327 DestructRest?328 ','?329 '}'330Destruct =331 DestructFull332| DestructSkip333| DestructArray334| DestructObject335336DestructArrayElement =337 Destruct338DestructArrayPart =339 DestructArrayElement340| DestructRest341342DestructRest =343 '...'344 into:Name?345346DestructObjectField =347 field:Name348 (349 ':'350 Destruct351 )?352 (353 '='354 Expr355 )?356357// Aliases used to resolve node type conflicts358TrueExpr=Expr359FalseExpr=Expr360LhsExpr=Expr361362// Trivia - tokens which will be implicitly skipped for parser363Trivia =364 'LIT_WHITESPACE!'365| 'LIT_MULTI_LINE_COMMENT!'366| 'ERROR_COMMENT_TOO_SHORT!'367| 'ERROR_COMMENT_UNTERMINATED!'368| 'LIT_SINGLE_LINE_HASH_COMMENT!'369| 'LIT_SINGLE_LINE_SLASH_COMMENT!'