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

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

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

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

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


WhatDoIWriteHere{return symbol(sym.lambda);}

person Alberto Hernández    schedule 26.03.2016    source источник


Ответы (1)


Пустая продукция (то, что вы называете «лямбда») не нуждается в символе, потому что она пуста. Вы выражаете это с помощью производственного правила:

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

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

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

SUBPPARAMLIST ::= "(" EXPLIST ")" | ;
person laune    schedule 26.03.2016