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:Name68ExprLocal =69 'local'70 (Bind (',' Bind)* ','?)71 ';'72 Expr7374ExprIfThenElse =75 'if'76 cond:Expr77 'then'78 then:TrueExpr79 ('else' else_:FalseExpr)?8081ExprFunction =82 'function'83 '('84 ParamsDesc85 ')'86 Expr87ExprAssert =88 Assertion89 ';'90 Expr91ExprError =92 'error'93 Expr9495Expr =96 ExprBinary97| ExprUnary98| ExprSlice99| ExprIndex100| ExprIndexExpr101| ExprApply102| ExprObjExtend103| ExprParened104| ExprString105| ExprNumber106| ExprLiteral107| ExprArray108| ExprObject109| ExprArrayComp110| ExprImport111| ExprVar112| ExprLocal113| ExprIfThenElse114| ExprFunction115| ExprAssert116| ExprError117118BinaryOperator =119 '||' | '&&'120| '|' | '^' | '&'121| '==' | '!=' | '<' | '>' | '<=' | '>=' | 'in'122| '<<' | '>>'123| '+' | '-'124| '*' | '/' | '%'125| 'META_OBJECT_APPLY!'126| 'ERROR_NO_OPERATOR!'127128UnaryOperator =129 '-' | '!' | '~'130131SliceDescEnd=Expr132SliceDescStep=Expr133SliceDesc =134 '['135 from:Expr?136 ':'137 (138 end:SliceDescEnd?139 (140 ':'141 step:SliceDescStep?142 )?143 )?144 ']'145146Name =147 'LIT_IDENT!'148149ArgsDesc =150 '('151 (Arg (',' Arg)* ','?)?152 ')'153Arg =154 (name:Name '=')? Expr155156ObjBodyComp =157 '{'158 (MemberComp (',' MemberComp)* ','?)?159 CompSpec*160 '}'161ObjBodyMemberList =162 '{'163 (Member (',' Member)* ','?)?164 '}'165ObjBody =166 ObjBodyComp167| ObjBodyMemberList168169MemberBindStmt = ObjLocal170MemberAssertStmt = Assertion171MemberFieldNormal =172 FieldName173 '+'?174 Visibility175 Expr176MemberFieldMethod =177 FieldName178 ParamsDesc179 Visibility180 Expr181MemberComp =182 MemberBindStmt183| MemberFieldNormal184| MemberFieldMethod185Member =186 MemberBindStmt187| MemberAssertStmt188| MemberFieldNormal189| MemberFieldMethod190191ObjLocal =192 'local'193 Bind194195FieldNameFixed =196 id:Name197| Text198FieldNameDynamic =199 '['200 Expr201 ']'202FieldName =203 FieldNameFixed204| FieldNameDynamic205206Visibility =207 ':::'208| '::'209| ':'210211Literal =212 'null'213| 'true'214| 'false'215| 'self'216| '$'217| 'super'218219Text =220 'LIT_STRING_DOUBLE!'221| 'ERROR_STRING_DOUBLE_UNTERMINATED!'222| 'LIT_STRING_SINGLE!'223| 'ERROR_STRING_SINGLE_UNTERMINATED!'224| 'LIT_STRING_DOUBLE_VERBATIM!'225| 'ERROR_STRING_DOUBLE_VERBATIM_UNTERMINATED!'226| 'LIT_STRING_SINGLE_VERBATIM!'227| 'ERROR_STRING_SINGLE_VERBATIM_UNTERMINATED!'228| 'ERROR_STRING_VERBATIM_MISSING_QUOTES!'229| 'LIT_STRING_BLOCK!'230| 'ERROR_STRING_BLOCK_UNEXPECTED_END!'231| 'ERROR_STRING_BLOCK_MISSING_NEW_LINE!'232| 'ERROR_STRING_BLOCK_MISSING_TERMINATION!'233| 'ERROR_STRING_BLOCK_MISSING_INDENT!'234235Number =236 'LIT_FLOAT!'237| 'ERROR_FLOAT_JUNK_AFTER_POINT!'238| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT!'239| 'ERROR_FLOAT_JUNK_AFTER_EXPONENT_SIGN!'240241ForSpec =242 'for'243 bind:Name244 'in'245 Expr246IfSpec =247 'if'248 Expr249CompSpec =250 ForSpec251| IfSpec252253BindDestruct =254 into:Destruct255 '='256 value:Expr257BindFunction =258 name:Name259 params:ParamsDesc260 '='261 value:Expr262Bind =263 BindDestruct264| BindFunction265266ParamsDesc =267 '('268 (Param (',' Param)* ','?)?269 ')'270Param =271 Destruct272 (273 '='274 Expr275 )?276277Assertion =278 'assert'279 condition:LhsExpr280 (281 ':'282 message:Expr283 )?284285DestructFull =286 Name287DestructSkip =288 '?'289DestructArray =290 '['291 (292 DestructArrayPart293 (',' DestructArrayPart)*294 ','?295 )?296 ']'297DestructObject =298 '{'299 (300 DestructObjectField301 (',' DestructObjectField)*302 ','?303 )?304 DestructRest?305 ','?306 '}'307Destruct =308 DestructFull309| DestructSkip310| DestructArray311| DestructObject312313DestructArrayElement =314 Destruct315DestructArrayPart =316 DestructArrayElement317| DestructRest318319DestructRest =320 '...'321 into:Name?322323DestructObjectField =324 field:Name325 (326 ':'327 Destruct328 )?329 (330 '='331 Expr332 )?333334// Aliases used to resolve node type conflicts335TrueExpr=Expr336FalseExpr=Expr337LhsExpr=Expr338339// Trivia - tokens which will be implicitly skipped for parser340Trivia =341 'LIT_WHITESPACE!'342| 'LIT_MULTI_LINE_COMMENT!'343| 'ERROR_COMMENT_TOO_SHORT!'344| 'ERROR_COMMENT_UNTERMINATED!'345| 'LIT_SINGLE_LINE_HASH_COMMENT!'346| 'LIT_SINGLE_LINE_SLASH_COMMENT!'347348CustomError =349 'ERROR_MISSING_TOKEN!'350| 'ERROR_UNEXPECTED_TOKEN!'351| 'ERROR_CUSTOM!'