2010-11-27 22 views
0

Le seul outil se trouve est ce Parser Generator:Existe-t-il un outil pour faire un compilateur c dans win7 avec yacc et lex?

Operating System: Windows 95/98/ME/NT/2000/XP 

Mais semble que ce n'est pas soutenir win7, lorsque je tente de construire pour Visual C++ (32 bits), a obtenu cette erreur:

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; 

I utilise Visual Studio 2010 Express.

Répondre

1

Je ne sais pas VS2010, mais je l'ai utilisé ce port Win32 de Lex/Yacc (Flex/Bison) sur VS2005 sans problèmes: http://userpages.monmouth.com/~wstreett/lex-yacc/lex-yacc.html

en outre, votre erreur est due au fait que VC++ définit en fait stdin, etc. stdout comme des macros qui se dilatent pour fonctionner des appels qui renvoient un FILE *. Clairement, ce ne sont pas des constantes de compilation, ce que dit l'erreur.

+0

Comment est-ce que je suis supposé utiliser flex.exe et bison.exe dans mon compilateur écrit dans c? Je m'attendais à des en-têtes et des bibliothèques, mais pas d'exécutables .. – yoyo

+1

@yoyo: Flex et Bison sont des générateurs lexeur et parser respectivement . Vous n'avez pas besoin d'en-têtes et de bibliothèques, ces outils génèreront tout le code C dont vous avez besoin. Rechercher des tutoriels Flex/Bison et vous trouverez beaucoup. – casablanca

0

Le problème n'a rien à voir avec Win7 en soi, et tout à voir avec les normes ANSI C (plus strictes!). Le compilateur C tout simplement pas vous permettre d'affecter une macro (comme "stdin" ou "stdout") à une "variable non automatique":

http://msdn.microsoft.com/en-us/library/t801az8a%28VS.80%29.aspx

est ici une solution de contournement:

http://coding.derkeiler.com/Archive/C_CPP/comp.lang.c/2009-10/msg00982.html

stdin and stdout need not be constants, so you can't use them to initalise static or global variables. Do the assignments in an initialisation function instead.

de plus, ce lien pourrait vous être pointées dans la bonne direction:

http://msdn.microsoft.com/en-us/library/aa730877%28VS.80%29.aspx

« espoir qui aide