Языки программирования определяются через грамматику, например. 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, используя "подход сверху вниз".