我傳遞給檸檬的所有令牌都是附有行號信息的結構。如何在生成的解析器中捕獲語法錯誤的行號
看那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處理程序中訪問相應的信息?
我是否需要單獨跟蹤我在標記器中的位置並在語法錯誤中查看它?我意識到標記器在語法錯誤時可能會在解析器之前。
按照此建議,我現在保留最後兩個標記的滑動窗口parser_context。出現語法錯誤時,如果它們不同,我給出兩條消息(這裏是「或這裏」的錯誤),否則如果它們在同一個文件/行上,我省略第二條消息。很好,謝謝。 – doug65536