Несжатая, минимальная грамматика для языка программирования C

Языки программирования определяются с помощью грамматики, например, Java определяется в JLS, см. Здесь

Это минимальная "сжатая" грамматика, ни одна конструкция не используется дважды: результат - для меня - бесполезные грамматические описания, такие как MethodDeclaratorRest, который добавляется к MethodOrFieldDecl, как вы можете видеть здесь, я бы назвал его "минимальным, сжатым" подход"

MethodOrFieldDecl:
        Тип Идентификатор MethodOrFieldRest

MethodOrFieldRest:
        VariableDeclaratorRest
        MethodDeclaratorRest

MethodDeclaratorRest:
        FormalParameters {[]} [throws QualifiedIdentifierList] ( MethodBody |;)

В целом это нормально, но я хотел бы иметь грамматику, подобную следующей, где перечислены все необходимые данные типа MethodDeclaration, я бы назвал это "подходом сверху вниз":

MethodDeclaration:
   [Javadoc] {ExtendedModifier}
          []
        (Тип | void) Идентификатор (
        [ FormalParameter 
             {, FormalParameter } ]) {[ ] }
        [ throws TypeName {, TypeName } ] ( Block |;)

В поисках "грамматического подхода сверху вниз" я нашел сайт Пита Джинкса, используя "минимальный сжатый подход": здесь

Теперь я хотел бы получить грамматическое определение языка программирования C с использованием "нисходящего подхода".

2 ответа

Я не знаю о легкодоступном источнике для этой формы, но довольно просто взять BNF-версию грамматики в виде текстового файла и выполнить серию операций копирования-вставки для преобразования в эту форму.
http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf - это основная форма грамматики языка Си.

Одна проблема с "нисходящим подходом" заключается в том, что вам нужно выбрать уровень расширения, который будет полезен. Но действительно ли было бы полезно иметь одно определение translation_unit для всех этих деталей? Я согласен, что некоторые небольшие расширения диапазона могут быть полезны. Например, я думаю, что определение функции, разбитое по крайней мере до уровня оператора, может помочь в понимании.

С другой стороны, БНФ очень распространен, и умение читать эту форму - это навык, который стоит выучить...

Надеюсь это поможет

"Язык программирования C" Кернигана и Ритчи 2е (паб. Прентис-Холл) содержит грамматику (E)BNF... может быть также доступна версия, доступная онлайн.

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