我传递给 Lemon 的所有标记都是附加了行号信息的结构。
查看下面的 syntax_error 定义
%name SinkParser
%token_prefix SINKPARSER_TOKEN_
%token_type {SinkParserNode*}
%extra_argument { SinkParserContext *parser_context }
%syntax_error {
SinkParser_SyntaxError(parser_context);
}
%token_destructor { SinkParserNode_Destruct($$); }
但是我看不到如何报告错误是什么文件和行。我有所有令牌的信息,但是如何在 syntax_error 处理程序中访问适当的令牌?
我是否需要单独跟踪我在标记器中的位置并在语法错误中查看它?我意识到标记器在遇到语法错误时可能会领先于解析器。