2016-03-26 5 views
0

Я делаю синтаксический аналикс с jflex + javacup. В .cup gramatic У меня есть эта часть:Как создать символ лямбда в jflex?

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

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

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


WhatDoIWriteHere{return symbol(sym.lambda);}

ответ

0

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

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

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

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

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