Как вы объявляете этот макрос в lex?
Я новичок в Лекс, и я запутался в том, как объявить следующий макрос, ключевое слово. Я хочу, чтобы ключевое слово состояло из "если", "тогда", "еще" или "пока".
Я набрал это в лекс:
keyword "if" | "then" | "else" | "while"
но компилятор выдает мне "нераспознанную ошибку правила". Когда я вместо этого
keyword "if"
Компилируется нормально.
Это просто ограничение Лекса? Я знаю, что в jflex вы можете делать то, что я делал выше, и это будет работать нормально. Или я делаю это неправильно?
Спасибо
1 ответ
Я не могу проверить это прямо сейчас, но с головы до головы:
Попробуйте поставить значения в скобках (перед первым %%)
keyword ("if"|"then"|"else"|"while")
А затем используйте его в правилах, подобных этому (между %% и %%):
{keyword} {//action}
Вот как вы делаете класс в lex, поэтому в остальной части кода вы можете использовать {keyword}
и он будет распознан как регулярное выражение, назначенное вами в разделе определения (перед первым %%). Кроме того, вы можете использовать класс как часть других регулярных выражений:
{keyword}\{[^\}]\} {//action}
Это распознает целый блок кода. (но он не проверяет синтаксис внутри блока, я оставляю это вам:))