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 Expr249ForObjSpec =250 'for'251 '['252 key:Name253 ']'254 Visibility255 value:Destruct256 'in'257 Expr258IfSpec =259 'if'260 Expr261CompSpec =262 ForSpec263| ForObjSpec264| IfSpec265266BindDestruct =267 into:Destruct268 '='269 value:Expr270BindFunction =271 name:Name272 params:ParamsDesc273 '='274 value:Expr275Bind =276 BindDestruct277| BindFunction278279ParamsDesc =280 '('281 (Param (',' Param)* ','?)?282 ')'283Param =284 Destruct285 (286 '='287 Expr288 )?289290Assertion =291 'assert'292 condition:Expr293 (294 ':'295 message:Expr296 )?297298DestructFull =299 Name300DestructSkip =301 '?'302DestructArray =303 '['304 (305 DestructArrayPart306 (',' DestructArrayPart)*307 ','?308 )?309 ']'310DestructObject =311 '{'312 (313 DestructObjectField314 (',' DestructObjectField)*315 ','?316 )?317 DestructRest?318 ','?319 '}'320Destruct =321 DestructFull322| DestructSkip323| DestructArray324| DestructObject325326DestructArrayElement =327 Destruct328DestructArrayPart =329 DestructArrayElement330| DestructRest331332DestructRest =333 '...'334 into:Name?335336DestructObjectField =337 field:Name338 (339 ':'340 Destruct341 )?342 (343 '='344 Expr345 )?346347// Aliases used to resolve node type conflicts348TrueExpr=Expr349FalseExpr=Expr350351// Trivia - tokens which will be implicitly skipped for parser352Trivia =353 'LIT_WHITESPACE!'354| 'LIT_MULTI_LINE_COMMENT!'355| 'ERROR_COMMENT_TOO_SHORT!'356| 'ERROR_COMMENT_UNTERMINATED!'357| 'LIT_SINGLE_LINE_HASH_COMMENT!'358| 'LIT_SINGLE_LINE_SLASH_COMMENT!'359360CustomError =361 'ERROR_MISSING_TOKEN!'362| 'ERROR_UNEXPECTED_TOKEN!'363| 'ERROR_CUSTOM!'