UNPKG

antlr4-runtime

Version:

JavaScript runtime for ANTLR4

57 lines (52 loc) 2.09 kB
/* Copyright (c) 2012-2022 The ANTLR Project Contributors. All rights reserved. * Use is of this file is governed by the BSD 3-clause license that * can be found in the LICENSE.txt file in the project root. */ import {default as LexerActionType } from "../atn/LexerActionType.js"; import LexerAction from "./LexerAction.js"; /** * Executes a custom lexer action by calling {@link Recognizer//action} with the * rule and action indexes assigned to the custom action. The implementation of * a custom action is added to the generated code for the lexer in an override * of {@link Recognizer//action} when the grammar is compiled. * * <p>This class may represent embedded actions created with the <code>{...}</code> * syntax in ANTLR 4, as well as actions created for lexer commands where the * command argument could not be evaluated when the grammar was compiled.</p> */ export default class LexerCustomAction extends LexerAction { /** * Constructs a custom lexer action with the specified rule and action * indexes. * * @param ruleIndex The rule index to use for calls to * {@link Recognizer//action}. * @param actionIndex The action index to use for calls to * {@link Recognizer//action}. */ constructor(ruleIndex, actionIndex) { super(LexerActionType.CUSTOM); this.ruleIndex = ruleIndex; this.actionIndex = actionIndex; this.isPositionDependent = true; } /** * <p>Custom actions are implemented by calling {@link Lexer//action} with the * appropriate rule and action indexes.</p> */ execute(lexer) { lexer.action(null, this.ruleIndex, this.actionIndex); } updateHashCode(hash) { hash.update(this.actionType, this.ruleIndex, this.actionIndex); } equals(other) { if (this === other) { return true; } else if (! (other instanceof LexerCustomAction)) { return false; } else { return this.ruleIndex === other.ruleIndex && this.actionIndex === other.actionIndex; } } }