Как создать лямбда-символ в jflex?
Я делаю синтаксический анализатор с jflex + javacup. На грамматике.cup у меня есть эта часть:
SUBPPARAMLIST ::= lambda | "(" EXPLIST ")"
Где лямбда ничего не значит (SUBPPARAMLIST может быть пустым)
Что ж, мне удалось правильно создать все мои токены в моем.flex, но я не знаю, как создать символ лямбда. Я надеюсь, что вы, ребята, можете мне помочь, дайте мне знать, если вы не понимаете мою проблему
WhatDoIWriteHere{return symbol(sym.lambda);}
1 ответ
Пустое производство (то, что вы называете "лямбда") не нуждается в символе, потому что оно пустое. Вы выражаете это производственным правилом:
SUBPPARAMLIST ::= lambda | "(" EXPLIST ")" ;
lambda ::= ;
Цитата: Каждое произведение в грамматике имеет левый нетерминал, за которым следует символ "::=", за которым следует серия из нуля или более действий, терминальных или нетерминальных символов, за которыми следует необязательный контекстное присвоение приоритета и заканчивается точкой с запятой (;). Обратите внимание на "... ноль или больше..."
Возможно, грамматический парсер также способен справиться с этим:
SUBPPARAMLIST ::= "(" EXPLIST ")" | ;