Левые рекурсивные определения (БНФ)

Я пытаюсь создать парсер 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

0 ответов

Другие вопросы по тегам