gpt4 book ai didi

c++ - Win flex-bison 编译产生无效字符错误

转载 作者:行者123 更新时间:2023-11-28 04:28:10 25 4
gpt4 key购买 nike

我设法在 Windows 10 上安装了 win flex-bison(版本 2.5.16)。我从我找到的其中一个教程中复制了一个示例词法分析器程序,并尝试使用以下指令对其进行编译:

win_flex -o lexer.cpp lexer.l

文件 lexer.l 是:

%option noyywrap

%{
#include <stdio.h>

#define YY_DECL int yylex()

#include "calc.tab.h"

%}

%%

[ \t] ; // ignore all whitespace
[0-9]+\.[0-9]+ {yylval.fval = atof(yytext); return T_FLOAT;}
[0-9]+ {yylval.ival = atoi(yytext); return T_INT;}
\n {return T_NEWLINE;}
"+" {return T_PLUS;}
"-" {return T_MINUS;}
"*" {return T_MULTIPLY;}
"/" {return T_DIVIDE;}
"(" {return T_LEFT;}
")" {return T_RIGHT;}
"exit" {return T_QUIT;}
"quit" {return T_QUIT;}

%%

当我编译它时,它会在文件的每一行报告一堆类似的错误,例如:

lexer.l:19: bad character:
lexer.l:19: bad character: }
lexer.l:19: bad character:
lexer.l:19: bad character:
lexer.l:19: bad character:
lexer.l:20: bad character:
lexer.l:20: bad character: "
lexer.l:20: bad character:
lexer.l:20: bad character: *
lexer.l:20: bad character:
lexer.l:20: bad character: "
lexer.l:20: bad character:
lexer.l:20: bad character:
lexer.l:20: bad character:
lexer.l:20: bad character: {
lexer.l:20: bad character:
lexer.l:20: unknown error processing section 1
lexer.l:20: bad character:
lexer.l:20: unknown error processing section 1
lexer.l:20: bad character:
lexer.l:20: unknown error processing section 1
lexer.l:20: bad character:
lexer.l:20: unknown error processing section 1
lexer.l:20: bad character:
lexer.l:20: unknown error processing section 1
lexer.l:20: bad character:
lexer.l:20: unknown error processing section 1
lexer.l:20: bad character:
lexer.l:20: bad character:

我要补充的是,这发生在旧版本的 win_flex 以及我尝试过的所有其他示例词法分析器文件中。长输出中的第一个错误报告如下:

lexer.l:1: bad character:  
lexer.l:1: bad character: ■
lexer.l:1: bad character: %

我不知道这些字符是从哪里来的。当我编译 parser.y 文件时,win_bison 也发生了类似的事情,但只有几条错误消息(与上面的非常相似):

Process "parser.y" bison file
1> parser.y:1.1-2: error: invalid characters: ' ■'
1>  ■% ^^
1> parser.y:1.3: error: invalid character: '%'
1>  ■% ^
1> parser.y:1.4: error: invalid character: '\0'
1>  ■% ^
1> parser.y:1.4-15.2: error: syntax error, unexpected {...}
1>  ■% ^^^^^^

似乎 win_flex 拒绝了我提供的任何输入中的每个字符。所以问题是我是否遗漏了一些明显的东西,或者我应该停止浪费时间并使用 Jflex 和 Cup?

编辑:某处有人提到这可能是文件编码的问题。我检查了它的 UTF-8。我不知道它应该是什么,它会不会导致问题。

最佳答案

Flex 和 bison 输入文件应该是 ASCII,而不是 UTF-8。确保文件中没有不在基本 ASCII 集中的字符。这包括:

  • 文件开头的 BOM,如果有的话(根据 bison 错误,我会说肯定有)。

  • 不间断空格。

关于c++ - Win flex-bison 编译产生无效字符错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53733418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com