-2

我开始研究黄金解析器,并尝试将其语法应用于。这是一个片段代码。我对这个特定部分的作用感兴趣,如果我能看到我用文本框输入的文本中的哪些字符不符合我的语法?

private void TokenErrorEvent(LALRParser parser, TokenErrorEventArgs args)
{
    string message = "Token error with input: '"+args.Token.ToString()+"'";

}

private void ParseErrorEvent(LALRParser parser, ParseErrorEventArgs args)
{
    string message = "Parse error caused by token: '"+args.UnexpectedToken.ToString()+"'";

}
4

1 回答 1

2

Gold 解析器使用事件与主机应用程序进行通信。您为其中两个发布了处理程序,它们是:

  • OnTokenError...无法识别的输入。除了修复源之外,对此无能为力。
  • OnParseError... 遇到无法解析的令牌。您可以决定如何继续ContinueMode:提供替换令牌、忽略或停止。

根据文档,源位置信息可通过以下属性获得:

args.UnexpectedToken.Location.LineNr

args.UnexpectedToken.Location.ColumnNr

它们都是从零开始的,所以如果你把你的源代码拆分成一个行数组,你可以直接LineNr用作索引,然后SubString函数指向意外标记文字的第一个字符。

于 2019-01-21T07:12:09.663 回答