Левые рекурсивные определения (БНФ)
Я пытаюсь создать парсер 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