如何在我的语法中找到错误的字符
How to find a wrong character in my grammar
我开始研究 gold 解析器并尝试将其语法应用于 c#。这是一个片段代码。我对这个特定部分的作用很感兴趣,如果我能看到我用文本框输入的文本中的哪些字符不符合我的语法?
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
函数指向第一个意外标记文字的字符。
我开始研究 gold 解析器并尝试将其语法应用于 c#。这是一个片段代码。我对这个特定部分的作用很感兴趣,如果我能看到我用文本框输入的文本中的哪些字符不符合我的语法?
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
函数指向第一个意外标记文字的字符。