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 = Expr78SuffixIndex =9 '?'?10 '.'11 index:Name12SuffixIndexExpr =13 ('?' '.')?14 '['15 index:Expr16 ']'17SuffixSlice =18 SliceDesc19SuffixApply =20 ArgsDesc21 'tailstrict'?22Suffix =23 SuffixIndex24| SuffixIndexExpr25| SuffixSlice26| SuffixApply2728StmtLocal =29 'local'30 (Bind (',' Bind)* ','?)31 ';'32StmtAssert =33 Assertion34 ';'35Stmt =36 StmtLocal37| StmtAssert3839ExprBinary =40 lhs:Expr41 BinaryOperator42 rhs:Expr43ExprUnary =44 UnaryOperator45 rhs:Expr46ExprObjExtend =47 lhs:Expr48 rhs:Expr49ExprParened =50 '('51 Expr52 ')'5354ExprLiteral =55 Literal56ExprString =57 Text58ExprNumber =59 Number60ExprArray =61 '['62 (Expr (',' Expr)* ','?)?63 ']'64ExprObject =65 ObjBody66ExprArrayComp =67 '['68 Expr69 ','?70 CompSpec*71 ']'7273ExprImport =74 ImportKind Text7576ImportKind =77 'importstr'78| 'importbin'79| 'import'8081ExprVar =82 name:Name8384ExprIfThenElse =85 'if'86 cond:Expr87 'then'88 then:TrueExpr89 ('else' else_:FalseExpr)?9091ExprFunction =92 'function'93 '('94 ParamsDesc95 ')'96 Expr97ExprError =98 'error'99 Expr100101Expr =102 Stmt*103 ExprBase104 Suffix*105106ExprBase =107 ExprBinary108| ExprUnary109| ExprObjExtend110| ExprParened111| ExprString112| ExprNumber113| ExprLiteral114| ExprArray115| ExprObject116| ExprArrayComp117| ExprImport118| ExprVar119| ExprIfThenElse120| ExprFunction121| ExprError122123BinaryOperator =124 '||' | '??' | '&&'125| '|' | '^' | '&'126| '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in'127| '<<' | '>>'128| '+' | '-'129| '*' | '/' | '%'130| 'META_OBJECT_APPLY!'131| 'ERROR_NO_OPERATOR!'132133UnaryOperator =134 '-' | '!' | '~'135136SliceDescEnd=Expr137SliceDescStep=Expr138SliceDesc =139 '['140 from:Expr?141 ':'142 (143 end:SliceDescEnd?144 (145 ':'146 step:SliceDescStep?147 )?148 )?149 ']'150151Name =152 'LIT_IDENT!'153154ArgsDesc =155 '('156 (Arg (',' Arg)* ','?)?157 ')'158Arg =159 (name:Name '=')? Expr160161ObjBodyComp =162 '{'163 (MemberComp (',' MemberComp)* ','?)?164 CompSpec*165 '}'166ObjBodyMemberList =167 '{'168 (Member (',' Member)* ','?)?169 '}'170ObjBody =171 ObjBodyComp172| ObjBodyMemberList173174MemberBindStmt = ObjLocal175MemberAssertStmt = Assertion176MemberFieldNormal =177 FieldName178 '+'?179 Visibility180 Expr181MemberFieldMethod =182 FieldName183 ParamsDesc184 Visibility185 Expr186MemberComp =187 MemberBindStmt188| MemberFieldNormal189| MemberFieldMethod190Member =191 MemberBindStmt192| MemberAssertStmt193| MemberFieldNormal194| MemberFieldMethod195196ObjLocal =197 'local'198 Bind199200FieldNameFixed =201 id:Name202| Text203FieldNameDynamic =204 '['205 Expr206 ']'207FieldName =208 FieldNameFixed209| FieldNameDynamic210211Visibility =212 ':' ':'? ':'?213214Literal =215 'null'216| 'true'217| 'false'218| 'self'219| '$'220| 'super'221222Text =223 'LIT_STRING_DOUBLE!'224| 'ERROR_STRING_DOUBLE_UNTERMINATED!'225| 'LIT_STRING_SINGLE!'226| 'ERROR_STRING_SINGLE_UNTERMINATED!'227| 'LIT_STRING_DOUBLE_VERBATIM!'228| 'ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED!'229| 'LIT_STRING_SINGLE_VERBATIM!'230| 'ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED!'231| 'ERROR_STRING_VERBATIM_MISSING_QUOTES!'232| 'LIT_STRING_BLOCK!'233| 'ERROR_STRING_BLOCK_UNEXPECTED_END!'234| 'ERROR_STRING_BLOCK_MISSING_NEW_LINE!'235| 'ERROR_STRING_BLOCK_MISSING_TERMINATION!'236| 'ERROR_STRING_BLOCK_MISSING_INDENT!'237238Number =239 'LIT_FLOAT!'240| 'ERROR_FLOAT_JUNK_AFTER_POINT!'241| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT!'242| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN!'243244ForSpec =245 'for'246 bind:Destruct247 'in'248 Expr249IfSpec =250 'if'251 Expr252CompSpec =253 ForSpec254| IfSpec255256BindDestruct =257 into:Destruct258 '='259 value:Expr260BindFunction =261 name:Name262 params:ParamsDesc263 '='264 value:Expr265Bind =266 BindDestruct267| BindFunction268269ParamsDesc =270 '('271 (Param (',' Param)* ','?)?272 ')'273Param =274 Destruct275 (276 '='277 Expr278 )?279280Assertion =281 'assert'282 condition:Expr283 (284 ':'285 message:Expr286 )?287288DestructFull =289 Name290DestructSkip =291 '?'292DestructArray =293 '['294 (295 DestructArrayPart296 (',' DestructArrayPart)*297 ','?298 )?299 ']'300DestructObject =301 '{'302 (303 DestructObjectField304 (',' DestructObjectField)*305 ','?306 )?307 DestructRest?308 ','?309 '}'310Destruct =311 DestructFull312| DestructSkip313| DestructArray314| DestructObject315316DestructArrayElement =317 Destruct318DestructArrayPart =319 DestructArrayElement320| DestructRest321322DestructRest =323 '...'324 into:Name?325326DestructObjectField =327 field:Name328 (329 ':'330 Destruct331 )?332 (333 '='334 Expr335 )?336337// Aliases used to resolve node type conflicts338TrueExpr=Expr339FalseExpr=Expr340341// Trivia - tokens which will be implicitly skipped for parser342Trivia =343 'LIT_WHITESPACE!'344| 'LIT_MULTI_LINE_COMMENT!'345| 'ERROR_COMMENT_TOO_SHORT!'346| 'ERROR_COMMENT_UNTERMINATED!'347| 'LIT_SINGLE_LINE_HASH_COMMENT!'348| 'LIT_SINGLE_LINE_SLASH_COMMENT!'349350CustomError =351 'ERROR_MISSING_TOKEN!'352| 'ERROR_UNEXPECTED_TOKEN!'353| 'ERROR_CUSTOM!'