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 Expr48 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 ':::'213| '::'214| ':'215216Literal =217 'null'218| 'true'219| 'false'220| 'self'221| '$'222| 'super'223224Text =225 'LIT_STRING_DOUBLE!'226| 'ERROR_STRING_DOUBLE_UNTERMINATED!'227| 'LIT_STRING_SINGLE!'228| 'ERROR_STRING_SINGLE_UNTERMINATED!'229| 'LIT_STRING_DOUBLE_VERBATIM!'230| 'ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED!'231| 'LIT_STRING_SINGLE_VERBATIM!'232| 'ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED!'233| 'ERROR_STRING_VERBATIM_MISSING_QUOTES!'234| 'LIT_STRING_BLOCK!'235| 'ERROR_STRING_BLOCK_UNEXPECTED_END!'236| 'ERROR_STRING_BLOCK_MISSING_NEW_LINE!'237| 'ERROR_STRING_BLOCK_MISSING_TERMINATION!'238| 'ERROR_STRING_BLOCK_MISSING_INDENT!'239240Number =241 'LIT_FLOAT!'242| 'ERROR_FLOAT_JUNK_AFTER_POINT!'243| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT!'244| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN!'245246ForSpec =247 'for'248 bind:Destruct249 'in'250 Expr251IfSpec =252 'if'253 Expr254CompSpec =255 ForSpec256| IfSpec257258BindDestruct =259 into:Destruct260 '='261 value:Expr262BindFunction =263 name:Name264 params:ParamsDesc265 '='266 value:Expr267Bind =268 BindDestruct269| BindFunction270271ParamsDesc =272 '('273 (Param (',' Param)* ','?)?274 ')'275Param =276 Destruct277 (278 '='279 Expr280 )?281282Assertion =283 'assert'284 condition:Expr285 (286 ':'287 message:Expr288 )?289290DestructFull =291 Name292DestructSkip =293 '?'294DestructArray =295 '['296 (297 DestructArrayPart298 (',' DestructArrayPart)*299 ','?300 )?301 ']'302DestructObject =303 '{'304 (305 DestructObjectField306 (',' DestructObjectField)*307 ','?308 )?309 DestructRest?310 ','?311 '}'312Destruct =313 DestructFull314| DestructSkip315| DestructArray316| DestructObject317318DestructArrayElement =319 Destruct320DestructArrayPart =321 DestructArrayElement322| DestructRest323324DestructRest =325 '...'326 into:Name?327328DestructObjectField =329 field:Name330 (331 ':'332 Destruct333 )?334 (335 '='336 Expr337 )?338339// Aliases used to resolve node type conflicts340TrueExpr=Expr341FalseExpr=Expr342343// Trivia - tokens which will be implicitly skipped for parser344Trivia =345 'LIT_WHITESPACE!'346| 'LIT_MULTI_LINE_COMMENT!'347| 'ERROR_COMMENT_TOO_SHORT!'348| 'ERROR_COMMENT_UNTERMINATED!'349| 'LIT_SINGLE_LINE_HASH_COMMENT!'350| 'LIT_SINGLE_LINE_SLASH_COMMENT!'351352CustomError =353 'ERROR_MISSING_TOKEN!'354| 'ERROR_UNEXPECTED_TOKEN!'355| 'ERROR_CUSTOM!'