Complete C Grammar
在Google上搜到的。虽然对C这种完整的语言的文法的复杂程度有所思想准备,但是刚看到的时候还是吓了一跳——what a complexity and a detailed specification!
相比起来,自己做编译实验用的文法就太太太太不值得一提了。当然,别人C的编译器都是N多大牛合作才整出来的,自己一个小猫没有能力更没有时间去实现全部C的功能。以下的文法就当作参考,自己再在原来的基础上扩展出一个化简后类C文法吧。
statement->
labeled_statement
compound_statement
expression_statement
selection_statement
iteration_statement
jump_statement
labeled_statement->
IDENTIFIER ':' statement
CASE constant_expression ':' statement
DEFAULT ':' statement
compound_statement->
'{' '}'
'{' statement_list '}'
'{' declaration_list '}'
'{' declaration_list statement_list '}'
declaration_list->
declaration
declaration_list declaration
statement_list->
statement
statement_list statement
expression_statement->
';'
expression ';'
selection_statement->
IF '(' expression ')' statement
IF '(' expression ')' statement ELSE statement
SWITCH '(' expression ')' statement
iteration_statement->
WHILE '(' expression ')' statement
DO statement WHILE '(' expression ')' ';'
FOR '(' expression_statement expression_statement ')' statement
FOR '(' expression_statement expression_statement expression ')' statement
jump_statement->
GOTO IDENTIFIER ';'
CONTINUE ';'
BREAK ';'
RETURN ';'
RETURN expression ';'
translation_unit->
external_declaration
translation_unit external_declaration
external_declaration->
function_definition
declaration
function_definition->
declaration_specifiers declarator declaration_list compound_statement
declaration_specifiers declarator compound_statement
declarator declaration_list compound_statement
declarator compound_statement
……
太多了,贴在这里浪费空间。参看以下两个页面吧:
C的BNF范式
C的YACC文法
Labels: Pallyc Project

0 Comments:
Post a Comment
<< Home