2013-04-11 5 views
-1

Мне нужно запрограммировать компилятор с flex.Условия использования Flex Container

Но я не люблю данный код и хочу сделать свое «я».

lexfile.l:

{% 
    typedef enum { EQ=0, NE, PLUS, MINUS, SEMICOLON } punctuationType; 
    typedef enum { PRINT=100, WHILE, IDENT } keywordType; 
%} 

%% 
    "!="       { return NEQ; } 
    "="        { return EQ; } 
    "+"        { return PLUS; } 
    "-"        { return MINUS; } 
    ";"        { return SEMICOLON; } 

%% 

Есть ли лучшее решение?

Я искал решение, но другое решение - определить константы.

#define EQ 0 
#define NE 1 
... 

Выход Пример:

Operator EQ 
Operator NE 

Вопрос только, если есть лучший тип вместо этого Enum

+0

Вы используете это в сочетании с бизоном? Если это так, вы обычно определяете токены в бизоне. – Josh

ответ

1

Что бы вы возвращаетесь должно быть понято компилятором. Если вы используете yacc,, у вас нет выбора: вы должны соблюдать то, что генерирует %token, которые определены для вас в y.tab.h.:, вам ничего не нужно делать.

С другой стороны, нет необходимости иметь либо имена или flex правил для одного символьных специальных символов: вы можете просто вернуть yytext[0] для всех из них и использовать соответствующие литералы в файле .y.

Вы не даете достаточно подробностей для дальнейших комментариев.

+0

thx для ответа, я отредактировал мое главное сообщение – demonking

+0

Я не понимаю ваше редактирование. Здесь нет кода, который бы выдавал этот результат, и вы ничего не уточнили. – EJP

+0

жаль, что я был в спешке в последний раз;) Мне хотелось получить результат в первый раз, если регулярное выражение все поймет правильно. :) Теперь я создал абстрактный класс lexType и punctuationType, а другой класс распространяется из lexType. – demonking

Смежные вопросы