Левые рекурсивные определения (БНФ) - PullRequest
0 голосов
/ 21 декабря 2018

Я пытаюсь создать синтаксический анализатор ANSI C, используя Superpower , но я много борюсь с некоторыми синтаксическими анализаторами, особенно с рекурсивными.

Например,Грамматика ANSI C, которую я придерживаюсь, определяет:

<unary-expression> ::= <postfix-expression>
                     | ++ <unary-expression>
                     | -- <unary-expression> 
                     | <unary-operator> <cast-expression>
                     | sizeof <unary-expression>
                     | sizeof <type-name>

<postfix-expression> ::= <primary-expression>
                       | <postfix-expression> [ <expression> ]
                       | <postfix-expression> ( {<assignment-expression>}* )
                       | <postfix-expression> . <identifier>
                       | <postfix-expression> -> <identifier>
                       | <postfix-expression> ++
                       | <postfix-expression> --

<primary-expression> ::= <identifier>
                       | <constant>
                       | <string>
                       | ( <expression> )

Существует ли общее правило для создания комбинаторов для такого рода выражений?

Грамматика, которой я следую, такова: ANSI C грамматика в BNF

...