Как найти неправильный символ в моей грамматике

Я начал работать с анализатором золота и попытался перенести его синтаксис на 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 функция, указывающая на первый символ неожиданного литерала токена.

Другие вопросы по тегам