Помощь - Поиск - Пользователи - Календарь
Полная версия: Лексический анализатор (Flex), C
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
Rocket
Цитата(volvo @ 26.05.2009 22:18) *

Правый клик на MyComputer (ну, или Мой Компьютер, как он там у тебя называется?) и Properties/Свойства, переходишь на вкладку Advanced/Дополнительно, а дальше по скриншоту видно, что делать...

Во-первых, пока не добавишь путь в переменную Path - так и будет... А во-вторых, я совсем не уверен, что кириллица в пути допустима, попробуй поменять название папки на латинское (когда пути настроишь, и если тогда не получится линковка).

Наконц-то добился компиляции) ТОлько вот такого рода ошибки возникли:
Цитата

F:\3course\tvp\lex.yy.o:lex.yy.c:(.text+0x33d)||undefined reference to `_yywrap'|
F:\3course\tvp\lex.yy.o:lex.yy.c:(.text+0xa15)||undefined reference to `_yywrap'|
F:\CodeBlocks\MinGW\bin\..\lib\gcc\mingw32\3.4.5\..\..\..\libmingw32.a(main.o):main.c:(.text+0x104)||undefined reference to `_WinMain@16'|
||=== Build finished: 3 errors, 0 warnings ===|

Что они означают?
volvo, а Вы вообще имели опыт работы с flex'ом ?
volvo
Исходник засекречен? smile.gif Можно на него посмотреть?

У тебя определенно чего-то не хватает. Или не подключен какой-то C-файл, или H-файл... Ну, и библиотека, разумеется, тоже не подключена, о чем говорит ошибка Линкера.
Rocket
Цитата(volvo @ 27.05.2009 0:09) *

Исходник засекречен? smile.gif Можно на него посмотреть?

У тебя определенно чего-то не хватает. Или не подключен какой-то C-файл, или H-файл... Ну, и библиотека, разумеется, тоже не подключена, о чем говорит ошибка Линкера.

Я пишу программу распознования символов для идентификатора, который имеет следующий вид:
letter (letter | digit)*
Программа для flex'а имеет следующий вид:
Цитата
letter [a-z]
digit [0-9]
symbol [ ,./<>?;':"{}!@#$%^&*()_+=-]
error ({digit}|{symbol})({letter}|{symbol}|{digit})*
identifier {letter}({letter}|{digit})*
%%
{error} {printf("error %s",yytext);}
{identifier} {printf("identifier %s",yytext);}
%%

Готовый с-шный файл также прикрепил...
Чего не хватает для компиляции? И поле error ({digit}|{symbol})({letter}|{symbol}|{digit})*, что означает и как его получить?

p.s. Спасибо,volvo, что разделили темы)
volvo
Цитата
Готовый с-шный файл также прикрепил...
Куда, можно поинтересоваться? smile.gif

Рассказываю с нуля, что сделал с твоим кодом, приведенным выше:
1) сохранил его в файл с именем test.lex в папку, куда установлен Flex (у меня - D:\Program Files\GnuWin32\bin)
2) запустил команду
D:\Program Files\GnuWin32\bin>flex test.lex
, в результате чего получил файл lex.yy.c в той же папке.
3) этот файл lex.yy.c подключил к проекту CodeBlocks (единственный файл)
4) зашел в Project->Build Options->(вкладка)Linker Settings, под листбоксом "Link Libraries" есть кнопка Add, с ее помощью добавил к проекту библиотеку D:\Program Files\GnuWin32\lib\libfl.a, нажал Ok, собрал проект Ctrl+F9... Никаких ошибок не возникло, создался EXE-файл. Что я делаю не так?
Rocket
Цитата(volvo @ 27.05.2009 17:45) *

Куда, можно поинтересоваться? smile.gif

Рассказываю с нуля, что сделал с твоим кодом, приведенным выше:
1) сохранил его в файл с именем test.lex в папку, куда установлен Flex (у меня - D:\Program Files\GnuWin32\bin)
2) запустил команду
D:\Program Files\GnuWin32\bin>flex test.lex
, в результате чего получил файл lex.yy.c в той же папке.
3) этот файл lex.yy.c подключил к проекту CodeBlocks (единственный файл)
4) зашел в Project->Build Options->(вкладка)Linker Settings, под листбоксом "Link Libraries" есть кнопка Add, с ее помощью добавил к проекту библиотеку D:\Program Files\GnuWin32\lib\libfl.a, нажал Ok, собрал проект Ctrl+F9... Никаких ошибок не возникло, создался EXE-файл. Что я делаю не так?

А где можно взять эту библиотеку? у меня её нет...

p.s. Прикреплять с-шный файл уже нет смысла)
volvo
У тебя установлен Flex вообще? Вот отсюда качается установщик под Windows (1.3 Мб):
Прямая ссылка

Если установлен - то в его папке \lib
Rocket
Цитата(volvo @ 27.05.2009 18:31) *

У тебя установлен Flex вообще? Вот отсюда качается установщик под Windows (1.3 Мб):
Прямая ссылка

Если установлен - то в его папке \lib

У меня просто файл flex.exe, его и использовал...
volvo
Просто файла недостаточно, ты с его помощью можешь (скорее всего) получить C-файл, но вот откомпилировать ты его уже не сможешь, нужна библиотека, причем версии, подходящей к этому же flex.exe. Они ж постоянно меняются, что-то добавляется, что-то убирается...
Rocket
Цитата(volvo @ 27.05.2009 18:44) *

Просто файла недостаточно, ты с его помощью можешь (скорее всего) получить C-файл, но вот откомпилировать ты его уже не сможешь, нужна библиотека, причем версии, подходящей к этому же flex.exe. Они ж постоянно меняются, что-то добавляется, что-то убирается...


Добавил к проекту библиотеку - всё заработало)
И всё-таки, вот такое объявление error ({digit}|{symbol})({letter}|{symbol}|{digit})*, что означает?

volvo, Вы не могли дать ссылочку набодобие как на flex, только на bison, чтоб тоже с библиотеками?..
volvo
Установщик Бизона для Windows лежит здесь

Цитата
такое объявление error ({digit}|{symbol})({letter}|{symbol}|{digit})*, что означает?
Это регулярное выражение, которое определяет, что считать ошибкой. Подробнее о разборе регулярок - здесь: Flex Doc -> 6. Patterns
Rocket
Цитата(volvo @ 27.05.2009 19:36) *

Установщик Бизона для Windows лежит здесь

Это регулярное выражение, которое определяет, что считать ошибкой. Подробнее о разборе регулярок - здесь: Flex Doc -> 6. Patterns

volvo, большое спасибо за ссылки - бизон и мануал пригодились)
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.