Как перевести на 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 , }