我在之前的课程中编写了Flex的东西,但我以前工作的代码都没有解决我遇到的问题。
我在StackOverflow周围搜索了一个解决方案,但没有一个解决过它。
我有:
这是我的代码(我删除了所有令牌,因为它们有很多):
%{
...
int numLines = 0;
void printTokenInfo(char* tokenType, char* lexeme);
void handleComments(char* text);
%}
WSPACE [ \t\r]+
NEWLINE \n
DIGIT [0-9]
LETTER [a-zA-Z]
IDENT ({LETTER}|_)({LETTER}|{DIGIT}|_)*
INTCONST {DIGIT}+
CHARCONST "'"{LETTER}+"'"
%%
...
%%
// User-written code goes here
void printTokenInfo(char* tokenType, char* lexeme)
{
printf("A");
printf("TOKEN: %s LEXEME: %s\n", tokenType, lexeme);
}
void handleComments(char* text)
{
printf("%s\n", text);
}
int yywrap() { return 1; }
int main()
{
do {
yylex();
} while (!feof(yyin));
return 0;
}
以下是我编译和运行它的方法:
flex FILENAME.l
g++ lex.yy.c -o lexer
lexer < INPUT.txt
教师向我们提供了输入文件,但没有一个有效。他们都因“过早的EOF”或“坏人”而失败
有什么想法吗?
答案 0 :(得分:1)
好吧,我想我终于找到了答案......尝试使用完整路径运行它,而不仅仅是编译词法分析器的名称。我发现了真实的&#39;在gdb下运行它的路径(这无疑应该是我的第一直觉)。
gdb lexer
(gdb) run < INPUT.txt
最初,我试图用以下方式运行它:
lexer < INPUT.txt
但是我发现用gdb运行它有效:
/nethome/users/mjc7w6/Classes/lexer < INPUT.txt
编辑:有人在我的Facebook上进一步改进。如果上述解决方案为您修复了,您可能需要使用以下内容编辑〜/ .bashrc:
export PATH=/nethome/users/mjc7w6/Classes:$PATH
或者你找到了要设置的路径。