找到唯一的工具是Parser Generator:
Operating System: Windows 95 / 98 / ME / NT / 2000 / XP
但似乎它不支持win7
,当我尝试构建Visual C ++(32位)时,出现了这个错误:
yyaslvar.c
C:\Program Files\Parser Generator 2\Cpp\Source\yyaslvar.c(35) : error C2099: initializer is not a constant
C:\Program Files\Parser Generator 2\Cpp\Source\yyaslvar.c(36) : error C2099: initializer is not a constant
C:\Program Files\Parser Generator 2\Cpp\Source\yyaslvar.c(37) : error C2099: initializer is not a constant
FILE YYFAR *YYNEAR YYDCDECL yyin = stdin;
FILE YYFAR *YYNEAR YYDCDECL yyout = stdout;
FILE YYFAR *YYNEAR YYDCDECL yylexererr = stderr;
我正在使用Visual Studio 2010 Express。
答案 0 :(得分:1)
我不知道VS2010,但我在VS2005上使用了这个Win32端口的Lex / Yacc(Flex / Bison)而没有任何问题:http://userpages.monmouth.com/~wstreett/lex-yacc/lex-yacc.html
此外,您的错误是由于VC ++实际上将stdin
,stdout
等定义为宏,这些宏扩展为返回FILE *
的函数调用。显然,这些不是编译时常量,这就是错误所说的。
答案 1 :(得分:0)
使用Windows不太容易。如果您准备支付一些钱,那么您可以使用MKS lex和Yacc工具包
答案 2 :(得分:0)
这个问题与Win7本身无关,而且与(更严格的!)ANSI C标准有关。 C编译器根本不允许您将宏(如“stdin”或“stdout”)分配给“非自动变量”:
http://msdn.microsoft.com/en-us/library/t801az8a%28VS.80%29.aspx
这是一个解决方法:
http://coding.derkeiler.com/Archive/C_CPP/comp.lang.c/2009-10/msg00982.html
stdin和stdout不一定是常量,所以你不能使用它们 初始化静态或全局变量。 而是在初始化函数中进行分配。
此外,此链接可能会让您指向正确的方向:
http://msdn.microsoft.com/en-us/library/aa730877%28VS.80%29.aspx
'希望有所帮助