c语言 bnf,c语言的bnf

c语言 bnf,c语言的bnftokenint constchar constfloat constidstrin const translation unit external decl translation unitexternal decl external decl function definition decl function definition decl

%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 declaratorcompound_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 ‘| relational_exp ‘>’ shift_expression

| relational_exp ‘<=’ shift_expression

| relational_exp ‘>=’ shift_expression

;

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

;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231399.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 宠物社区小程序_宠物论坛哪个好

    宠物社区小程序_宠物论坛哪个好微信小程序宠物论坛6个人主页页面JS部分constdb=wx.cloud.database()Page({data:{openid:””,nickname:””,heads:””},onLoad:function(options){constopenid=options.idthis.setData({openid:openid})console.log(this.data.openid)d

    2022年10月7日
    2
  • 舵机抖动的解决方法

    舵机抖动的解决方法现象与原因原文链接:https://blog.csdn.net/zenghuanyu_big/article/details/78515309最近用arduino单片机,机械臂一直在不停的抖动。首先,需要知道舵机的使用方法,简单来说,就是给一定时间的高电平,舵机能转动在一定的角度。其实,你只需给舵机一次能转动在一定角度的高低电平,之后只需保持上电状态,理论上舵机能保持不动。但这样极易出现波动…

    2022年4月30日
    132
  • AndroidStudio入门基础(一)——基础布局

    AndroidStudio入门基础(一)——基础布局写在前面:上学期学习了Android,从一开始的什么都不懂到后来成功做出一个课程设计作品,回忆起来一路还是充满坎坷和辛酸泪的啊。遗忘是可怕的,为了防止以后把好不容易学到的东西忘得一干二净,我打算写一系列的AndroidStudio教程记录一些有用的知识点,当然,我会从最基础的地方写起,希望可以帮助到一些初学者~最后,如果时间和精力允许的情况下,我会一步步的还原我的课程设计,喵喵喵~(…

    2022年6月11日
    50
  • Java小项目实现——简易的登录系统实现

    Java小项目实现——简易的登录系统实现Java实现简易登录系统

    2022年5月25日
    42
  • Vue学习之v-model指令

    Vue学习之v-model指令Vue学习之v-model指令

    2022年4月23日
    57
  • Windows常用脚本合集

    Windows常用脚本合集Windows常用脚本合集问题描述因为使用windows一些常用命令需要手动操作,比如启用ssh链接,要先使用win+r输入cmd再输入ssh,有时候甚至ssh命令容易忘记,还需要查看帮助,所以特此集合了一些常用命令软硬件描述操作系统windows10笔记本电脑使用方法创建文件xx.bat再【常用shell】中把代码复制到xx.bat中保存即可,然后双击使用常用shell禁用笔记本电脑自带的键盘,这个功能可以防止使用外接键盘时误触笔记本自带键盘。需要重启电脑后生效,慎重%1m

    2022年7月15日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号