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