Несжатая, минимальная грамматика для языка программирования C - PullRequest
0 голосов
/ 11 ноября 2010

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

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

MethodOrFieldDecl:
        Type Identifier MethodOrFieldRest

MethodOrFieldRest:
        VariableDeclaratorRest
        MethodDeclaratorRest

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

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

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

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

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

0 голосов
/ 12 апреля 2011

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

...