Как создать лямбда-символ в jflex?

Я делаю синтаксический анализатор с jflex + javacup. На грамматике.cup у меня есть эта часть:

   SUBPPARAMLIST ::= lambda | "(" EXPLIST ")"

Где лямбда ничего не значит (SUBPPARAMLIST может быть пустым)

Что ж, мне удалось правильно создать все мои токены в моем.flex, но я не знаю, как создать символ лямбда. Я надеюсь, что вы, ребята, можете мне помочь, дайте мне знать, если вы не понимаете мою проблему


WhatDoIWriteHere{return symbol(sym.lambda);}

1 ответ

Решение

Пустое производство (то, что вы называете "лямбда") не нуждается в символе, потому что оно пустое. Вы выражаете это производственным правилом:

SUBPPARAMLIST ::= lambda | "(" EXPLIST ")" ;
lambda ::=  ;

Цитата: Каждое произведение в грамматике имеет левый нетерминал, за которым следует символ "::=", за которым следует серия из нуля или более действий, терминальных или нетерминальных символов, за которыми следует необязательный контекстное присвоение приоритета и заканчивается точкой с запятой (;). Обратите внимание на "... ноль или больше..."

Возможно, грамматический парсер также способен справиться с этим:

SUBPPARAMLIST ::= "(" EXPLIST ")" | ;
Другие вопросы по тегам