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

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

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

MethodOrFieldDecl:
        Type Identifier MethodOrFieldRest

MethodOrFieldRest:
        VariableDeclaratorRest
        MethodDeclaratorRest

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

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

MethodDeclaration:
   [ Javadoc ] { ExtendedModifier }
          [  ]
        ( Type | void ) Identifier (
        [ FormalParameter 
             { , FormalParameter } ] ) {[ ] }
        [ throws TypeName { , TypeName } ] ( Block | ; )

В поисках «подхода к грамматике сверху вниз» я нашел веб-сайт Пита Джинкса, использующего «минимальный, сжатый подход»: здесь

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


person autobiographer    schedule 11.11.2010    source источник
comment
Используемый синтаксис довольно стандартный; это называется BNF (см. en.wikipedia.org/wiki/Backus%E2%80). %93Naur_Form). Это позволяет относительно легко определять синтаксические анализаторы.   -  person Oliver Charlesworth    schedule 11.11.2010
comment
спасибо за ответ, я знаю bnf, но, как вы видите, есть несколько решений для определения грамматики языка. два подхода используют две разные версии, но первая мне не подойдет. если бы я потратил много времени, я мог бы перейти от минимальной грамматики к неминимальной. проблема: 1. нет времени, 2. не могу быть уверен, что ничего не пропустил   -  person autobiographer    schedule 11.11.2010
comment
Думаю, мой вопрос заключается в том, почему первая версия вам не подойдет; что за приложение к грамматике и зачем оно тебе во второй форме? Вы пытаетесь построить парсер? И если да, то почему типичная форма БНФ не подходит?   -  person John Bode    schedule 11.11.2010


Ответы (2)


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

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

С другой стороны, BNF очень распространен, и научиться читать эту форму — это навык, которому стоит научиться...

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

person caveman    schedule 11.11.2010

«Язык программирования C» Кернигана и Ритчи 2e (паб. Prentice-Hall) содержит грамматику (E) BNF ... также может быть версия, доступная в Интернете.

person rbarraud    schedule 12.04.2011