Skip to content

Commit

Permalink
Merge pull request #2749 from carocad/tree-classes
Browse files Browse the repository at this point in the history
 Javascript: migrate prototypical Tree objects to es6 classes
  • Loading branch information
parrt authored Feb 23, 2020
2 parents bb66444 + d95b327 commit 38b1b9a
Show file tree
Hide file tree
Showing 19 changed files with 312 additions and 345 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -626,23 +626,17 @@ protected void writeParserTestFile(String parserName, String lexerName,
+ "var <listenerName> = require('./<listenerName>').<listenerName>;\n"
+ "var <visitorName> = require('./<visitorName>').<visitorName>;\n"
+ "\n"
+ "function TreeShapeListener() {\n"
+ " antlr4.tree.ParseTreeListener.call(this);\n"
+ " return this;\n"
+ "}\n"
+ "\n"
+ "TreeShapeListener.prototype = Object.create(antlr4.tree.ParseTreeListener.prototype);\n"
+ "TreeShapeListener.prototype.constructor = TreeShapeListener;\n"
+ "\n"
+ "TreeShapeListener.prototype.enterEveryRule = function(ctx) {\n"
+ " for(var i=0;i\\<ctx.getChildCount; i++) {\n"
+ " var child = ctx.getChild(i);\n"
+ " var parent = child.parentCtx;\n"
+ " if(parent.getRuleContext() !== ctx || !(parent instanceof antlr4.tree.RuleNode)) {\n"
+ " throw \"Invalid parse tree shape detected.\";\n"
+ " }\n"
+ " }\n"
+ "};\n"
+ "class TreeShapeListener extends antlr4.tree.ParseTreeListener {\n" +
" enterEveryRule(ctx) {\n" +
" for (let i = 0; i \\< ctx.getChildCount; i++) {\n" +
" const child = ctx.getChild(i)\n" +
" const parent = child.parentCtx\n" +
" if (parent.getRuleContext() !== ctx || !(parent instanceof antlr4.tree.RuleNode)) {\n" +
" throw `Invalid parse tree shape detected.`\n" +
" }\n" +
" }\n" +
" }\n" +
"}\n"
+ "\n"
+ "function main(argv) {\n"
+ " var input = new antlr4.FileStream(argv[2], true);\n"
Expand Down
4 changes: 2 additions & 2 deletions runtime/JavaScript/src/antlr4/ParserRuleContext.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
// group values such as this aggregate. The getters/setters are there to
// satisfy the superclass interface.

var RuleContext = require('./RuleContext').RuleContext;
var RuleContext = require('./RuleContext');
var Tree = require('./tree/Tree');
var INVALID_INTERVAL = Tree.INVALID_INTERVAL;
var TerminalNode = Tree.TerminalNode;
Expand Down Expand Up @@ -222,4 +222,4 @@ function InterpreterRuleContext(parent, invokingStateNumber, ruleIndex) {
InterpreterRuleContext.prototype = Object.create(ParserRuleContext.prototype);
InterpreterRuleContext.prototype.constructor = InterpreterRuleContext;

exports.ParserRuleContext = ParserRuleContext;
exports.ParserRuleContext = ParserRuleContext;
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/PredictionContext.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
*/
///

var RuleContext = require('./RuleContext').RuleContext;
var RuleContext = require('./RuleContext');
var Hash = require('./Utils').Hash;
var Map = require('./Utils').Map;

Expand Down
7 changes: 3 additions & 4 deletions runtime/JavaScript/src/antlr4/RuleContext.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,9 @@

var RuleNode = require('./tree/Tree').RuleNode;
var INVALID_INTERVAL = require('./tree/Tree').INVALID_INTERVAL;
var INVALID_ALT_NUMBER = require('./atn/ATN').INVALID_ALT_NUMBER;
var INVALID_ALT_NUMBER = require('./atn/ATN').INVALID_ALT_NUMBER || 0; // TODO: solve cyclic dependency to avoid || 0

function RuleContext(parent, invokingState) {
RuleNode.call(this);
// What context invoked this rule?
this.parentCtx = parent || null;
// What state invoked the rule associated with this context?
Expand Down Expand Up @@ -118,8 +117,8 @@ RuleContext.prototype.accept = function(visitor) {
};

//need to manage circular dependencies, so export now
exports.RuleContext = RuleContext;
var Trees = require('./tree/Trees').Trees;
module.exports = RuleContext;
var Trees = require('./tree/Trees');


// Print out a whole tree, not just a node, in LISP format
Expand Down
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/atn/ATN.js
Original file line number Diff line number Diff line change
Expand Up @@ -139,4 +139,4 @@ ATN.prototype.getExpectedTokens = function( stateNumber, ctx ) {

ATN.INVALID_ALT_NUMBER = 0;

exports.ATN = ATN;
module.exports = ATN;
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/atn/ATNConfigSet.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
// graph-structured stack.
///

var ATN = require('./ATN').ATN;
var ATN = require('./ATN');
var Utils = require('./../Utils');
var Hash = Utils.Hash;
var Set = Utils.Set;
Expand Down
4 changes: 2 additions & 2 deletions runtime/JavaScript/src/antlr4/atn/ATNDeserializer.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
*/

var Token = require('./../Token').Token;
var ATN = require('./ATN').ATN;
var ATN = require('./ATN');
var ATNType = require('./ATNType').ATNType;
var ATNStates = require('./ATNState');
var ATNState = ATNStates.ATNState;
Expand Down Expand Up @@ -675,4 +675,4 @@ ATNDeserializer.prototype.lexerActionFactory = function(type, data1, data2) {
};


exports.ATNDeserializer = ATNDeserializer;
exports.ATNDeserializer = ATNDeserializer;
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/atn/LexerATNSimulator.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@

var Token = require('./../Token').Token;
var Lexer = require('./../Lexer').Lexer;
var ATN = require('./ATN').ATN;
var ATN = require('./ATN');
var ATNSimulator = require('./ATNSimulator').ATNSimulator;
var DFAState = require('./../dfa/DFAState').DFAState;
var ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;
Expand Down
6 changes: 3 additions & 3 deletions runtime/JavaScript/src/antlr4/atn/ParserATNSimulator.js
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@ var Utils = require('./../Utils');
var Set = Utils.Set;
var BitSet = Utils.BitSet;
var DoubleDict = Utils.DoubleDict;
var ATN = require('./ATN').ATN;
var ATN = require('./ATN');
var ATNState = require('./ATNState').ATNState;
var ATNConfig = require('./ATNConfig').ATNConfig;
var ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;
Expand All @@ -246,7 +246,7 @@ var DFAState = require('./../dfa/DFAState').DFAState;
var PredPrediction = require('./../dfa/DFAState').PredPrediction;
var ATNSimulator = require('./ATNSimulator').ATNSimulator;
var PredictionMode = require('./PredictionMode').PredictionMode;
var RuleContext = require('./../RuleContext').RuleContext;
var RuleContext = require('./../RuleContext');
var ParserRuleContext = require('./../ParserRuleContext').ParserRuleContext;
var SemanticContext = require('./SemanticContext').SemanticContext;
var StarLoopEntryState = require('./ATNState').StarLoopEntryState;
Expand Down Expand Up @@ -1725,4 +1725,4 @@ ParserATNSimulator.prototype.reportAmbiguity = function(dfa, D, startIndex, stop
}
};

exports.ParserATNSimulator = ParserATNSimulator;
exports.ParserATNSimulator = ParserATNSimulator;
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/atn/PredictionMode.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ var Set = require('./../Utils').Set;
var Map = require('./../Utils').Map;
var BitSet = require('./../Utils').BitSet;
var AltDict = require('./../Utils').AltDict;
var ATN = require('./ATN').ATN;
var ATN = require('./ATN');
var RuleStopState = require('./ATNState').RuleStopState;
var ATNConfigSet = require('./ATNConfigSet').ATNConfigSet;
var ATNConfig = require('./ATNConfig').ATNConfig;
Expand Down
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/atn/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* can be found in the LICENSE.txt file in the project root.
*/

exports.ATN = require('./ATN').ATN;
exports.ATN = require('./ATN');
exports.ATNDeserializer = require('./ATNDeserializer').ATNDeserializer;
exports.LexerATNSimulator = require('./LexerATNSimulator').LexerATNSimulator;
exports.ParserATNSimulator = require('./ParserATNSimulator').ParserATNSimulator;
Expand Down
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/dfa/DFA.js
Original file line number Diff line number Diff line change
Expand Up @@ -159,4 +159,4 @@ class DFA {
}


module.exports = { DFA };
module.exports = DFA;
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/dfa/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
* can be found in the LICENSE.txt file in the project root.
*/

exports.DFA = require('./DFA').DFA;
exports.DFA = require('./DFA');
exports.DFASerializer = require('./DFASerializer').DFASerializer;
exports.LexerDFASerializer = require('./DFASerializer').LexerDFASerializer;
exports.PredPrediction = require('./DFAState').PredPrediction;
Original file line number Diff line number Diff line change
Expand Up @@ -102,4 +102,4 @@ class DiagnosticErrorListener extends ErrorListener {
}
}

module.exports = {DiagnosticErrorListener}
module.exports = DiagnosticErrorListener
2 changes: 1 addition & 1 deletion runtime/JavaScript/src/antlr4/error/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,6 @@ module.exports.NoViableAltException = require('./Errors').NoViableAltException;
module.exports.LexerNoViableAltException = require('./Errors').LexerNoViableAltException;
module.exports.InputMismatchException = require('./Errors').InputMismatchException;
module.exports.FailedPredicateException = require('./Errors').FailedPredicateException;
module.exports.DiagnosticErrorListener = require('./DiagnosticErrorListener').DiagnosticErrorListener;
module.exports.DiagnosticErrorListener = require('./DiagnosticErrorListener');
module.exports.BailErrorStrategy = require('./ErrorStrategy').BailErrorStrategy;
module.exports.ErrorListener = require('./ErrorListener').ErrorListener;
Loading

0 comments on commit 38b1b9a

Please sign in to comment.