Несжатая, минимальная грамматика для языка программирования 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... может быть также доступна версия, доступная онлайн.