Есть ли инструмент для создания компилятора c в win7 с yacc и lex? - PullRequest
0 голосов
/ 27 ноября 2010

Единственный найденный инструмент - это Генератор парсера :

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.

Ответы [ 3 ]

1 голос
/ 27 ноября 2010

Я не знаю насчет VS2010, но я использовал этот порт Win32 Lex / Yacc (Flex / Bison) на VS2005 без проблем: http://userpages.monmouth.com/~wstreett/lex-yacc/lex-yacc.html

Кроме того, ваша ошибка связана стот факт, что VC ++ фактически определяет stdin, stdout и т. д. как макросы, которые расширяются до вызовов функций, которые возвращают FILE *.Понятно, что это не константы времени компиляции, как об этом говорит ошибка.

0 голосов
/ 27 ноября 2010

Проблема не имеет ничего общего с 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

Надежда, которая помогает

0 голосов
/ 27 ноября 2010

Не все так просто с окнами. Если вы готовы выложить деньги, вы можете использовать инструментарий MKS lex и Yacc

...