refactor DFA function prototype into es6 classes

This commit is contained in:
Camilo Roca 2020-02-10 21:51:11 +01:00
parent 1177c0b58d
commit a8e8402b77
1 changed files with 94 additions and 96 deletions

View File

@ -4,16 +4,17 @@
* can be found in the LICENSE.txt file in the project root.
*/
var Set = require("../Utils").Set;
var DFAState = require('./DFAState').DFAState;
var StarLoopEntryState = require('../atn/ATNState').StarLoopEntryState;
var ATNConfigSet = require('./../atn/ATNConfigSet').ATNConfigSet;
var DFASerializer = require('./DFASerializer').DFASerializer;
var LexerDFASerializer = require('./DFASerializer').LexerDFASerializer;
const Set = require("../Utils").Set;
const DFAState = require('./DFAState').DFAState;
const StarLoopEntryState = require('../atn/ATNState').StarLoopEntryState;
const ATNConfigSet = require('./../atn/ATNConfigSet').ATNConfigSet;
const DFASerializer = require('./DFASerializer').DFASerializer;
const LexerDFASerializer = require('./DFASerializer').LexerDFASerializer;
function DFA(atnStartState, decision) {
class DFA {
constructor(atnStartState, decision) {
if (decision === undefined) {
decision = 0;
}
@ -32,14 +33,13 @@ function DFA(atnStartState, decision) {
{
if (atnStartState.isPrecedenceDecision) {
this.precedenceDfa = true;
var precedenceState = new DFAState(null, new ATNConfigSet());
const precedenceState = new DFAState(null, new ATNConfigSet());
precedenceState.edges = [];
precedenceState.isAcceptState = false;
precedenceState.requiresFullContext = false;
this.s0 = precedenceState;
}
}
return this;
}
// Get the start state for a specific precedence value.
@ -50,8 +50,7 @@ function DFA(atnStartState, decision) {
//
// @throws IllegalStateException if this is not a precedence DFA.
// @see //isPrecedenceDfa()
DFA.prototype.getPrecedenceStartState = function(precedence) {
getPrecedenceStartState(precedence) {
if (!(this.precedenceDfa)) {
throw ("Only precedence DFAs may contain a precedence start state.");
}
@ -60,7 +59,7 @@ DFA.prototype.getPrecedenceStartState = function(precedence) {
return null;
}
return this.s0.edges[precedence] || null;
};
}
// Set the start state for a specific precedence value.
//
@ -71,7 +70,7 @@ DFA.prototype.getPrecedenceStartState = function(precedence) {
// @throws IllegalStateException if this is not a precedence DFA.
// @see //isPrecedenceDfa()
//
DFA.prototype.setPrecedenceStartState = function(precedence, startState) {
setPrecedenceStartState(precedence, startState) {
if (!(this.precedenceDfa)) {
throw ("Only precedence DFAs may contain a precedence start state.");
}
@ -83,7 +82,7 @@ DFA.prototype.setPrecedenceStartState = function(precedence, startState) {
// precedence DFA, s0 will be initialized once and not updated again
// s0.edges is never null for a precedence DFA
this.s0.edges[precedence] = startState;
};
}
//
// Sets whether this is a precedence DFA. If the specified value differs
@ -101,12 +100,11 @@ DFA.prototype.setPrecedenceStartState = function(precedence, startState) {
//
// @param precedenceDfa {@code true} if this is a precedence DFA; otherwise,
// {@code false}
DFA.prototype.setPrecedenceDfa = function(precedenceDfa) {
setPrecedenceDfa(precedenceDfa) {
if (this.precedenceDfa!==precedenceDfa) {
this._states = new DFAStatesSet();
if (precedenceDfa) {
var precedenceState = new DFAState(null, new ATNConfigSet());
const precedenceState = new DFAState(null, new ATNConfigSet());
precedenceState.edges = [];
precedenceState.isAcceptState = false;
precedenceState.requiresFullContext = false;
@ -116,38 +114,38 @@ DFA.prototype.setPrecedenceDfa = function(precedenceDfa) {
}
this.precedenceDfa = precedenceDfa;
}
};
Object.defineProperty(DFA.prototype, "states", {
get : function() {
return this._states;
}
});
// Return a list of all states in this DFA, ordered by state number.
DFA.prototype.sortedStates = function() {
var list = this._states.values();
sortedStates() {
const list = this._states.values();
return list.sort(function(a, b) {
return a.stateNumber - b.stateNumber;
});
};
}
DFA.prototype.toString = function(literalNames, symbolicNames) {
toString(literalNames, symbolicNames) {
literalNames = literalNames || null;
symbolicNames = symbolicNames || null;
if (this.s0 === null) {
return "";
}
var serializer = new DFASerializer(this, literalNames, symbolicNames);
const serializer = new DFASerializer(this, literalNames, symbolicNames);
return serializer.toString();
};
}
DFA.prototype.toLexerString = function() {
toLexerString() {
if (this.s0 === null) {
return "";
}
var serializer = new LexerDFASerializer(this);
const serializer = new LexerDFASerializer(this);
return serializer.toString();
};
}
get states(){
return this._states;
}
}
exports.DFA = DFA;