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 Literal41ExprString =42 Text43ExprNumber =44 Number45ExprArray =46 '['47 (Expr (',' Expr)* ','?)?48 ']'49ExprObject =50 ObjBody51ExprArrayComp =52 '['53 Expr54 ','?55 CompSpec*56 ']'5758ExprImport =59 ImportKind Text6061ImportKind =62 'importstr'63| 'importbin'64| 'import'6566ExprVar =67 name:Name6869ExprIfThenElse =70 'if'71 cond:Expr72 'then'73 then:TrueExpr74 ('else' else_:FalseExpr)?7576ExprFunction =77 'function'78 '('79 ParamsDesc80 ')'81 Expr82ExprAssert =83 Assertion84 ';'85 Expr86ExprError =87 'error'88 Expr8990StmtLocal =91 'local'92 (Bind (',' Bind)* ','?)93 ';'9495Expr =96 StmtLocal*97 ExprBase98ExprBase =99 ExprBinary100| ExprUnary101| ExprSlice102| ExprIndex103| ExprIndexExpr104| ExprApply105| ExprObjExtend106| ExprParened107| ExprString108| ExprNumber109| ExprLiteral110| ExprArray111| ExprObject112| ExprArrayComp113| ExprImport114| ExprVar115| ExprIfThenElse116| ExprFunction117| ExprAssert118| ExprError119120BinaryOperator =121 '||' | '&&'122| '|' | '^' | '&'123| '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in'124| '<<' | '>>'125| '+' | '-'126| '*' | '/' | '%'127| 'META_OBJECT_APPLY!'128| 'ERROR_NO_OPERATOR!'129130UnaryOperator =131 '-' | '!' | '~'132133SliceDescEnd=Expr134SliceDescStep=Expr135SliceDesc =136 '['137 from:Expr?138 ':'139 (140 end:SliceDescEnd?141 (142 ':'143 step:SliceDescStep?144 )?145 )?146 ']'147148Name =149 'LIT_IDENT!'150151ArgsDesc =152 '('153 (Arg (',' Arg)* ','?)?154 ')'155Arg =156 (name:Name '=')? Expr157158ObjBodyComp =159 '{'160 (MemberComp (',' MemberComp)* ','?)?161 CompSpec*162 '}'163ObjBodyMemberList =164 '{'165 (Member (',' Member)* ','?)?166 '}'167ObjBody =168 ObjBodyComp169| ObjBodyMemberList170171MemberBindStmt = ObjLocal172MemberAssertStmt = Assertion173MemberFieldNormal =174 FieldName175 '+'?176 Visibility177 Expr178MemberFieldMethod =179 FieldName180 ParamsDesc181 Visibility182 Expr183MemberComp =184 MemberBindStmt185| MemberFieldNormal186| MemberFieldMethod187Member =188 MemberBindStmt189| MemberAssertStmt190| MemberFieldNormal191| MemberFieldMethod192193ObjLocal =194 'local'195 Bind196197FieldNameFixed =198 id:Name199| Text200FieldNameDynamic =201 '['202 Expr203 ']'204FieldName =205 FieldNameFixed206| FieldNameDynamic207208Visibility =209 ':::'210| '::'211| ':'212213Literal =214 'null'215| 'true'216| 'false'217| 'self'218| '$'219| 'super'220221Text =222 'LIT_STRING_DOUBLE!'223| 'ERROR_STRING_DOUBLE_UNTERMINATED!'224| 'LIT_STRING_SINGLE!'225| 'ERROR_STRING_SINGLE_UNTERMINATED!'226| 'LIT_STRING_DOUBLE_VERBATIM!'227| 'ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED!'228| 'LIT_STRING_SINGLE_VERBATIM!'229| 'ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED!'230| 'ERROR_STRING_VERBATIM_MISSING_QUOTES!'231| 'LIT_STRING_BLOCK!'232| 'ERROR_STRING_BLOCK_UNEXPECTED_END!'233| 'ERROR_STRING_BLOCK_MISSING_NEW_LINE!'234| 'ERROR_STRING_BLOCK_MISSING_TERMINATION!'235| 'ERROR_STRING_BLOCK_MISSING_INDENT!'236237Number =238 'LIT_FLOAT!'239| 'ERROR_FLOAT_JUNK_AFTER_POINT!'240| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT!'241| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN!'242243ForSpec =244 'for'245 bind:Name246 'in'247 Expr248IfSpec =249 'if'250 Expr251CompSpec =252 ForSpec253| IfSpec254255BindDestruct =256 into:Destruct257 '='258 value:Expr259BindFunction =260 name:Name261 params:ParamsDesc262 '='263 value:Expr264Bind =265 BindDestruct266| BindFunction267268ParamsDesc =269 '('270 (Param (',' Param)* ','?)?271 ')'272Param =273 Destruct274 (275 '='276 Expr277 )?278279Assertion =280 'assert'281 condition:LhsExpr282 (283 ':'284 message:Expr285 )?286287DestructFull =288 Name289DestructSkip =290 '?'291DestructArray =292 '['293 (294 DestructArrayPart295 (',' DestructArrayPart)*296 ','?297 )?298 ']'299DestructObject =300 '{'301 (302 DestructObjectField303 (',' DestructObjectField)*304 ','?305 )?306 DestructRest?307 ','?308 '}'309Destruct =310 DestructFull311| DestructSkip312| DestructArray313| DestructObject314315DestructArrayElement =316 Destruct317DestructArrayPart =318 DestructArrayElement319| DestructRest320321DestructRest =322 '...'323 into:Name?324325DestructObjectField =326 field:Name327 (328 ':'329 Destruct330 )?331 (332 '='333 Expr334 )?335336// Aliases used to resolve node type conflicts337TrueExpr=Expr338FalseExpr=Expr339LhsExpr=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!'