2014-02-02 8 views
0

Как школьное задание, я создаю Lexical Analyzer с использованием FLEX. Анализатор используется анализатором, который также является частью задания. Мы должны использовать лексический анализатор и парсер для языка, который называется VSL. Однако я не могу заставить анализатор работать.Создание лексического анализатора с использованием flex

Я буду использовать некоторые ключевые слова из VSL в качестве примера: FUNC, PRINT и IF.

Здесь токовый выход из секции правил:

"FUNC"  {return FUNC;} 
"START"  {return START;} 
"PRINT"  {return PRINT;} 

.   { RETURN(yytext[0]); } 

. просто возвращает каждый символ один за другим, когда не соответствует никакому другому правилу, и был предоставлен в почти пустом файле из университета. Токены, которые должны быть возвращены, указаны в предоставленном синтаксическом анализаторе, и три из них используются выше. Я определил из тестовых выходов (сгенерированных инструментами также), что FUNC, START и PRINT распознаются, но они не отображаются в тестовых выходах и, по-видимому, они не передаются. У меня такая же проблема с переменными (строки, цифры и т. Д.). Они состоят из цифр и/или букв, которые обрабатываются в правилах (не обязательно их показывать). Что я делаю не так? Каков мой следующий шаг?

Если я удалю каждое правило, которое я сделал, и пусть последнее правило с. остаются, то все буквы и цифры становятся видимыми на тестовом выходе, поэтому я знаю, что лексер их распознает как минимум. Но каков следующий шаг?

ответ

0

Оказалось, что gcc-компилятор на моей Mac OS X Mavericks имеет другое поведение, чем GNU gcc-компилятор, к которому у меня есть доступ к сети через ssh. Локальный компилятор игнорирует ошибки, сгенерированные онлайн-компилятором, а также имеет собственные локальные ошибки, не относящиеся к GNU gcc. Так что часть проблемы была путаницей с моей стороны.

Кроме того, оказалось, что это правильный код:

"FUNC"  {RETURN(FUNC);} 
"START"  {RETURN(START);} 
"PRINT"  {RETURN(PRINT);} 

.   { RETURN(yytext[0]); } 
+0

только личный совет: если вы хотите использовать ваш компьютер для программирования, вы должны использовать Linux или Windows, (первый, вероятно, лучше). Решение этих небольших проблем может сжечь много времени. – HAL9000