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