精华内容
下载资源
问答
  • C语言BNF语法的图形化展示,收集自互联网,是深入研究C语言语法或者编译原理以及C语言编译器的好材料。
  • C语言BNF范式

    千次阅读 2015-02-09 20:51:07
    C89,bnf范式

    终结符号:
    所有‘ ‘内的符号以及
    int_const char_const float_const id string enumeration_const

    translation_unit    : external_decl
                | translation_unit external_decl
                ;
    external_decl       : function_definition
                | decl
                ;
    function_definition : decl_specs declarator decl_list compound_stat
                |       declarator decl_list compound_stat
                | decl_specs declarator     compound_stat
                |       declarator  compound_stat
                ;
    decl            : decl_specs init_declarator_list ';'
                | decl_specs            ';'
                ;
    decl_list       : decl
                | decl_list decl
                ;
    decl_specs      : storage_class_spec decl_specs
                | storage_class_spec
                | type_spec decl_specs
                | type_spec
                | type_qualifier decl_specs
                | type_qualifier
                ;
    storage_class_spec  : 'auto' | 'register' | 'static' | 'extern' | 'typedef'
                ;
    type_spec       : 'void' | 'char' | 'short' | 'int' | 'long' | 'float'
                | 'double' | 'signed' | 'unsigned'
                | struct_or_union_spec
                | enum_spec
                | typedef_name
                ;
    type_qualifier      : 'const' | 'volatile'
                ;
    struct_or_union_spec    : struct_or_union id '{' struct_decl_list '}'
                | struct_or_union   '{' struct_decl_list '}'
                | struct_or_union id
                ;
    struct_or_union     : 'struct' | 'union'
                ;
    struct_decl_list    : struct_decl
                | struct_decl_list struct_decl
                ;
    init_declarator_list    : init_declarator
                | init_declarator_list ',' init_declarator
                ;
    init_declarator     : declarator
                | declarator '=' initializer
                ;
    struct_decl     : spec_qualifier_list struct_declarator_list ';'
                ;
    spec_qualifier_list : type_spec spec_qualifier_list
                | type_spec
                | type_qualifier spec_qualifier_list
                | type_qualifier
                ;
    struct_declarator_list  : struct_declarator
                | struct_declarator_list ',' struct_declarator
                ;
    struct_declarator   : declarator
                | declarator ':' const_exp
                |       ':' const_exp
                ;
    enum_spec       : 'enum' id '{' enumerator_list '}'
                | 'enum'    '{' enumerator_list '}'
                | 'enum' id
                ;
    enumerator_list     : enumerator
                | enumerator_list ',' enumerator
                ;
    enumerator      : id
                | id '=' const_exp
                ;
    declarator      : pointer direct_declarator
                |   direct_declarator
                ;
    direct_declarator   : id
                | '(' declarator ')'
                | direct_declarator '[' const_exp ']'
                | direct_declarator '['     ']'
                | direct_declarator '(' param_type_list ')'
                | direct_declarator '(' id_list ')'
                | direct_declarator '('     ')'
                ;
    pointer         : '*' type_qualifier_list
                | '*'
                | '*' type_qualifier_list pointer
                | '*'           pointer
                ;
    type_qualifier_list : type_qualifier
                | type_qualifier_list type_qualifier
                ;
    param_type_list     : param_list
                | param_list ',' '...'
                ;
    param_list      : param_decl
                | param_list ',' param_decl
                ;
    param_decl      : decl_specs declarator
                | decl_specs abstract_declarator
                | decl_specs
                ;
    id_list         : id
                | id_list ',' id
                ;
    initializer     : assignment_exp
                | '{' initializer_list '}'
                | '{' initializer_list ',' '}'
                ;
    initializer_list    : initializer
                | initializer_list ',' initializer
                ;
    type_name       : spec_qualifier_list abstract_declarator
                | spec_qualifier_list
                ;
    abstract_declarator : pointer
                | pointer direct_abstract_declarator
                |   direct_abstract_declarator
                ;
    direct_abstract_declarator: '(' abstract_declarator ')'
                | direct_abstract_declarator '[' const_exp ']'
                |               '[' const_exp ']'
                | direct_abstract_declarator '['    ']'
                |               '[' ']'
                | direct_abstract_declarator '(' param_type_list ')'
                |               '(' param_type_list ')'
                | direct_abstract_declarator '('        ')'
                |               '('     ')'
                ;
    typedef_name        : id
                ;
    stat            : labeled_stat
                | exp_stat
                | compound_stat
                | selection_stat
                | iteration_stat
                | jump_stat
                ;
    labeled_stat        : id ':' stat
                | 'case' const_exp ':' stat
                | 'default' ':' stat
                ;
    exp_stat        : exp ';'
                |   ';'
                ;
    compound_stat       : '{' decl_list stat_list '}'
                | '{'       stat_list '}'
                | '{' decl_list     '}'
                | '{'           '}'
                ;
    stat_list       : stat
                | stat_list stat
                ;
    selection_stat      : 'if' '(' exp ')' stat
                | 'if' '(' exp ')' stat 'else' stat
                | 'switch' '(' exp ')' stat
                ;
    iteration_stat      : 'while' '(' exp ')' stat
                | 'do' stat 'while' '(' exp ')' ';'
                | 'for' '(' exp ';' exp ';' exp ')' stat
                | 'for' '(' exp ';' exp ';' ')' stat
                | 'for' '(' exp ';' ';' exp ')' stat
                | 'for' '(' exp ';' ';' ')' stat
                | 'for' '(' ';' exp ';' exp ')' stat
                | 'for' '(' ';' exp ';' ')' stat
                | 'for' '(' ';' ';' exp ')' stat
                | 'for' '(' ';' ';' ')' stat
                ;
    jump_stat       : 'goto' id ';'
                | 'continue' ';'
                | 'break' ';'
                | 'return' exp ';'
                | 'return'  ';'
                ;
    exp         : assignment_exp
                | exp ',' assignment_exp
                ;
    assignment_exp      : conditional_exp
                | unary_exp assignment_operator assignment_exp
                ;
    assignment_operator : '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<='
                | '>>=' | '&=' | '^=' | '|='
                ;
    conditional_exp     : logical_or_exp
                | logical_or_exp '?' exp ':' conditional_exp
                ;
    const_exp       : conditional_exp
                ;
    logical_or_exp      : logical_and_exp
                | logical_or_exp '||' logical_and_exp
                ;
    logical_and_exp     : inclusive_or_exp
                | logical_and_exp '&&' inclusive_or_exp
                ;
    inclusive_or_exp    : exclusive_or_exp
                | inclusive_or_exp '|' exclusive_or_exp
                ;
    exclusive_or_exp    : and_exp
                | exclusive_or_exp '^' and_exp
                ;
    and_exp         : equality_exp
                | and_exp '&' equality_exp
                ;
    equality_exp        : relational_exp
                | equality_exp '==' relational_exp
                | equality_exp '!=' relational_exp
                ;
    relational_exp      : shift_expression
                | relational_exp '<' shift_expression
                | relational_exp '>' shift_expression
                | relational_exp '<=' shift_expression
                | relational_exp '>=' shift_expression
                ;
    shift_expression    : additive_exp
                | shift_expression '<<' additive_exp
                | shift_expression '>>' additive_exp
                ;
    additive_exp        : mult_exp
                | additive_exp '+' mult_exp
                | additive_exp '-' mult_exp
                ;
    mult_exp        : cast_exp
                | mult_exp '*' cast_exp
                | mult_exp '/' cast_exp
                | mult_exp '%' cast_exp
                ;
    cast_exp        : unary_exp
                | '(' type_name ')' cast_exp
                ;
    unary_exp       : postfix_exp
                | '++' unary_exp
                | '--' unary_exp
                | unary_operator cast_exp
                | 'sizeof' unary_exp
                | 'sizeof' '(' type_name ')'
                ;
    unary_operator      : '&' | '*' | '+' | '-' | '~' | '!'
                ;
    postfix_exp     : primary_exp
                | postfix_exp '[' exp ']'
                | postfix_exp '(' argument_exp_list ')'
                | postfix_exp '('           ')'
                | postfix_exp '.' id
                | postfix_exp '->' id
                | postfix_exp '++'
                | postfix_exp '--'
                ;
    primary_exp     : id
                | const
                | string
                | '(' exp ')'
                ;
    argument_exp_list   : assignment_exp
                | argument_exp_list ',' assignment_exp
                ;
    const           : int_const
                | char_const
                | float_const
                | enumeration_const
                ;
    

    BNF范式百度百科

    展开全文
  • C语言BNF范式表示

    千次阅读 2011-09-25 16:53:10
    bison 的规则中,对文法的描述,使用的是BNF范式,这是一种...用BNF来描述C语言,比自然语言简练多了,当然,逻辑上会有点复杂,不过平时可以研究研究。 以下代码来自 http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf

    bison 的规则中,对文法的描述,使用的是BNF范式,这是一种上下文无关文法。

    用BNF来描述C语言,比自然语言简练多了,当然,逻辑上会有点复杂,不过平时可以研究研究。

    以下代码来自 http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf

    %token int_const char_const float_const id string enumeration_const
    %%
    
    translation_unit	: external_decl
    			| translation_unit external_decl
    			;
    external_decl		: function_definition
    			| decl
    			;
    function_definition	: decl_specs declarator decl_list compound_stat
    			|		declarator decl_list compound_stat
    			| decl_specs declarator		compound_stat
    			|		declarator 	compound_stat
    			;
    decl			: decl_specs init_declarator_list ';'
    			| decl_specs			';'
    			;
    decl_list		: decl
    			| decl_list decl
    			;
    decl_specs		: storage_class_spec decl_specs
    			| storage_class_spec
    			| type_spec decl_specs
    			| type_spec
    			| type_qualifier decl_specs
    			| type_qualifier
    			;
    storage_class_spec	: 'auto' | 'register' | 'static' | 'extern' | 'typedef'
    			;
    type_spec		: 'void' | 'char' | 'short' | 'int' | 'long' | 'float'
    			| 'double' | 'signed' | 'unsigned'
    			| struct_or_union_spec
    			| enum_spec
    			| typedef_name
    			;
    type_qualifier		: 'const' | 'volatile'
    			;
    struct_or_union_spec	: struct_or_union id '{' struct_decl_list '}'
    			| struct_or_union	'{' struct_decl_list '}'
    			| struct_or_union id
    			;
    struct_or_union		: 'struct' | 'union'
    			;
    struct_decl_list	: struct_decl
    			| struct_decl_list struct_decl
    			;
    init_declarator_list	: init_declarator
    			| init_declarator_list ',' init_declarator
    			;
    init_declarator		: declarator
    			| declarator '=' initializer
    			;
    struct_decl		: spec_qualifier_list struct_declarator_list ';'
    			;
    spec_qualifier_list	: type_spec spec_qualifier_list
    			| type_spec
    			| type_qualifier spec_qualifier_list
    			| type_qualifier
    			;
    struct_declarator_list	: struct_declarator
    			| struct_declarator_list ',' struct_declarator
    			;
    struct_declarator	: declarator
    			| declarator ':' const_exp
    			|		':' const_exp
    			;
    enum_spec		: 'enum' id '{' enumerator_list '}'
    			| 'enum'	'{' enumerator_list '}'
    			| 'enum' id
    			;
    enumerator_list		: enumerator
    			| enumerator_list ',' enumerator
    			;
    enumerator		: id
    			| id '=' const_exp
    			;
    declarator		: pointer direct_declarator
    			|	direct_declarator
    			;
    direct_declarator	: id
    			| '(' declarator ')'
    			| direct_declarator '[' const_exp ']'
    			| direct_declarator '['		']'
    			| direct_declarator '(' param_type_list ')'
    			| direct_declarator '(' id_list ')'
    			| direct_declarator '('		')'
    			;
    pointer			: '*' type_qualifier_list
    			| '*'
    			| '*' type_qualifier_list pointer
    			| '*'			pointer
    			;
    type_qualifier_list	: type_qualifier
    			| type_qualifier_list type_qualifier
    			;
    param_type_list		: param_list
    			| param_list ',' '...'
    			;
    param_list		: param_decl
    			| param_list ',' param_decl
    			;
    param_decl		: decl_specs declarator
    			| decl_specs abstract_declarator
    			| decl_specs
    			;
    id_list			: id
    			| id_list ',' id
    			;
    initializer		: assignment_exp
    			| '{' initializer_list '}'
    			| '{' initializer_list ',' '}'
    			;
    initializer_list	: initializer
    			| initializer_list ',' initializer
    			;
    type_name		: spec_qualifier_list abstract_declarator
    			| spec_qualifier_list
    			;
    abstract_declarator	: pointer
    			| pointer direct_abstract_declarator
    			|	direct_abstract_declarator
    			;
    direct_abstract_declarator: '(' abstract_declarator ')'
    			| direct_abstract_declarator '[' const_exp ']'
    			|				'[' const_exp ']'
    			| direct_abstract_declarator '['	']'
    			|				'['	']'
    			| direct_abstract_declarator '(' param_type_list ')'
    			|				'(' param_type_list ')'
    			| direct_abstract_declarator '('		')'
    			|				'('		')'
    			;
    typedef_name		: id
    			;
    stat			: labeled_stat
    			| exp_stat
    			| compound_stat
    			| selection_stat
    			| iteration_stat
    			| jump_stat
    			;
    labeled_stat		: id ':' stat
    			| 'case' const_exp ':' stat
    			| 'default' ':' stat
    			;
    exp_stat		: exp ';'
    			|	';'
    			;
    compound_stat		: '{' decl_list stat_list '}'
    			| '{'		stat_list '}'
    			| '{' decl_list		'}'
    			| '{'			'}'
    			;
    stat_list		: stat
    			| stat_list stat
    			;
    selection_stat		: 'if' '(' exp ')' stat
    			| 'if' '(' exp ')' stat 'else' stat
    			| 'switch' '(' exp ')' stat
    			;
    iteration_stat		: 'while' '(' exp ')' stat
    			| 'do' stat 'while' '(' exp ')' ';'
    			| 'for' '(' exp ';' exp ';' exp ')' stat
    			| 'for' '(' exp ';' exp ';'	')' stat
    			| 'for' '(' exp ';'	';' exp ')' stat
    			| 'for' '(' exp ';'	';'	')' stat
    			| 'for' '('	';' exp ';' exp ')' stat
    			| 'for' '('	';' exp ';'	')' stat
    			| 'for' '('	';'	';' exp ')' stat
    			| 'for' '('	';'	';'	')' stat
    			;
    jump_stat		: 'goto' id ';'
    			| 'continue' ';'
    			| 'break' ';'
    			| 'return' exp ';'
    			| 'return'	';'
    			;
    exp			: assignment_exp
    			| exp ',' assignment_exp
    			;
    assignment_exp		: conditional_exp
    			| unary_exp assignment_operator assignment_exp
    			;
    assignment_operator	: '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<='
    			| '>>=' | '&=' | '^=' | '|='
    			;
    conditional_exp		: logical_or_exp
    			| logical_or_exp '?' exp ':' conditional_exp
    			;
    const_exp		: conditional_exp
    			;
    logical_or_exp		: logical_and_exp
    			| logical_or_exp '||' logical_and_exp
    			;
    logical_and_exp		: inclusive_or_exp
    			| logical_and_exp '&&' inclusive_or_exp
    			;
    inclusive_or_exp	: exclusive_or_exp
    			| inclusive_or_exp '|' exclusive_or_exp
    			;
    exclusive_or_exp	: and_exp
    			| exclusive_or_exp '^' and_exp
    			;
    and_exp			: equality_exp
    			| and_exp '&' equality_exp
    			;
    equality_exp		: relational_exp
    			| equality_exp '==' relational_exp
    			| equality_exp '!=' relational_exp
    			;
    relational_exp		: shift_expression
    			| relational_exp '<' shift_expression
    			| relational_exp '>' shift_expression
    			| relational_exp '<=' shift_expression
    			| relational_exp '>=' shift_expression
    			;
    shift_expression	: additive_exp
    			| shift_expression '<<' additive_exp
    			| shift_expression '>>' additive_exp
    			;
    additive_exp		: mult_exp
    			| additive_exp '+' mult_exp
    			| additive_exp '-' mult_exp
    			;
    mult_exp		: cast_exp
    			| mult_exp '*' cast_exp
    			| mult_exp '/' cast_exp
    			| mult_exp '%' cast_exp
    			;
    cast_exp		: unary_exp
    			| '(' type_name ')' cast_exp
    			;
    unary_exp		: postfix_exp
    			| '++' unary_exp
    			| '--' unary_exp
    			| unary_operator cast_exp
    			| 'sizeof' unary_exp
    			| 'sizeof' '(' type_name ')'
    			;
    unary_operator		: '&' | '*' | '+' | '-' | '~' | '!'
    			;
    postfix_exp		: primary_exp
    			| postfix_exp '[' exp ']'
    			| postfix_exp '(' argument_exp_list ')'
    			| postfix_exp '('			')'
    			| postfix_exp '.' id
    			| postfix_exp '->' id
    			| postfix_exp '++'
    			| postfix_exp '--'
    			;
    primary_exp		: id
    			| const
    			| string
    			| '(' exp ')'
    			;
    argument_exp_list	: assignment_exp
    			| argument_exp_list ',' assignment_exp
    			;
    const			: int_const
    			| char_const
    			| float_const
    			| enumeration_const
    			;
    


    展开全文
  • c语言bnf总结

    千次阅读 2013-11-16 22:48:06
    注:不能说是自己的原创,只能说自己是总结了下而已 translation_unit : external_decl | translation_unit external_decl ;external_decl : function_definition | decl ;function_definition : decl_...
    注:不能说是自己的原创,只能说自己是总结了下而已
    translation_unit	: external_decl
    | translation_unit external_decl
    ;
    external_decl : function_definition
    | decl
    ;
    function_definition : decl_specs declarator decl_list compound_stat
    | declarator decl_list compound_stat
    | decl_specs declarator compound_stat
    | declarator compound_stat
    ;
    decl : decl_specs init_declarator_list ';'
    | decl_specs ';'
    ;
    decl_list : decl
    | decl_list decl
    ;
    decl_specs : storage_class_spec decl_specs
    | storage_class_spec
    | type_spec decl_specs
    | type_spec
    | type_qualifier decl_specs
    | type_qualifier
    ;
    storage_class_spec : 'auto' | 'register' | 'static' | 'extern' | 'typedef'
    ;
    type_spec : 'void' | 'char' | 'short' | 'int' | 'long' | 'float'
    | 'double' | 'signed' | 'unsigned'
    | struct_or_union_spec
    | enum_spec
    | typedef_name
    ;
    type_qualifier : 'const' | 'volatile'
    ;
    struct_or_union_spec : struct_or_union id '{' struct_decl_list '}'
    | struct_or_union '{' struct_decl_list '}'
    | struct_or_union id
    ;
    struct_or_union : 'struct' | 'union'
    ;
    struct_decl_list : struct_decl
    | struct_decl_list struct_decl
    ;
    init_declarator_list : init_declarator
    | init_declarator_list ',' init_declarator
    ;
    init_declarator : declarator
    | declarator '=' initializer
    ;
    struct_decl : spec_qualifier_list struct_declarator_list ';'
    ;
    spec_qualifier_list : type_spec spec_qualifier_list
    | type_spec
    | type_qualifier spec_qualifier_list
    | type_qualifier
    ;
    struct_declarator_list : struct_declarator
    | struct_declarator_list ',' struct_declarator
    ;
    struct_declarator : declarator
    | declarator ':' const_exp
    | ':' const_exp
    ;
    enum_spec : 'enum' id '{' enumerator_list '}'
    | 'enum' '{' enumerator_list '}'
    | 'enum' id
    ;
    enumerator_list : enumerator
    | enumerator_list ',' enumerator
    ;
    enumerator : id
    | id '=' const_exp
    ;
    declarator : pointer direct_declarator
    | direct_declarator
    ;
    direct_declarator : id
    | '(' declarator ')'
    | direct_declarator '[' const_exp ']'
    | direct_declarator '[' ']'
    | direct_declarator '(' param_type_list ')'
    | direct_declarator '(' id_list ')'
    | direct_declarator '(' ')'
    ;
    pointer : '*' type_qualifier_list
    | '*'
    | '*' type_qualifier_list pointer
    | '*' pointer
    ;
    type_qualifier_list : type_qualifier
    | type_qualifier_list type_qualifier
    ;
    param_type_list : param_list
    | param_list ',' '...'
    ;
    param_list : param_decl
    | param_list ',' param_decl
    ;
    param_decl : decl_specs declarator
    | decl_specs abstract_declarator
    | decl_specs
    ;
    id_list : id
    | id_list ',' id
    ;
    initializer : assignment_exp
    | '{' initializer_list '}'
    | '{' initializer_list ',' '}'
    ;
    initializer_list : initializer
    | initializer_list ',' initializer
    ;
    type_name : spec_qualifier_list abstract_declarator
    | spec_qualifier_list
    ;
    abstract_declarator : pointer
    | pointer direct_abstract_declarator
    | direct_abstract_declarator
    ;
    direct_abstract_declarator: '(' abstract_declarator ')'
    | direct_abstract_declarator '[' const_exp ']'
    | '[' const_exp ']'
    | direct_abstract_declarator '[' ']'
    | '[' ']'
    | direct_abstract_declarator '(' param_type_list ')'
    | '(' param_type_list ')'
    | direct_abstract_declarator '(' ')'
    | '(' ')'
    ;
    typedef_name : id
    ;
    stat : labeled_stat
    | exp_stat
    | compound_stat
    | selection_stat
    | iteration_stat
    | jump_stat
    ;
    labeled_stat : id ':' stat
    | 'case' const_exp ':' stat
    | 'default' ':' stat
    ;
    exp_stat : exp ';'
    | ';'
    ;
    compound_stat : '{' decl_list stat_list '}'
    | '{' stat_list '}'
    | '{' decl_list '}'
    | '{' '}'
    ;
    stat_list : stat
    | stat_list stat
    ;
    selection_stat : 'if' '(' exp ')' stat
    | 'if' '(' exp ')' stat 'else' stat
    | 'switch' '(' exp ')' stat
    ;
    iteration_stat : 'while' '(' exp ')' stat
    | 'do' stat 'while' '(' exp ')' ';'
    | 'for' '(' exp ';' exp ';' exp ')' stat
    | 'for' '(' exp ';' exp ';' ')' stat
    | 'for' '(' exp ';' ';' exp ')' stat
    | 'for' '(' exp ';' ';' ')' stat
    | 'for' '(' ';' exp ';' exp ')' stat
    | 'for' '(' ';' exp ';' ')' stat
    | 'for' '(' ';' ';' exp ')' stat
    | 'for' '(' ';' ';' ')' stat
    ;
    jump_stat : 'goto' id ';'
    | 'continue' ';'
    | 'break' ';'
    | 'return' exp ';'
    | 'return' ';'
    ;
    exp : assignment_exp
    | exp ',' assignment_exp
    ;
    assignment_exp : conditional_exp
    | unary_exp assignment_operator assignment_exp
    ;
    assignment_operator : '=' | '*=' | '/=' | '%=' | '+=' | '-=' | '<<='
    | '>>=' | '&=' | '^=' | '|='
    ;
    conditional_exp : logical_or_exp
    | logical_or_exp '?' exp ':' conditional_exp
    ;
    const_exp : conditional_exp
    ;
    logical_or_exp : logical_and_exp
    | logical_or_exp '||' logical_and_exp
    ;
    logical_and_exp : inclusive_or_exp
    | logical_and_exp '&&' inclusive_or_exp
    ;
    inclusive_or_exp : exclusive_or_exp
    | inclusive_or_exp '|' exclusive_or_exp
    ;
    exclusive_or_exp : and_exp
    | exclusive_or_exp '^' and_exp
    ;
    and_exp : equality_exp
    | and_exp '&' equality_exp
    ;
    equality_exp : relational_exp
    | equality_exp '==' relational_exp
    | equality_exp '!=' relational_exp
    ;
    relational_exp : shift_expression
    | relational_exp '<' shift_expression
    | relational_exp '>' shift_expression
    | relational_exp '<=' shift_expression
    | relational_exp '>=' shift_expression
    ;
    shift_expression : additive_exp
    | shift_expression '<<' additive_exp
    | shift_expression '>>' additive_exp
    ;
    additive_exp : mult_exp
    | additive_exp '+' mult_exp
    | additive_exp '-' mult_exp
    ;
    mult_exp : cast_exp
    | mult_exp '*' cast_exp
    | mult_exp '/' cast_exp
    | mult_exp '%' cast_exp
    ;
    cast_exp : unary_exp
    | '(' type_name ')' cast_exp
    ;
    unary_exp : postfix_exp
    | '++' unary_exp
    | '--' unary_exp
    | unary_operator cast_exp
    | 'sizeof' unary_exp
    | 'sizeof' '(' type_name ')'
    ;
    unary_operator : '&' | '*' | '+' | '-' | '~' | '!'
    ;
    postfix_exp : primary_exp
    | postfix_exp '[' exp ']'
    | postfix_exp '(' argument_exp_list ')'
    | postfix_exp '(' ')'
    | postfix_exp '.' id
    | postfix_exp '->' id
    | postfix_exp '++'
    | postfix_exp '--'
    ;
    primary_exp : id
    | const
    | string
    | '(' exp ')'
    ;
    argument_exp_list : assignment_exp
    | argument_exp_list ',' assignment_exp
    ;
    const : int_const
    | char_const
    | float_const
    | enumeration_const
    ;
    展开全文
  • C语言BNF(backus-Naur Form)文法

    千次阅读 2009-06-06 12:37:00
    program --> stmt* | {stmt*}stmt --> if-else | dowhile | whiledo |for-stmt| assignif-else --> if (exp) stmt else stmt dowhile --> do stmt while ( exp )whiledo --> do stmt w

    program --> stmt* | {stmt*}
    stmt --> if-else | dowhile | whiledo |for-stmt| assign
    if-else --> if (exp)  stmt  else  stmt 
    dowhile  --> do  stmt  while ( exp )
    whiledo  --> do  stmt  while ( exp )
    for-stmt  --> for ( exp, exp, exp )  stmt 
    assign --> id=exp
    exp --> [ factor ] op  factor | factor op [factor] | factor 
    op --> add | sub | mul | div | equ | grt | less | ge | le | ne
    factor --> exp | (exp) |  var | number | function
    展开全文
  • C语言(子集)的BNF文法描述

    热门讨论 2010-03-23 21:52:04
    C语言(子集)的BNF文法描述,自己感觉还是挺全的,基本上把C语言中该有部分都包含在内了,,,下了绝对不会后悔的。。。。
  • 哪位能告诉我,一个语言的自上而下文法(或自下而上文法)是由这个语言的标准化组织给出的,还是由 编译器设计者给出的?如标准化组织给出的C语言BNF到底是LL(1)文法还是LALR文法?
  • BNF来描述C语言,比自然语言简练多了,当然,逻辑上会有点复杂,不过平时可以研究研究。 以下代码来自 http://www.cs.man.ac.uk/~pjj/bnf/c_syntax.bnf %token int_const char_const float_const id string ...
  • C语言的历史

    2015-07-31 06:00:43
    C语言的历史C语言是我学习的第一门编程语言,现在还依稀记得初识C语言时的那种茫然...Algol 60引入了许多新的概念包括局部性、动态、递归和巴科斯-诺尔范式BNF,对后续程序设计语言产生了重大而深远的影响,成为包括C语
  • C语言中的数据类型及其转换详解 1. C语言中的数据类型  C语言中的类型按其组成可以分为... ANSI C99标准中类型定义的BNF语法如下图。  说明: typedef可以定义新数据类型,如typedef long int FOUR_BYTE
  • 1. C语言中的数据类型  C语言中的类型按其组成可以分为简单类型... ANSI C99标准中类型定义的BNF语法如下图。  说明: typedef可以定义新数据类型,如typedef long int FOUR_BYTE_INT,即定义了和long int一
  • dot语言的BNF

    2010-04-09 19:40:17
    最近在使用Graphviz工具作图,但是由于这个工具是C语言开发的,我打算把它移植到Java平台上,通过Java2D来渲染,绘制出静态的图片来。Graphviz的布局算法一大堆,也需要考虑移植过来。   Graphviz使用的一个DSL,...
  • 编译原理 C语言实现词法分析

    热门讨论 2011-05-14 00:48:46
    2、部分单词的BNF表示(可参考教材43页的状态转换图) <标识符>-> <字母><字母数字串> <字母数字串>-><字母><字母数字串>|<数字><字母数字串>| <下划线><字母数字串>|ε <无符号整数>-> <数字><数字串> <数字串>-> ...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型...
  • c语言cJson数组生成与解析

    千次阅读 2017-08-30 17:23:00
    char* CreatJsCustNo( BT_BNF_CUST *p, char *strPaperNO) { cJSON *pJsonArry,*pJsonsub; pJsonArry=cJSON_CreateArray(); /*创建数组*/ cJSON_AddItemToArray(pJsonArry,pJsonsub=...
  • 难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...
  • BNF_铽可喏_新浪博客

    2018-07-06 16:06:31
    比如:C语言的声明语句可以用BNF这样描述:  <声明语句> ::= <类型><标识符>; | <类型><标识符>[<数字>];  这一句中<声明语句>这个非终结符被定义成了两种形式(上面...
  •  授课时间:每周六晚上7点开始。每周一节。 授课方式:QQ群视频 授课群:融智技术C语言群(107876142) ...下载地址:http://pan.baidu.com/s/1bnf96pD 明明白白学C语言第二讲预告片 观看地址:http://v.youku.
  • 用扩充的BNF表示如下: ⑴<程序>::=begin<语句串>end ⑵<语句串>::=<语句>{;<语句>} ⑶<语句>::=<赋值语句> ⑷<赋值语句>::=ID:=<表达式> ⑸<表达式>::=<项>{+<项> | -<项>} ⑹<项>::=<因子>{*<因子> ...
  • 利用C语言编制递归下降分析程序,并对简单语言进行语法分析。 1、 待分析的简单语言的语法 用扩充的BNF表示如下: (1)<程序>::=begin<语句串>end (2)<语句串>::=<语句>{;<语句>} (3)<语句>::=<赋值语句...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
  • 文章目录C89文法1 预处理阶段1.1 词法分析1.2 语法分析2 编译阶段2.1 词法分析2.1.1 基本字符2.1.2 单词2.1.3 常数2.1.4 字符串2.2 语法分析2.2.1 式2.2.2 声明2.2.3 句2.2.4 总定义3 后记3.1 与C89的区别3.2 BNF...
  • 主要针对的是编译原理程序设计这门课的大作业所做的小项目,里边有完整的代码,以及使用说明,包括bnf范式。
  • 构造使用类C语言的脚本引擎(4)作者 :kevin_qing转贴请注明同上一章一样,语法分析部分也不准备使用yacc直接生成代码,而是只使用yacc的生成的分析表。BNF:%token ID IF ELSE SWITCH GOTO RETURN NUMBER STRING MAIN...

空空如也

空空如也

1 2 3
收藏数 55
精华内容 22
关键字:

c语言bnf

c语言 订阅