如何在我的语法中找到错误的字符

How to find a wrong character in my grammar

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

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()+"'";

}

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

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

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

args.UnexpectedToken.Location.LineNr

args.UnexpectedToken.Location.ColumnNr

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