simc-ast-builder
Version:
Parser and AST generator for SimulationCraft files
1,417 lines (1,416 loc) • 63 kB
JavaScript
"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);
}