Как перевести на antlr4 грамматику ObjectLiteral[Выход]?

Я пытаюсь перевести грамматику es6 с:

Моя проблема в том, что многие объявления содержат что-то вроде этого:

ObjectLiteral[Yield] :
 { }
 { PropertyDefinitionList[?Yield] }
 { PropertyDefinitionList[?Yield] , }

Я хотел бы знать, есть ли какой-либо перевод на antlr4 для предыдущих строк.

1 ответ

Решение

Один из подходов состоит в том, чтобы следовать определениям в разделе Грамматическая нотация спецификации. То есть произведение с одним параметром слева является аббревиатурой для двух производств без параметров, по одному для каждой возможной "установки" параметра.

Например,

ObjectLiteral[Yield] :
  { }
  { PropertyDefinitionList[?Yield] }
  { PropertyDefinitionList[?Yield] , }

это сокращение для двух производств:

ObjectLiteral :
  { }
  { PropertyDefinitionList }
  { PropertyDefinitionList , }

а также

ObjectLiteral_Yield :
  { }
  { PropertyDefinitionList_Yield }
  { PropertyDefinitionList_Yield , }
Другие вопросы по тегам