Как найти неправильный символ в моей грамматике
Я начал работать с анализатором золота и попытался перенести его синтаксис на 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()+"'";
}
1 ответ
Решение
Золотой парсер использует события для связи с хост-приложением. Вы разместили обработчики для двух из них:
- OnTokenError... неузнаваемый ввод. ничего не могу с этим поделать, кроме исправления источника.
- OnParseError... обнаружен токен, который он не может проанализировать. Вы можете решить, как поступить с
ContinueMode
: поставьте новый токен, проигнорируйте или остановите.
Согласно документации, информация о местоположении источника доступна с этими свойствами:
args.UnexpectedToken.Location.LineNr
а также
args.UnexpectedToken.Location.ColumnNr
Они оба начинаются с нуля, поэтому, если вы разделите свой источник на массив строк, вы можете напрямую использовать LineNr
в качестве индекса, а затем SubString
функция, указывающая на первый символ неожиданного литерала токена.