我试图通过继承我的主要项目词法分析器来严格捕捉所有词汇错误,但无法弄清楚如何附上我的班级:
public class BailLexer : LISBASICLexer
{
public BailLexer(ICharStream input) : base(input)
{
}
public override void Recover(LexerNoViableAltException e)
{
IToken token = e.OffendingToken;
string message = string.Format("error at line {0}, position {1} at {2} ", token.Line, token.Column, token.Text);
throw new ParseCanceledException(message);
}
}
到我的词法分析员:
AntlrInputStream inputStream = new AntlrInputStream(stream);
LISBASICLexer lexer = new LISBASICLexer(inputStream);
lexer.RemoveErrorListeners();
lexer.AddErrorListener(new BailLexer(inputStream));
当我对此进行编码时,编译器会给我这个错误:
Error 7 The best overloaded method match for 'Antlr4.Runtime.Recognizer<int,Antlr4.Runtime.Atn.LexerATNSimulator>.AddErrorListener(Antlr4.Runtime.IAntlrErrorListener<int>)' has some invalid arguments C:\prj\LISC-ANTLR\LISC-ANTLR\FormWorkbench.cs 63 6 LISC-ANTLR
将自定义错误监听器连接到词法分析器需要什么样的机制?到目前为止,我尝试转换Java示例的尝试毫无结果。我试图像TestRig那样捕捉词汇错误,例如:
line 6:6 token recognition error at: 'L'
line 6:7 token recognition error at: 'O'
line 6:8 token recognition error at: 'G'
有人可以举个例子吗?
答案 0 :(得分:0)
答案很简单:我需要用我的自定义词替换我的词法分析器,而不是添加一个监听器:
AntlrInputStream inputStream = new AntlrInputStream(stream);
BailLexer lexer = new BailLexer(inputStream);
仍然没有陷入我希望的错误,但至少我现在有严格的错误。