More debugging
This commit is contained in:
parent
c08a19233c
commit
56e6e6c26f
|
@ -13,6 +13,7 @@ package antlr4
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"strconv"
|
"strconv"
|
||||||
|
"fmt"
|
||||||
)
|
)
|
||||||
|
|
||||||
// bt is just to keep meaningful parameter types to Parser
|
// bt is just to keep meaningful parameter types to Parser
|
||||||
|
@ -105,10 +106,13 @@ func (bt *BufferedTokenStream) Consume() {
|
||||||
// not yet initialized
|
// not yet initialized
|
||||||
skipEofCheck = false
|
skipEofCheck = false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("Consume 1")
|
||||||
if !skipEofCheck && bt.LA(1) == TokenEOF {
|
if !skipEofCheck && bt.LA(1) == TokenEOF {
|
||||||
panic("cannot consume EOF")
|
panic("cannot consume EOF")
|
||||||
}
|
}
|
||||||
if bt.Sync(bt.index + 1) {
|
if bt.Sync(bt.index + 1) {
|
||||||
|
fmt.Println("Consume 2")
|
||||||
bt.index = bt.adjustSeekIndex(bt.index + 1)
|
bt.index = bt.adjustSeekIndex(bt.index + 1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -123,6 +127,7 @@ func (bt *BufferedTokenStream) Sync(i int) bool {
|
||||||
var n = i - len(bt.tokens) + 1 // how many more elements we need?
|
var n = i - len(bt.tokens) + 1 // how many more elements we need?
|
||||||
if n > 0 {
|
if n > 0 {
|
||||||
var fetched = bt.fetch(n)
|
var fetched = bt.fetch(n)
|
||||||
|
fmt.Println("Sync done")
|
||||||
return fetched >= n
|
return fetched >= n
|
||||||
}
|
}
|
||||||
return true
|
return true
|
||||||
|
@ -139,6 +144,7 @@ func (bt *BufferedTokenStream) fetch(n int) int {
|
||||||
|
|
||||||
for i := 0; i < n; i++ {
|
for i := 0; i < n; i++ {
|
||||||
var t IToken = bt.tokenSource.nextToken()
|
var t IToken = bt.tokenSource.nextToken()
|
||||||
|
fmt.Println("fetch loop")
|
||||||
t.SetTokenIndex( len(bt.tokens) )
|
t.SetTokenIndex( len(bt.tokens) )
|
||||||
bt.tokens = append(bt.tokens, t)
|
bt.tokens = append(bt.tokens, t)
|
||||||
if t.GetTokenType() == TokenEOF {
|
if t.GetTokenType() == TokenEOF {
|
||||||
|
@ -146,6 +152,8 @@ func (bt *BufferedTokenStream) fetch(n int) int {
|
||||||
return i + 1
|
return i + 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("fetch done")
|
||||||
return n
|
return n
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,8 @@ func (this *CommonTokenFactory) Create(source *TokenSourceCharStreamPair, ttype
|
||||||
} else if this.copyText && source.charStream != nil {
|
} else if this.copyText && source.charStream != nil {
|
||||||
t.SetText(source.charStream.GetTextFromInterval(NewInterval(start, stop)))
|
t.SetText(source.charStream.GetTextFromInterval(NewInterval(start, stop)))
|
||||||
}
|
}
|
||||||
return t.Token
|
|
||||||
|
return t
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -68,5 +69,5 @@ func (this *CommonTokenFactory) createThin(ttype int, text string) IToken {
|
||||||
|
|
||||||
var t = NewCommonToken(nil, ttype, TokenDefaultChannel, -1, -1)
|
var t = NewCommonToken(nil, ttype, TokenDefaultChannel, -1, -1)
|
||||||
t.SetText(text)
|
t.SetText(text)
|
||||||
return t.Token
|
return t
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ type IErrorListener interface {
|
||||||
type DefaultErrorListener struct {
|
type DefaultErrorListener struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewErrorListener() *DefaultErrorListener {
|
func NewDefaultErrorListener() *DefaultErrorListener {
|
||||||
return new(DefaultErrorListener)
|
return new(DefaultErrorListener)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -544,6 +544,8 @@ func (this *DefaultErrorStrategy) getMissingSymbol(recognizer IParser) IToken {
|
||||||
}
|
}
|
||||||
|
|
||||||
tf := recognizer.GetTokenFactory()
|
tf := recognizer.GetTokenFactory()
|
||||||
|
|
||||||
|
fmt.Println("Missing symbol error")
|
||||||
return tf.Create( current.GetSource(), expectedTokenType, tokenText, TokenDefaultChannel, -1, -1, current.GetLine(), current.GetColumn())
|
return tf.Create( current.GetSource(), expectedTokenType, tokenText, TokenDefaultChannel, -1, -1, current.GetLine(), current.GetColumn())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
package antlr4
|
package antlr4
|
||||||
|
import "fmt"
|
||||||
|
|
||||||
type InputStream struct {
|
type InputStream struct {
|
||||||
name string
|
name string
|
||||||
|
@ -66,6 +67,7 @@ func (is *InputStream) Mark() int {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (is *InputStream) Release(marker int) {
|
func (is *InputStream) Release(marker int) {
|
||||||
|
fmt.Println("RELEASING")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (is *InputStream) Seek(index int) {
|
func (is *InputStream) Seek(index int) {
|
||||||
|
|
|
@ -211,7 +211,10 @@ func (l *Lexer) nextToken() IToken {
|
||||||
if l._type != LexerMore {
|
if l._type != LexerMore {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
fmt.Println("lex inner loop")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("lex loop")
|
||||||
if continueOuter {
|
if continueOuter {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -290,6 +293,7 @@ func (l *Lexer) emitToken(token IToken) {
|
||||||
// custom Token objects or provide a Newfactory.
|
// custom Token objects or provide a Newfactory.
|
||||||
// /
|
// /
|
||||||
func (l *Lexer) emit() IToken {
|
func (l *Lexer) emit() IToken {
|
||||||
|
fmt.Println("emit")
|
||||||
var t = l._factory.Create(l._tokenFactorySourcePair, l._type, l._text, l._channel, l._tokenStartCharIndex, l.getCharIndex()-1, l._tokenStartLine, l._tokenStartColumn)
|
var t = l._factory.Create(l._tokenFactorySourcePair, l._type, l._text, l._channel, l._tokenStartCharIndex, l.getCharIndex()-1, l._tokenStartLine, l._tokenStartColumn)
|
||||||
l.emitToken(t)
|
l.emitToken(t)
|
||||||
return t
|
return t
|
||||||
|
@ -298,6 +302,7 @@ func (l *Lexer) emit() IToken {
|
||||||
func (l *Lexer) emitEOF() IToken {
|
func (l *Lexer) emitEOF() IToken {
|
||||||
cpos := l.getCharPositionInLine()
|
cpos := l.getCharPositionInLine()
|
||||||
lpos := l.getLine()
|
lpos := l.getLine()
|
||||||
|
fmt.Println("emitEOF")
|
||||||
var eof = l._factory.Create(l._tokenFactorySourcePair, TokenEOF, "", TokenDefaultChannel, l._input.Index(), l._input.Index()-1, lpos, cpos)
|
var eof = l._factory.Create(l._tokenFactorySourcePair, TokenEOF, "", TokenDefaultChannel, l._input.Index(), l._input.Index()-1, lpos, cpos)
|
||||||
l.emitToken(eof)
|
l.emitToken(eof)
|
||||||
return eof
|
return eof
|
||||||
|
|
|
@ -107,21 +107,25 @@ func (this *LexerATNSimulator) Match(input CharStream, mode int) int {
|
||||||
|
|
||||||
fmt.Println("Match")
|
fmt.Println("Match")
|
||||||
|
|
||||||
|
|
||||||
this.Match_calls += 1
|
this.Match_calls += 1
|
||||||
this.mode = mode
|
this.mode = mode
|
||||||
var mark = input.Mark()
|
var mark = input.Mark()
|
||||||
|
|
||||||
defer func() {
|
defer func() {
|
||||||
|
fmt.Println("FINALLY")
|
||||||
input.Release(mark)
|
input.Release(mark)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
this.startIndex = input.Index()
|
this.startIndex = input.Index()
|
||||||
this.prevAccept.reset()
|
this.prevAccept.reset()
|
||||||
|
|
||||||
var dfa = this.decisionToDFA[mode]
|
var dfa = this.decisionToDFA[mode]
|
||||||
|
|
||||||
if dfa.s0 == nil {
|
if dfa.s0 == nil {
|
||||||
|
fmt.Println("MatchATN")
|
||||||
return this.MatchATN(input)
|
return this.MatchATN(input)
|
||||||
} else {
|
} else {
|
||||||
|
fmt.Println("execATN")
|
||||||
return this.execATN(input, dfa.s0)
|
return this.execATN(input, dfa.s0)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,16 +163,8 @@ func (this *LexerATNSimulator) MatchATN(input CharStream) int {
|
||||||
return predict
|
return predict
|
||||||
}
|
}
|
||||||
|
|
||||||
var countA = 0
|
|
||||||
|
|
||||||
func (this *LexerATNSimulator) execATN(input CharStream, ds0 *DFAState) int {
|
func (this *LexerATNSimulator) execATN(input CharStream, ds0 *DFAState) int {
|
||||||
|
|
||||||
countA += 1
|
|
||||||
|
|
||||||
if (countA == 2) {
|
|
||||||
panic("GAH")
|
|
||||||
}
|
|
||||||
|
|
||||||
if LexerATNSimulatorDebug {
|
if LexerATNSimulatorDebug {
|
||||||
fmt.Println("start state closure=" + ds0.configs.String())
|
fmt.Println("start state closure=" + ds0.configs.String())
|
||||||
}
|
}
|
||||||
|
@ -228,7 +224,7 @@ func (this *LexerATNSimulator) execATN(input CharStream, ds0 *DFAState) int {
|
||||||
s = target // flip current DFA target becomes Newsrc/from state
|
s = target // flip current DFA target becomes Newsrc/from state
|
||||||
}
|
}
|
||||||
|
|
||||||
fmt.Println("OUT")
|
fmt.Println("DONE WITH execATN loop")
|
||||||
return this.failOrAccept(this.prevAccept, input, s.configs, t)
|
return this.failOrAccept(this.prevAccept, input, s.configs, t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,8 @@ func (p *Parser) GetParseListeners() []ParseTreeListener {
|
||||||
// misMatched symbol
|
// misMatched symbol
|
||||||
|
|
||||||
func (p *Parser) Match(ttype int) IToken {
|
func (p *Parser) Match(ttype int) IToken {
|
||||||
|
|
||||||
|
fmt.Println("get current token")
|
||||||
var t = p.getCurrentToken()
|
var t = p.getCurrentToken()
|
||||||
|
|
||||||
fmt.Println("TOKEN IS " + t.GetText())
|
fmt.Println("TOKEN IS " + t.GetText())
|
||||||
|
@ -141,6 +143,9 @@ func (p *Parser) Match(ttype int) IToken {
|
||||||
p._ctx.addErrorNode(t)
|
p._ctx.addErrorNode(t)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("match done")
|
||||||
|
|
||||||
return t
|
return t
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -406,7 +411,9 @@ func (p *Parser) NotifyErrorListeners(msg string, offendingToken IToken, err IRe
|
||||||
func (p *Parser) Consume() IToken {
|
func (p *Parser) Consume() IToken {
|
||||||
var o = p.getCurrentToken()
|
var o = p.getCurrentToken()
|
||||||
if o.GetTokenType() != TokenEOF {
|
if o.GetTokenType() != TokenEOF {
|
||||||
|
fmt.Println("Consuming")
|
||||||
p.GetInputStream().Consume()
|
p.GetInputStream().Consume()
|
||||||
|
fmt.Println("Done consuming")
|
||||||
}
|
}
|
||||||
var hasListener = p._parseListeners != nil && len(p._parseListeners) > 0
|
var hasListener = p._parseListeners != nil && len(p._parseListeners) > 0
|
||||||
if p.BuildParseTrees || hasListener {
|
if p.BuildParseTrees || hasListener {
|
||||||
|
|
|
@ -98,15 +98,6 @@ func (this *Token) GetSource() *TokenSourceCharStreamPair{
|
||||||
return this.source
|
return this.source
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *Token) GetText() string {
|
|
||||||
return this._text
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
func (this *Token) SetText(s string) {
|
|
||||||
this._text = s
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *Token) GetTokenIndex() int {
|
func (this *Token) GetTokenIndex() int {
|
||||||
return this.tokenIndex
|
return this.tokenIndex
|
||||||
}
|
}
|
||||||
|
|
|
@ -818,6 +818,7 @@ ArithmeticParser.prototype.number = function() {
|
||||||
do {
|
do {
|
||||||
this.state = 61;
|
this.state = 61;
|
||||||
this.match(ArithmeticParser.DIGIT);
|
this.match(ArithmeticParser.DIGIT);
|
||||||
|
console.log("Done with match")
|
||||||
this.state = 64;
|
this.state = 64;
|
||||||
this._errHandler.sync(this);
|
this._errHandler.sync(this);
|
||||||
_la = this._input.LA(1);
|
_la = this._input.LA(1);
|
||||||
|
|
|
@ -97,6 +97,7 @@ BufferedTokenStream.prototype.mark = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
BufferedTokenStream.prototype.release = function(marker) {
|
BufferedTokenStream.prototype.release = function(marker) {
|
||||||
|
console.log("Nothing to release")
|
||||||
// no resources to release
|
// no resources to release
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -129,10 +130,12 @@ BufferedTokenStream.prototype.consume = function() {
|
||||||
// not yet initialized
|
// not yet initialized
|
||||||
skipEofCheck = false;
|
skipEofCheck = false;
|
||||||
}
|
}
|
||||||
|
console.log("consume 1")
|
||||||
if (!skipEofCheck && this.LA(1) === Token.EOF) {
|
if (!skipEofCheck && this.LA(1) === Token.EOF) {
|
||||||
throw "cannot consume EOF";
|
throw "cannot consume EOF";
|
||||||
}
|
}
|
||||||
if (this.sync(this.index + 1)) {
|
if (this.sync(this.index + 1)) {
|
||||||
|
console.log("consume 2")
|
||||||
this.index = this.adjustSeekIndex(this.index + 1);
|
this.index = this.adjustSeekIndex(this.index + 1);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -147,6 +150,10 @@ BufferedTokenStream.prototype.sync = function(i) {
|
||||||
var n = i - this.tokens.length + 1; // how many more elements we need?
|
var n = i - this.tokens.length + 1; // how many more elements we need?
|
||||||
if (n > 0) {
|
if (n > 0) {
|
||||||
var fetched = this.fetch(n);
|
var fetched = this.fetch(n);
|
||||||
|
var e = new Error();
|
||||||
|
console.log("sync done")
|
||||||
|
console.log(e.stack)
|
||||||
|
|
||||||
return fetched >= n;
|
return fetched >= n;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -162,6 +169,7 @@ BufferedTokenStream.prototype.fetch = function(n) {
|
||||||
}
|
}
|
||||||
for (var i = 0; i < n; i++) {
|
for (var i = 0; i < n; i++) {
|
||||||
var t = this.tokenSource.nextToken();
|
var t = this.tokenSource.nextToken();
|
||||||
|
console.log("fetch loop")
|
||||||
t.tokenIndex = this.tokens.length;
|
t.tokenIndex = this.tokens.length;
|
||||||
this.tokens.push(t);
|
this.tokens.push(t);
|
||||||
if (t.type === Token.EOF) {
|
if (t.type === Token.EOF) {
|
||||||
|
@ -169,6 +177,8 @@ BufferedTokenStream.prototype.fetch = function(n) {
|
||||||
return i + 1;
|
return i + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("fetch done")
|
||||||
return n;
|
return n;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -101,6 +101,7 @@ InputStream.prototype.mark = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
InputStream.prototype.release = function(marker) {
|
InputStream.prototype.release = function(marker) {
|
||||||
|
console.log("RELEASING")
|
||||||
};
|
};
|
||||||
|
|
||||||
// consume() ahead until p==_index; can't just set p=_index as we must
|
// consume() ahead until p==_index; can't just set p=_index as we must
|
||||||
|
|
|
@ -168,7 +168,12 @@ Lexer.prototype.nextToken = function() {
|
||||||
if (this._type !== Lexer.MORE) {
|
if (this._type !== Lexer.MORE) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("lex inner loop")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("lex loop")
|
||||||
|
|
||||||
if (continueOuter) {
|
if (continueOuter) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -257,6 +262,7 @@ Lexer.prototype.emitToken = function(token) {
|
||||||
// custom Token objects or provide a new factory.
|
// custom Token objects or provide a new factory.
|
||||||
// /
|
// /
|
||||||
Lexer.prototype.emit = function() {
|
Lexer.prototype.emit = function() {
|
||||||
|
console.log("emit")
|
||||||
var t = this._factory.create(this._tokenFactorySourcePair, this._type,
|
var t = this._factory.create(this._tokenFactorySourcePair, this._type,
|
||||||
this._text, this._channel, this._tokenStartCharIndex, this
|
this._text, this._channel, this._tokenStartCharIndex, this
|
||||||
.getCharIndex() - 1, this._tokenStartLine,
|
.getCharIndex() - 1, this._tokenStartLine,
|
||||||
|
@ -266,6 +272,7 @@ Lexer.prototype.emit = function() {
|
||||||
};
|
};
|
||||||
|
|
||||||
Lexer.prototype.emitEOF = function() {
|
Lexer.prototype.emitEOF = function() {
|
||||||
|
console.log("emitEOF")
|
||||||
var cpos = this.column;
|
var cpos = this.column;
|
||||||
var lpos = this.line;
|
var lpos = this.line;
|
||||||
var eof = this._factory.create(this._tokenFactorySourcePair, Token.EOF,
|
var eof = this._factory.create(this._tokenFactorySourcePair, Token.EOF,
|
||||||
|
|
|
@ -133,12 +133,15 @@ Parser.prototype.reset = function() {
|
||||||
// mismatched symbol
|
// mismatched symbol
|
||||||
|
|
||||||
Parser.prototype.match = function(ttype) {
|
Parser.prototype.match = function(ttype) {
|
||||||
|
|
||||||
|
console.log("get current token")
|
||||||
var t = this.getCurrentToken();
|
var t = this.getCurrentToken();
|
||||||
|
|
||||||
console.log("TOKEN IS " + t.text)
|
console.log("TOKEN IS " + t.text)
|
||||||
if (t.type === ttype) {
|
if (t.type === ttype) {
|
||||||
this._errHandler.reportMatch(this);
|
this._errHandler.reportMatch(this);
|
||||||
this.consume();
|
this.consume();
|
||||||
|
console.log("consume done")
|
||||||
} else {
|
} else {
|
||||||
t = this._errHandler.recoverInline(this);
|
t = this._errHandler.recoverInline(this);
|
||||||
if (this.buildParseTrees && t.tokenIndex === -1) {
|
if (this.buildParseTrees && t.tokenIndex === -1) {
|
||||||
|
@ -148,6 +151,9 @@ Parser.prototype.match = function(ttype) {
|
||||||
this._ctx.addErrorNode(t);
|
this._ctx.addErrorNode(t);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
console.log("Match done")
|
||||||
|
|
||||||
return t;
|
return t;
|
||||||
};
|
};
|
||||||
// Match current input symbol as a wildcard. If the symbol type matches
|
// Match current input symbol as a wildcard. If the symbol type matches
|
||||||
|
@ -400,8 +406,11 @@ Parser.prototype.notifyErrorListeners = function(msg, offendingToken, err) {
|
||||||
Parser.prototype.consume = function() {
|
Parser.prototype.consume = function() {
|
||||||
var o = this.getCurrentToken();
|
var o = this.getCurrentToken();
|
||||||
if (o.type !== Token.EOF) {
|
if (o.type !== Token.EOF) {
|
||||||
|
console.log("Consuming")
|
||||||
this.getInputStream().consume();
|
this.getInputStream().consume();
|
||||||
|
console.log("done consuming")
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasListener = this._parseListeners !== null && this._parseListeners.length > 0;
|
var hasListener = this._parseListeners !== null && this._parseListeners.length > 0;
|
||||||
if (this.buildParseTrees || hasListener) {
|
if (this.buildParseTrees || hasListener) {
|
||||||
var node;
|
var node;
|
||||||
|
|
|
@ -128,11 +128,16 @@ LexerATNSimulator.prototype.match = function(input, mode) {
|
||||||
this.prevAccept.reset();
|
this.prevAccept.reset();
|
||||||
var dfa = this.decisionToDFA[mode];
|
var dfa = this.decisionToDFA[mode];
|
||||||
if (dfa.s0 === null) {
|
if (dfa.s0 === null) {
|
||||||
|
console.log("matchATN")
|
||||||
return this.matchATN(input);
|
return this.matchATN(input);
|
||||||
} else {
|
} else {
|
||||||
return this.execATN(input, dfa.s0);
|
console.log("execATN")
|
||||||
|
console.log((new Error()).stack)
|
||||||
|
var res = this.execATN(input, dfa.s0);
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
console.log("FINALLY")
|
||||||
input.release(mark);
|
input.release(mark);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -229,8 +234,10 @@ LexerATNSimulator.prototype.execATN = function(input, ds0) {
|
||||||
s = target; // flip; current DFA target becomes new src/from state
|
s = target; // flip; current DFA target becomes new src/from state
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log("OUT")
|
console.log("Done with execATN loop")
|
||||||
return this.failOrAccept(this.prevAccept, input, s.configs, t);
|
var res = this.failOrAccept(this.prevAccept, input, s.configs, t);
|
||||||
|
console.log("Done with failOrAccept", res)
|
||||||
|
return res;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get an existing target state for an edge in the DFA. If the target state
|
// Get an existing target state for an edge in the DFA. If the target state
|
||||||
|
@ -287,11 +294,15 @@ LexerATNSimulator.prototype.computeTargetState = function(input, s, t) {
|
||||||
};
|
};
|
||||||
|
|
||||||
LexerATNSimulator.prototype.failOrAccept = function(prevAccept, input, reach, t) {
|
LexerATNSimulator.prototype.failOrAccept = function(prevAccept, input, reach, t) {
|
||||||
|
|
||||||
if (this.prevAccept.dfaState !== null) {
|
if (this.prevAccept.dfaState !== null) {
|
||||||
|
|
||||||
var lexerActionExecutor = prevAccept.dfaState.lexerActionExecutor;
|
var lexerActionExecutor = prevAccept.dfaState.lexerActionExecutor;
|
||||||
this.accept(input, lexerActionExecutor, this.startIndex,
|
this.accept(input, lexerActionExecutor, this.startIndex,
|
||||||
prevAccept.index, prevAccept.line, prevAccept.column);
|
prevAccept.index, prevAccept.line, prevAccept.column);
|
||||||
console.log(prevAccept.dfaState.prediction)
|
|
||||||
|
console.log("Prevaccept", prevAccept.dfaState.prediction)
|
||||||
|
|
||||||
return prevAccept.dfaState.prediction;
|
return prevAccept.dfaState.prediction;
|
||||||
} else {
|
} else {
|
||||||
// if no accept and EOF is first char, return EOF
|
// if no accept and EOF is first char, return EOF
|
||||||
|
@ -341,8 +352,7 @@ LexerATNSimulator.prototype.getReachableConfigSet = function(input, closure,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
LexerATNSimulator.prototype.accept = function(input, lexerActionExecutor,
|
LexerATNSimulator.prototype.accept = function(input, lexerActionExecutor, startIndex, index, line, charPos) {
|
||||||
startIndex, index, line, charPos) {
|
|
||||||
if (this.debug) {
|
if (this.debug) {
|
||||||
console.log("ACTION %s", lexerActionExecutor);
|
console.log("ACTION %s", lexerActionExecutor);
|
||||||
}
|
}
|
||||||
|
|
|
@ -573,6 +573,9 @@ DefaultErrorStrategy.prototype.getMissingSymbol = function(recognizer) {
|
||||||
if (current.type===Token.EOF && lookback !== null) {
|
if (current.type===Token.EOF && lookback !== null) {
|
||||||
current = lookback;
|
current = lookback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Println("Missing symbol error")
|
||||||
|
|
||||||
return recognizer.getTokenFactory().create(current.source,
|
return recognizer.getTokenFactory().create(current.source,
|
||||||
expectedTokenType, tokenText, Token.DEFAULT_CHANNEL,
|
expectedTokenType, tokenText, Token.DEFAULT_CHANNEL,
|
||||||
-1, -1, current.line, current.column);
|
-1, -1, current.line, current.column);
|
||||||
|
|
Loading…
Reference in New Issue