-1
我正在研究Flex & Bison项目。我得到了我的flex &野牛完美的工作,但我试图给真正的argv输入字符串。所以我改变了yyin,以至于花了argv [1],但它实际上并不工作。它只是忽略它。来自Argv的Flex&Bison yyin []
这里是我的main.c:
#include "parser.hpp"
#include <stdio.h>
#include <iostream>
#include <stdlib.h>
int main(int argc, char const *argv[]) {
extern FILE* yyin;
yyin = fopen(argv[1],"r");
yyparse();
}
这里是我的makefile:
all: bison flex main.cpp
g++ parser.cpp lexer.cpp main.cpp -o parser
rm lexer.cpp parser.cpp parser.hpp
bison: parser.y
bison -o parser.cpp parser.y
flex: lexer.l
flex -o lexer.cpp lexer.l
然后我像这样运行: ./parser "(2+5)"
但不起任何作用。 也许我没有按照正确的方式去做。
我想你应该看看'fopen'实际上做了些什么。 – rici
是的,我把它从一个例子中拿出来,但对我来说似乎很奇怪,我们使用fopen。但我基本上不会怀疑 'yyin = argv [1];' 因为类型不匹配。 对不起,如果我问愚蠢的问题。 –
@ G.Courmont:您正试图打开名为**(2 + 5)**的文件并从中读取。 –