在flex/bison中提取行内容失败

在flex/bison中提取行内容失败,bison,flex-lexer,Bison,Flex Lexer,我试图提取一行的内容,并在该行的输入被bison拒绝时打印它们。 我试图重现这些建议:但当输入被拒绝时,打印下一行而不是被拒绝的行,同时正确打印行数 弹性: 输出: Syntax error in line 1: else 我相信词法规则\n.*或yytext+1会将输出驱动到下一行,但哪个词法规则是正确的?之所以会发生这种情况,是因为bison使用1-token前瞻来解析。因此,只有在扫描程序读取并返回ELSE标记后,才会发现或诊断丢失的分号。在这一点上,前面的规则(期望分号或其他东西生成更

我试图提取一行的内容,并在该行的输入被bison拒绝时打印它们。 我试图重现这些建议:但当输入被拒绝时,打印下一行而不是被拒绝的行,同时正确打印行数

弹性:

输出:

Syntax error in line 1: else

我相信词法规则\n.*或yytext+1会将输出驱动到下一行,但哪个词法规则是正确的?

之所以会发生这种情况,是因为bison使用1-token前瞻来解析。因此,只有在扫描程序读取并返回ELSE标记后,才会发现或诊断丢失的分号。在这一点上,前面的规则(期望分号或其他东西生成更长的表达式)无法匹配处于该状态的其他标记上的no-shift或reduce操作

一旦发现错误,解析器将调用yyerror,它将打印消息和最近读取的行,即带有ELSE标记的行

 %{
    #include <stdio.h>
    #include <assert.h>
    #include <string.h>
    #include <stdlib.h>
    #include "parser.tab.h"

    extern int yylex(void);
    extern int line_number;
    extern char line_contents[500];
    void yyerror(char const *s);
    %}
...
%%
int main(){
if( yyparse() == 0)
printf("Accepted\n");
else
printf("Syntax error in line %d: %s\n" line_number, linebuf);
...
input:
result = function //(semicolon expected)
else
Syntax error in line 1: else