UNPKG

simc-ast-builder

Version:

Parser and AST generator for SimulationCraft files

1,417 lines (1,416 loc) 63 kB
"use strict"; // Generated from ./src/parser/antlr4/SimCExpr.g4 by ANTLR 4.9.0-SNAPSHOT var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.XorExprContext = exports.UnaryExprContext = exports.SublistNameContext = exports.StringExprContext = exports.SimCExprParser = exports.ParseContext = exports.ParenExprContext = exports.OrExprContext = exports.NumberExprContext = exports.MultiplicativeExprContext = exports.MixedIdExprContext = exports.MinMaxExprContext = exports.MathFuncExprContext = exports.IdentifierContext = exports.ComparisonExprContext = exports.CommentLineContext = exports.AnyTokenExprContext = exports.AndExprContext = exports.AdditiveExprContext = exports.ActionParamContext = exports.ActionNameContext = exports.ActionLineContext = exports.AccessPatternContext = exports.AccessExprContext = exports.ExpressionContext = void 0; const ATN_1 = require("antlr4ts/atn/ATN"); const ATNDeserializer_1 = require("antlr4ts/atn/ATNDeserializer"); const ParserATNSimulator_1 = require("antlr4ts/atn/ParserATNSimulator"); const FailedPredicateException_1 = require("antlr4ts/FailedPredicateException"); const Utils = __importStar(require("antlr4ts/misc/Utils")); const Parser_1 = require("antlr4ts/Parser"); const ParserRuleContext_1 = require("antlr4ts/ParserRuleContext"); const RecognitionException_1 = require("antlr4ts/RecognitionException"); const Token_1 = require("antlr4ts/Token"); const VocabularyImpl_1 = require("antlr4ts/VocabularyImpl"); class ExpressionContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_expression; } copyFrom(ctx) { super.copyFrom(ctx); } } exports.ExpressionContext = ExpressionContext; class AccessExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitAccessExpr) { return visitor.visitAccessExpr(this); } else { return visitor.visitChildren(this); } } accessPattern() { return this.getRuleContext(0, AccessPatternContext); } // @Override enterRule(listener) { if (listener.enterAccessExpr) { listener.enterAccessExpr(this); } } // @Override exitRule(listener) { if (listener.exitAccessExpr) { listener.exitAccessExpr(this); } } } exports.AccessExprContext = AccessExprContext; class AccessPatternContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_accessPattern; } // @Override accept(visitor) { if (visitor.visitAccessPattern) { return visitor.visitAccessPattern(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterAccessPattern) { listener.enterAccessPattern(this); } } // @Override exitRule(listener) { if (listener.exitAccessPattern) { listener.exitAccessPattern(this); } } identifier(i) { if (i === undefined) { return this.getRuleContexts(IdentifierContext); } else { return this.getRuleContext(i, IdentifierContext); } } } exports.AccessPatternContext = AccessPatternContext; class ActionLineContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_actionLine; } // @Override accept(visitor) { if (visitor.visitActionLine) { return visitor.visitActionLine(this); } else { return visitor.visitChildren(this); } } actionName() { return this.getRuleContext(0, ActionNameContext); } actionParam(i) { if (i === undefined) { return this.getRuleContexts(ActionParamContext); } else { return this.getRuleContext(i, ActionParamContext); } } // @Override enterRule(listener) { if (listener.enterActionLine) { listener.enterActionLine(this); } } // @Override exitRule(listener) { if (listener.exitActionLine) { listener.exitActionLine(this); } } OP_EQ() { return this.getToken(SimCExprParser.OP_EQ, 0); } sublistName() { return this.tryGetRuleContext(0, SublistNameContext); } } exports.ActionLineContext = ActionLineContext; class ActionNameContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_actionName; } // @Override accept(visitor) { if (visitor.visitActionName) { return visitor.visitActionName(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterActionName) { listener.enterActionName(this); } } // @Override exitRule(listener) { if (listener.exitActionName) { listener.exitActionName(this); } } identifier() { return this.getRuleContext(0, IdentifierContext); } } exports.ActionNameContext = ActionNameContext; class ActionParamContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_actionParam; } // @Override accept(visitor) { if (visitor.visitActionParam) { return visitor.visitActionParam(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterActionParam) { listener.enterActionParam(this); } } // @Override exitRule(listener) { if (listener.exitActionParam) { listener.exitActionParam(this); } } expression() { return this.getRuleContext(0, ExpressionContext); } identifier() { return this.getRuleContext(0, IdentifierContext); } OP_EQ() { return this.getToken(SimCExprParser.OP_EQ, 0); } } exports.ActionParamContext = ActionParamContext; class AdditiveExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitAdditiveExpr) { return visitor.visitAdditiveExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterAdditiveExpr) { listener.enterAdditiveExpr(this); } } // @Override exitRule(listener) { if (listener.exitAdditiveExpr) { listener.exitAdditiveExpr(this); } } expression(i) { if (i === undefined) { return this.getRuleContexts(ExpressionContext); } else { return this.getRuleContext(i, ExpressionContext); } } OP_MINUS() { return this.tryGetToken(SimCExprParser.OP_MINUS, 0); } OP_PLUS() { return this.tryGetToken(SimCExprParser.OP_PLUS, 0); } } exports.AdditiveExprContext = AdditiveExprContext; class AndExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitAndExpr) { return visitor.visitAndExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterAndExpr) { listener.enterAndExpr(this); } } // @Override exitRule(listener) { if (listener.exitAndExpr) { listener.exitAndExpr(this); } } expression(i) { if (i === undefined) { return this.getRuleContexts(ExpressionContext); } else { return this.getRuleContext(i, ExpressionContext); } } OP_AND() { return this.getToken(SimCExprParser.OP_AND, 0); } } exports.AndExprContext = AndExprContext; class AnyTokenExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitAnyTokenExpr) { return visitor.visitAnyTokenExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterAnyTokenExpr) { listener.enterAnyTokenExpr(this); } } // @Override exitRule(listener) { if (listener.exitAnyTokenExpr) { listener.exitAnyTokenExpr(this); } } } exports.AnyTokenExprContext = AnyTokenExprContext; class CommentLineContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_commentLine; } // @Override accept(visitor) { if (visitor.visitCommentLine) { return visitor.visitCommentLine(this); } else { return visitor.visitChildren(this); } } COMMENT() { return this.getToken(SimCExprParser.COMMENT, 0); } // @Override enterRule(listener) { if (listener.enterCommentLine) { listener.enterCommentLine(this); } } // @Override exitRule(listener) { if (listener.exitCommentLine) { listener.exitCommentLine(this); } } } exports.CommentLineContext = CommentLineContext; class ComparisonExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitComparisonExpr) { return visitor.visitComparisonExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterComparisonExpr) { listener.enterComparisonExpr(this); } } // @Override exitRule(listener) { if (listener.exitComparisonExpr) { listener.exitComparisonExpr(this); } } expression(i) { if (i === undefined) { return this.getRuleContexts(ExpressionContext); } else { return this.getRuleContext(i, ExpressionContext); } } OP_EQ() { return this.tryGetToken(SimCExprParser.OP_EQ, 0); } OP_EQEQ() { return this.tryGetToken(SimCExprParser.OP_EQEQ, 0); } OP_GE() { return this.tryGetToken(SimCExprParser.OP_GE, 0); } OP_GT() { return this.tryGetToken(SimCExprParser.OP_GT, 0); } OP_LE() { return this.tryGetToken(SimCExprParser.OP_LE, 0); } OP_LT() { return this.tryGetToken(SimCExprParser.OP_LT, 0); } OP_NE() { return this.tryGetToken(SimCExprParser.OP_NE, 0); } } exports.ComparisonExprContext = ComparisonExprContext; class IdentifierContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_identifier; } // @Override accept(visitor) { if (visitor.visitIdentifier) { return visitor.visitIdentifier(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterIdentifier) { listener.enterIdentifier(this); } } // @Override exitRule(listener) { if (listener.exitIdentifier) { listener.exitIdentifier(this); } } MIXED_ID() { return this.tryGetToken(SimCExprParser.MIXED_ID, 0); } NUMBER() { return this.tryGetToken(SimCExprParser.NUMBER, 0); } STRING() { return this.tryGetToken(SimCExprParser.STRING, 0); } } exports.IdentifierContext = IdentifierContext; class MathFuncExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitMathFuncExpr) { return visitor.visitMathFuncExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterMathFuncExpr) { listener.enterMathFuncExpr(this); } } // @Override exitRule(listener) { if (listener.exitMathFuncExpr) { listener.exitMathFuncExpr(this); } } expression() { return this.getRuleContext(0, ExpressionContext); } OP_CEIL() { return this.tryGetToken(SimCExprParser.OP_CEIL, 0); } OP_FLOOR() { return this.tryGetToken(SimCExprParser.OP_FLOOR, 0); } OP_PAREN_LEFT() { return this.getToken(SimCExprParser.OP_PAREN_LEFT, 0); } OP_PAREN_RIGHT() { return this.getToken(SimCExprParser.OP_PAREN_RIGHT, 0); } } exports.MathFuncExprContext = MathFuncExprContext; class MinMaxExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitMinMaxExpr) { return visitor.visitMinMaxExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterMinMaxExpr) { listener.enterMinMaxExpr(this); } } // @Override exitRule(listener) { if (listener.exitMinMaxExpr) { listener.exitMinMaxExpr(this); } } expression(i) { if (i === undefined) { return this.getRuleContexts(ExpressionContext); } else { return this.getRuleContext(i, ExpressionContext); } } OP_MAX() { return this.tryGetToken(SimCExprParser.OP_MAX, 0); } OP_MIN() { return this.tryGetToken(SimCExprParser.OP_MIN, 0); } } exports.MinMaxExprContext = MinMaxExprContext; class MixedIdExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitMixedIdExpr) { return visitor.visitMixedIdExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterMixedIdExpr) { listener.enterMixedIdExpr(this); } } // @Override exitRule(listener) { if (listener.exitMixedIdExpr) { listener.exitMixedIdExpr(this); } } MIXED_ID() { return this.getToken(SimCExprParser.MIXED_ID, 0); } } exports.MixedIdExprContext = MixedIdExprContext; class MultiplicativeExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitMultiplicativeExpr) { return visitor.visitMultiplicativeExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterMultiplicativeExpr) { listener.enterMultiplicativeExpr(this); } } // @Override exitRule(listener) { if (listener.exitMultiplicativeExpr) { listener.exitMultiplicativeExpr(this); } } expression(i) { if (i === undefined) { return this.getRuleContexts(ExpressionContext); } else { return this.getRuleContext(i, ExpressionContext); } } OP_DIV() { return this.tryGetToken(SimCExprParser.OP_DIV, 0); } OP_MOD() { return this.tryGetToken(SimCExprParser.OP_MOD, 0); } OP_MUL() { return this.tryGetToken(SimCExprParser.OP_MUL, 0); } } exports.MultiplicativeExprContext = MultiplicativeExprContext; class NumberExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitNumberExpr) { return visitor.visitNumberExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterNumberExpr) { listener.enterNumberExpr(this); } } // @Override exitRule(listener) { if (listener.exitNumberExpr) { listener.exitNumberExpr(this); } } NUMBER() { return this.getToken(SimCExprParser.NUMBER, 0); } } exports.NumberExprContext = NumberExprContext; class OrExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitOrExpr) { return visitor.visitOrExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterOrExpr) { listener.enterOrExpr(this); } } // @Override exitRule(listener) { if (listener.exitOrExpr) { listener.exitOrExpr(this); } } expression(i) { if (i === undefined) { return this.getRuleContexts(ExpressionContext); } else { return this.getRuleContext(i, ExpressionContext); } } OP_OR() { return this.getToken(SimCExprParser.OP_OR, 0); } } exports.OrExprContext = OrExprContext; class ParenExprContext extends ExpressionContext { constructor(ctx) { super(ctx.parent, ctx.invokingState); this.copyFrom(ctx); } // @Override accept(visitor) { if (visitor.visitParenExpr) { return visitor.visitParenExpr(this); } else { return visitor.visitChildren(this); } } // @Override enterRule(listener) { if (listener.enterParenExpr) { listener.enterParenExpr(this); } } // @Override exitRule(listener) { if (listener.exitParenExpr) { listener.exitParenExpr(this); } } expression() { return this.getRuleContext(0, ExpressionContext); } OP_PAREN_LEFT() { return this.getToken(SimCExprParser.OP_PAREN_LEFT, 0); } OP_PAREN_RIGHT() { return this.getToken(SimCExprParser.OP_PAREN_RIGHT, 0); } } exports.ParenExprContext = ParenExprContext; class ParseContext extends ParserRuleContext_1.ParserRuleContext { constructor(parent, invokingState) { super(parent, invokingState); } // @Override get ruleIndex() { return SimCExprParser.RULE_parse; } // @Override accept(visitor) { if (visitor.visitParse) { return visitor.visitParse(this); } else { return visitor.visitChildren(this); } } actionLine() { return this.tryGetRuleContext(0, ActionLineContext); } commentLine() { return this.tryGetRuleContext(0, CommentLineContext); } // @Override enterRule(listener) { if (listener.enterParse) { listener.enterParse(this); } } EOF() { return this.getToken(SimCExprParser.EOF, 0); } // @Override exitRule(listener) { if (listener.exitParse) { listener.exitParse(this); } } expression() { return this.tryGetRuleContext(0, ExpressionContext); } } exports.ParseContext = ParseContext; class SimCExprParser extends Parser_1.Parser { static get _ATN() { if (!SimCExprParser.__ATN) { SimCExprParser.__ATN = new ATNDeserializer_1.ATNDeserializer().deserialize(Utils.toCharArray(SimCExprParser._serializedATN)); } return SimCExprParser.__ATN; } constructor(input) { super(input); this._interp = new ParserATNSimulator_1.ParserATNSimulator(SimCExprParser._ATN, this); } // @Override get grammarFileName() { return "SimCExpr.g4"; } // @Override get ruleNames() { return SimCExprParser.ruleNames; } // @Override get serializedATN() { return SimCExprParser._serializedATN; } // @Override // @NotNull get vocabulary() { return SimCExprParser.VOCABULARY; } // @RuleVersion(0) accessPattern() { let _localctx = new AccessPatternContext(this._ctx, this.state); this.enterRule(_localctx, 14, SimCExprParser.RULE_accessPattern); try { let _alt; this.enterOuterAlt(_localctx, 1); { this.state = 58; this.identifier(); this.state = 63; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 4, this._ctx); while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { { { this.state = 59; this.match(SimCExprParser.T__1); this.state = 60; this.identifier(); } } } this.state = 65; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 4, this._ctx); } } } catch (re) { if (re instanceof RecognitionException_1.RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); this._errHandler.recover(this, re); } else { throw re; } } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) actionLine() { let _localctx = new ActionLineContext(this._ctx, this.state); this.enterRule(_localctx, 4, SimCExprParser.RULE_actionLine); let _la; try { this.enterOuterAlt(_localctx, 1); { this.state = 31; this.match(SimCExprParser.T__0); this.state = 34; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === SimCExprParser.T__1) { { this.state = 32; this.match(SimCExprParser.T__1); this.state = 33; this.sublistName(); } } this.state = 36; _la = this._input.LA(1); if (!(_la === SimCExprParser.T__2 || _la === SimCExprParser.OP_EQ)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } this.state = 38; this._errHandler.sync(this); _la = this._input.LA(1); if (_la === SimCExprParser.T__3) { { this.state = 37; this.match(SimCExprParser.T__3); } } this.state = 40; this.actionName(); this.state = 45; this._errHandler.sync(this); _la = this._input.LA(1); while (_la === SimCExprParser.T__4) { { { this.state = 41; this.match(SimCExprParser.T__4); this.state = 42; this.actionParam(); } } this.state = 47; this._errHandler.sync(this); _la = this._input.LA(1); } } } catch (re) { if (re instanceof RecognitionException_1.RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); this._errHandler.recover(this, re); } else { throw re; } } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) actionName() { let _localctx = new ActionNameContext(this._ctx, this.state); this.enterRule(_localctx, 10, SimCExprParser.RULE_actionName); try { this.enterOuterAlt(_localctx, 1); { this.state = 54; this.identifier(); } } catch (re) { if (re instanceof RecognitionException_1.RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); this._errHandler.recover(this, re); } else { throw re; } } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) actionParam() { let _localctx = new ActionParamContext(this._ctx, this.state); this.enterRule(_localctx, 6, SimCExprParser.RULE_actionParam); try { this.enterOuterAlt(_localctx, 1); { this.state = 48; this.identifier(); this.state = 49; this.match(SimCExprParser.OP_EQ); this.state = 50; this.expression(0); } } catch (re) { if (re instanceof RecognitionException_1.RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); this._errHandler.recover(this, re); } else { throw re; } } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) commentLine() { let _localctx = new CommentLineContext(this._ctx, this.state); this.enterRule(_localctx, 2, SimCExprParser.RULE_commentLine); try { this.enterOuterAlt(_localctx, 1); { this.state = 29; this.match(SimCExprParser.COMMENT); } } catch (re) { if (re instanceof RecognitionException_1.RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); this._errHandler.recover(this, re); } else { throw re; } } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) expression(_p) { if (_p === undefined) { _p = 0; } let _parentctx = this._ctx; let _parentState = this.state; let _localctx = new ExpressionContext(this._ctx, _parentState); let _prevctx = _localctx; let _startState = 16; this.enterRecursionRule(_localctx, 16, SimCExprParser.RULE_expression, _p); let _la; try { let _alt; this.enterOuterAlt(_localctx, 1); { this.state = 83; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 5, this._ctx)) { case 1: { _localctx = new ParenExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 67; this.match(SimCExprParser.OP_PAREN_LEFT); this.state = 68; this.expression(0); this.state = 69; this.match(SimCExprParser.OP_PAREN_RIGHT); } break; case 2: { _localctx = new MathFuncExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 71; _la = this._input.LA(1); if (!(_la === SimCExprParser.OP_CEIL || _la === SimCExprParser.OP_FLOOR)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } this.state = 72; this.match(SimCExprParser.OP_PAREN_LEFT); this.state = 73; this.expression(0); this.state = 74; this.match(SimCExprParser.OP_PAREN_RIGHT); } break; case 3: { _localctx = new UnaryExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 76; _la = this._input.LA(1); if (!((_la & ~0x1f) === 0 && ((1 << _la) & ((1 << SimCExprParser.OP_NOT) | (1 << SimCExprParser.OP_PLUS) | (1 << SimCExprParser.OP_MINUS) | (1 << SimCExprParser.OP_ABS))) !== 0)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } this.state = 77; this.expression(13); } break; case 4: { _localctx = new NumberExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 78; this.match(SimCExprParser.NUMBER); } break; case 5: { _localctx = new StringExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 79; this.match(SimCExprParser.STRING); } break; case 6: { _localctx = new MixedIdExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 80; this.match(SimCExprParser.MIXED_ID); } break; case 7: { _localctx = new AccessExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 81; this.accessPattern(); } break; case 8: { _localctx = new AnyTokenExprContext(_localctx); this._ctx = _localctx; _prevctx = _localctx; this.state = 82; this.matchWildcard(); } break; } this._ctx._stop = this._input.tryLT(-1); this.state = 108; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 7, this._ctx); while (_alt !== 2 && _alt !== ATN_1.ATN.INVALID_ALT_NUMBER) { if (_alt === 1) { if (this._parseListeners != null) { this.triggerExitRuleEvent(); } _prevctx = _localctx; { this.state = 106; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 6, this._ctx)) { case 1: { _localctx = new MultiplicativeExprContext(new ExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, SimCExprParser.RULE_expression); this.state = 85; if (!this.precpred(this._ctx, 12)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 12)"); } this.state = 86; _la = this._input.LA(1); if (!((_la & ~0x1f) === 0 && ((1 << _la) & ((1 << SimCExprParser.OP_MUL) | (1 << SimCExprParser.OP_DIV) | (1 << SimCExprParser.OP_MOD))) !== 0)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } this.state = 87; this.expression(13); } break; case 2: { _localctx = new AdditiveExprContext(new ExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, SimCExprParser.RULE_expression); this.state = 88; if (!this.precpred(this._ctx, 11)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 11)"); } this.state = 89; _la = this._input.LA(1); if (!(_la === SimCExprParser.OP_PLUS || _la === SimCExprParser.OP_MINUS)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } this.state = 90; this.expression(12); } break; case 3: { _localctx = new MinMaxExprContext(new ExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, SimCExprParser.RULE_expression); this.state = 91; if (!this.precpred(this._ctx, 10)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 10)"); } this.state = 92; _la = this._input.LA(1); if (!(_la === SimCExprParser.OP_MAX || _la === SimCExprParser.OP_MIN)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } this.state = 93; this.expression(11); } break; case 4: { _localctx = new ComparisonExprContext(new ExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, SimCExprParser.RULE_expression); this.state = 94; if (!this.precpred(this._ctx, 9)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 9)"); } this.state = 95; _la = this._input.LA(1); if (!((_la & ~0x1f) === 0 && ((1 << _la) & ((1 << SimCExprParser.OP_GT) | (1 << SimCExprParser.OP_GE) | (1 << SimCExprParser.OP_LT) | (1 << SimCExprParser.OP_LE) | (1 << SimCExprParser.OP_EQ) | (1 << SimCExprParser.OP_EQEQ) | (1 << SimCExprParser.OP_NE))) !== 0)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } this.state = 96; this.expression(10); } break; case 5: { _localctx = new AndExprContext(new ExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, SimCExprParser.RULE_expression); this.state = 97; if (!this.precpred(this._ctx, 8)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 8)"); } this.state = 98; this.match(SimCExprParser.OP_AND); this.state = 99; this.expression(9); } break; case 6: { _localctx = new XorExprContext(new ExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, SimCExprParser.RULE_expression); this.state = 100; if (!this.precpred(this._ctx, 7)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 7)"); } this.state = 101; this.match(SimCExprParser.OP_XOR); this.state = 102; this.expression(8); } break; case 7: { _localctx = new OrExprContext(new ExpressionContext(_parentctx, _parentState)); this.pushNewRecursionContext(_localctx, _startState, SimCExprParser.RULE_expression); this.state = 103; if (!this.precpred(this._ctx, 6)) { throw this.createFailedPredicateException("this.precpred(this._ctx, 6)"); } this.state = 104; this.match(SimCExprParser.OP_OR); this.state = 105; this.expression(7); } break; } } } this.state = 110; this._errHandler.sync(this); _alt = this.interpreter.adaptivePredict(this._input, 7, this._ctx); } } } catch (re) { if (re instanceof RecognitionException_1.RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); this._errHandler.recover(this, re); } else { throw re; } } finally { this.unrollRecursionContexts(_parentctx); } return _localctx; } // @RuleVersion(0) identifier() { let _localctx = new IdentifierContext(this._ctx, this.state); this.enterRule(_localctx, 8, SimCExprParser.RULE_identifier); let _la; try { this.enterOuterAlt(_localctx, 1); { this.state = 52; _la = this._input.LA(1); if (!((_la & ~0x1f) === 0 && ((1 << _la) & ((1 << SimCExprParser.NUMBER) | (1 << SimCExprParser.MIXED_ID) | (1 << SimCExprParser.STRING))) !== 0)) { this._errHandler.recoverInline(this); } else { if (this._input.LA(1) === Token_1.Token.EOF) { this.matchedEOF = true; } this._errHandler.reportMatch(this); this.consume(); } } } catch (re) { if (re instanceof RecognitionException_1.RecognitionException) { _localctx.exception = re; this._errHandler.reportError(this, re); this._errHandler.recover(this, re); } else { throw re; } } finally { this.exitRule(); } return _localctx; } // @RuleVersion(0) parse() { let _localctx = new ParseContext(this._ctx, this.state); this.enterRule(_localctx, 0, SimCExprParser.RULE_parse); try { this.state = 27; this._errHandler.sync(this); switch (this.interpreter.adaptivePredict(this._input, 0, this._ctx)) { case 1: this.enterOuterAlt(_localctx, 1); { this.state = 18; this.actionLine(); this.state = 19; this.match(SimCExprParser.EOF); }