refactor DFA function prototype into es6 classes
This commit is contained in:
parent
1177c0b58d
commit
a8e8402b77
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue