C语言文法(BNF)

C 语言文法 ( C Language Grammar ) 【代码】C 语言文法 ( C Language Grammar ) 阅读详情

C语言文法的巴克斯范式(BNF):

 

program ::= external_declaration | program external_declaration
 
external_declaration ::= function_definition | declaration
 
function_definition ::= type_specifier declarator compound_statement
 
type_specifier ::= VOID | CHAR | INT | FLOAT
 
declarator ::= pointer direct_declarator | direct_declarator
 
pointer ::= '*' | '*' pointer
 
direct_declarator ::=  IDENTIFIER | direct_declarator’[‘ ‘]’
	| direct_declarator ’[’ constant_expression ’]’
	| IDENTIFIER '(' parameter_list ')'
	| IDENTIFIER '('')'
	|direct_declarator‘,’identifier_list
 
identifier_list ::= IDENTIFIER | identifier_list ',' IDENTIFIER
 
constant_expression ::= conditional_expression
 
parameter_list ::=   parameter_declaration 
	| parameter_list ',' parameter_declaration

parameter_declaration ::= declaration_specifiers IDENTIFIER
 
compound_statement ::=  '{' '}' | '{' statement_list '}' 
	| '{' declaration_list statement_list '}'
 
declaration_list ::= declaration | declaration_list declaration
 
declaration ::= init_declarator | init_declarator_list ',' init_declarator
 
init_declarator ::= declarator | declarator '=' initializer
 
initializer ::=  assignment_expression | '{' initializer_list '}' 
	| '{' initializer_list ',' '}'
 
initializer_list ::= initializer | initializer_list ',' initializer
 
statement_list ::= statement | statement_list statement
 
statement ::=  compound_statement
	| expression_statement
	| selection_statement
	| iteration_statement
	| jump_statement
 
expression_statement ::= ';' | expression ';'
 
selection_statement ::= IF '(' expression ')' statement
	| IF '(' expression ')' statement ELSE statement
 
iteration_statement ::= WHILE '(' expression ')' statement
	| FOR '(' expression_statement expression_statement ')' statement
	| FOR '(' expression_statement expression_statement expression ')' statement
 
jump_statement ::= CONTINUE ';'  | BREAK ';'  | RETURN ';' | RETURN expression ';'
 
expression ::= assignment_expression | expression ',' assignment_expression
 
assignment_expression ::= conditional_expression
	| unary_expression assignment_operator assignment_expression
 
conditional_expression ::= logical_or_expression
	| logical_or_expression '?' expression ':' conditional_expression
 
logical_or_expression ::= logical_and_expression
	| logical_or_expression OR_OP logical_and_expression
 
logical_and_expression ::= inclusive_or_expression
	| logical_and_expression AND_OP inclusive_or_expression
 
inclusive_or_expression ::= exclusive_or_expression
	| inclusive_or_expression '|' exclusive_or_expression
 
exclusive_or_expression ::= and_expression
	| exclusive_or_expression '^' and_expression
 
and_expression ::= equality_expression
	| and_expression '&' equality_expression
 
equality_expression ::= relational_expression
	| equality_expression EQ_OP relational_expression
	| equality_expression NE_OP relational_expression
 
relational_expression ::= shift_expression
	| relational_expression '<' shift_expression
	| relational_expression '>' shift_expression
	| relational_expression LE_OP shift_expression
	| relational_expression GE_OP shift_expression
 
shift_expression ::= additive_expression
	| shift_expression LEFT_OP additive_expression
	| shift_expression RIGHT_OP additive_expression
 
additive_expression ::= multiplicative_expression
	| additive_expression '+' multiplicative_expression
	| additive_expression '-' multiplicative_expression
 
multiplicative_expression ::= cast_expression
	| multiplicative_expression '*' cast_expression
	| multiplicative_expression '/' cast_expression
	| multiplicative_expression '%' cast_expression
 
cast_expression ::= unary_expression | '(' type_name ')' cast_expression
 
unary_expression ::= postfix_expression
	| INC_OP unary_expression
	| DEC_OP unary_expression
	| unary_operator cast_expression
	| SIZEOF unary_expression
	| SIZEOF '(' type_name ')'
 
postfix_expression ::= primary_expression
	| postfix_expression '[' expression ']'
	| postfix_expression '(' ')'
	| postfix_expression '(' argument_expression_list ')'
	| postfix_expression '.' IDENTIFIER
	| postfix_expression PTR_OP IDENTIFIER
	| postfix_expression INC_OP
	| postfix_expression DEC_OP
 
primary_expression ::= IDENTIFIER
	| CONSTANT
	| STRING_LITERAL
	| '(' expression ')'
 
argument_expression_list ::= assignment_expression
	| argument_expression_list ',' assignment_expression
 
unary_operator ::= '&'| '*'| '+'| '-'| '~'| '!'
 
assignment_operator ::= '='| MUL_ASSIGN| DIV_ASSIGN| MOD_ASSIGN| ADD_ASSIGN| SUB_ASSIGN| LEFT_ASSIGN
	| RIGHT_ASSIGN| AND_ASSIGN| XOR_ASSIGN| OR_ASSIGN
 
storage_class_specifier::= TYPEDEF| EXTERN| STATIC| AUTO| REGISTER
 
struct_or_union_specifier ::= struct_or_union IDENTIFIER '{' struct_declaration_list '}'
	| struct_or_union '{' struct_declaration_list '}'
	| struct_or_union IDENTIFIER
 
struct_or_union::=STRUCT| UNION
 
struct_declaration_list::=struct_declaration
	| struct_declaration_list struct_declaration
 
struct_declaration::=specifier_qualifier_list struct_declarator_list ';'

specifier_qualifier_list::=type_specifier specifier_qualifier_list
	| type_specifier
	| type_qualifier specifier_qualifier_list
	| type_qualifier
 
struct_declarator_list::=struct_declarator
	| struct_declarator_list ',' struct_declarator
 
struct_declarator::= declarator
	| ':' constant_expression
	| declarator ':' constant_expression
 
enum_specifier::=ENUM '{' enumerator_list '}'
	| ENUM IDENTIFIER '{' enumerator_list '}'
	| ENUM IDENTIFIER
 
enumerator_list::=enumerator
	| enumerator_list ',' enumerator
 
Enumerator::=IDENTIFIER
	| IDENTIFIER '=' constant_expression
 
type_qualifier::=CONST | VOLATILE
 
type_qualifier_list::=type_qualifier | type_qualifier_list type_qualifier
 
parameter_type_list::=parameter_list | parameter_list ',' ELLIPSIS
 
parameter_list::=: parameter_declaration | parameter_list ',' parameter_declaration
 
type_name::=specifier_qualifier_list | specifier_qualifier_list abstract_declarator
 
abstract_declarator::=pointer | direct_abstract_declarator
	| pointer direct_abstract_declarator
 
direct_abstract_declarator::='(' abstract_declarator ')'
	| '[' ']'
	| '[' constant_expression ']'
	| direct_abstract_declarator '[' ']'
	| direct_abstract_declarator '[' constant_expression ']'
	| '(' ')'
	| '(' parameter_type_list ')'
	| direct_abstract_declarator '(' ')'
	| direct_abstract_declarator '(' parameter_type_list ')'
 
labeled_statement::=IDENTIFIER ':' statement
	| CASE constant_expression ':' statement
	| DEFAULT ':' statement

参考网页:

C语言文法 - Flowersea - 博客园

c语言的bnf总结 注:不能说是自己的原创,只能说自己是总结了下而已 translation_unit : external_decl | translation_unit external_decl ;external_decl : function_definition | decl ;function_definition : decl_specs declarator decl_list 阅读详情

相关推荐

编译原理核心:文法与语言如何驱动编译器前端工作

在计算机科学中,编译原理是理解代码如何从高级语言转换为机器指令的基础学科。其核心在于形式语言理论,特别是文法与语言的概念,它们为描述编程语言的语法结构提供了严谨的数学框架。文法定义了语言的构造规则,而语言则是所有符合该规则的句子集合。根据乔姆斯基谱系,文法被分为0型到3型四种类型,其中2型上下文无关文法和3型正则文法在编译器构建中具有极高的技术价值。前者是语法分析器的基础,用于识别程序的结构;后者则驱动词法分析器,负责将源代码字符流拆分为有意义的单词。理解这些原理,不仅能帮助开发者深入掌握IDE语法高亮、错

weixin_30617737的博客 325

C语言文法

<程序> →<外部声明>|<程序><外部声明> <外部声明> →<函数定义>|<声明> <函数定义> → <类型说明符><声明符><复合语句> <类型说明符> →<VOID>|<CHAR>|<INT>|<FL...

weixin_30835933的博客 158

C语言 子集 的BNF文法描述

C语言(子集)的BNF文法描述,自己感觉还是挺全的,基本上把C语言中该有部分都包含在内了,,,下了绝对不会后悔的。。。。

C语言的BNF范式表示

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

xiaoxiyu的专栏 1万+

ZYNQ Linux环境下PS端I2C驱动OV5640摄像头全流程解析

本文详细解析了在ZYNQ Linux环境下,通过PS端I2C驱动OV5640摄像头的完整流程。内容涵盖从Vivado硬件配置、PetaLinux系统构建、设备树节点添加,到用户空间I2C编程与寄存器配置实战,并提供了关键的调试技巧与常见问题排查方法,帮助开发者快速实现嵌入式视觉应用的传感器配置。

vulkan6gpu的博客 853

SAP CEWB 高效批量调整工艺路线与BOM的实战指南

本文详细介绍了SAP CEWB工具在批量调整工艺路线与BOM中的高效应用。通过实战案例和操作指南,帮助制造业企业快速掌握批量修改技巧,显著提升工作效率,避免手工操作带来的错误和耗时。特别适合需要频繁更新工艺路线和BOM的企业用户。

weixin_42524708的博客 396

基于C语言的文法分析

用枚举Type来定义calculator.c中出现的所有词法单元的类型, 共13种, 从文件中读到的所有有意义字符/字符串都会被分成如下几类而文件中的语句会被分割成 token 的形式,token 中仅包含名字和类型(type), 其定义为对于变量, name中存储的为其名字, 对于数字, name存储的为其字符串形式 合法的变量名为: ([a-z]|[A-Z])+(_|[a-z]|[A-Z]|[0-9]) 合法数字形式为: ([0-9]*)(.[0-9]+)?

毕业作品网站 873

用FPGA驱动WS2812B点阵,手把手教你实现动态文字显示(附完整Verilog代码)

本文详细介绍了如何使用FPGA驱动WS2812B点阵实现动态文字显示,包括硬件连接、Verilog代码实现和动态效果设计。通过精确的时序控制和数据处理,读者可以掌握FPGA与WS2812B的交互技术,并实现炫酷的显示效果。附完整Verilog代码,适合硬件爱好者和工程师参考实践。

weixin_30482383的博客 667

C BNF grammar

转载地址:http://lists.canonical.org/pipermail/kragen-hacks/1999-October/000201.html The C grammar in K&R 2nd Ed is fairly simple, only about 5 pages. Here it is, translated to BNF. Here ( ) gro...

weixin_34037173的博客 81

Eclipse在Mac上报错JNI_CreateJavaVM?可能是你的JDK架构搞错了(附Adoptium JDK下载指南)

本文深入解析了Mac(尤其是Apple Silicon芯片)上Eclipse启动时出现“JNI_CreateJavaVM”错误的根本原因,即JDK架构(aarch64与x86_64)不匹配。文章提供了详细的诊断步骤,并推荐通过下载并配置Eclipse Adoptium提供的aarch64版本JDK来彻底解决问题,同时附上清晰的配置指南。

weixin_29065659的博客 320

Blender学习笔记——制作向量场

#下载Blender - UE4 - FGA Vector Field Editor插件的压缩包,Github上的下载地址如下:https://github.com/isathar/Blender_UE4_VectorFieldEditor #下载并解压后将FGA VectorFields文件夹复制到C:\Program Files\Blender Foundation\Blender 2.83\2.83\scripts\addons目录下,此步骤可根据blender安装的位置自行调整,只要放入addon

wychao2020的博客 1722

类C语言的 BNF(backus-Naur Form)文法

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

跑上岸晒太阳的鱼滴空间 2572

以太网_RGMII接口与GMII接口的转化_03

RGMII接口转GMII接口!

weixin_42499230的博客 377

实验四(二)实现一门语言的语法分析器

代码地址 Github (二)实现一门语言的语法分析器 一、实验目的 通过本次实验,加深对语法分析的理解,学会编制语法分析器。 二、实验任务 用C或JAVA语言编写一门语言的语法分析器。 三、实验内容 (1)语言确定:C-语言,其定义在《编译原理及实践》附录A中。也可选择其它语言,不过要有该语言的详细定义(可仿照C-语言)。一旦选定,不能更改,因为要在以后继续实现编译器的

博客 3499

【图像超分】论文精读:SRConvNet: A Transformer-Style ConvNet for Lightweight Image Super-Resolution

本文提出了一种轻量级图像超分辨率重建方法SRConvNet,结合了卷积神经网络和Transformer的优势。针对传统Transformer计算复杂度高的问题,设计了傅立叶调制注意力(FMA)替代自注意力机制,通过区域频率空间调制实现高效的全局依赖建模;同时引入动态混合层(DML),采用混合尺度动态卷积结合通道拆分机制增强局部特征提取。实验表明,SRConvNet在计算效率和参数数量上显著优于现有轻量级超分方法,同时保持了优异的重建性能。该方法为移动端部署提供了有效的解决方案,在精度与复杂度间取得了良好平衡

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 806

【AI智能体】Coze 打通MySql实现数据报表展示应用搭建详解

Coze 打通MySql实现数据报表展示应用搭建详解

congge 3857

编译原理------语法分析器C/C++代码实现

一、实验目的 编制一个递归下降分析程序,实现对词法分析程序所提供的单词序列的语法检查和结构分析。 二、实验内容 利用C语言编制递归下降分析程序,并对简单语言进行语法分析。 2.1 待分析的简单语言的语法 用扩充的BNF表示如下: ⑴<程序>::=begin<语句串>end ⑵<语句串>::=<语句>{;<语句>} ⑶&lt...

你好,明天,,的博客 4万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

编译原理 语法分析程序

编译原理实验三 语法分析程序第一部分、 学习经典的语法分析器一、实验目的二、实验任务三、实验内容1.选择一个编译器,掌握它的语法分析程序。2.阅读语法分析源程序。尤其要求对相关函数与重要变量的作用与功能进行稍微详细的描述。3.测试语法分析器。对TINY语言要求输出测试程序的字符形式的抽象语法树。(手工或编程)画出图形形式的抽象语法树。第二部分——实现一门语言的语法分析器(3学时)一、实验目的二、实验任务三、系统设计1.语言确定2.完成C-语言的BNF文法到EBNF文法的转换。3.为每一个将要写成递归下降函数

weixin_43973089的博客 7204

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

BNF范式简介

巴科斯范式(英语:Backus Normal Form,缩写为 BNF),又称为巴科斯-诺尔范式(英语:Backus-Naur Form,也译为巴科斯-瑙尔范式、巴克斯-诺尔范式),是一种用于表示上下文无关文法的语言,上下文无关文法描述了一类形式语言。它是由约翰·巴科斯(John Backus)和彼得·诺尔(Peter Naur)首先引入的用来描述计算机语言语法的符号集。 尽管巴科斯

big_snail的专栏 4310

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

实验三 语法分析的C语言实现

实验三语法分析的C语言实现一、实验目的加深对语法分析器工作过程的理解;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法分析。

weixin_42172526的博客 390

制表符输出语法分析器的格式

题目 一、实验目的 通过本次实验,加深对语法分析的理解,学会编制语法分析器。 二、实验任务 用C或C++语言编写一门语言的语法分析器。 三、实验内容 (1)语言确定:C-语言,其定义在《编译原理及实践》附录A中。也可选择其它语言,不过要有该语言的详细定义(可仿照C-语言)。一旦选定,不能更改,因为要在以后继续实现编译器的其它部分。鼓励自己定义一门语言。也可选择TINY语言,但需要使用与TINY现有语法分析代码不同的分析算法实现,并在实验报告中写清原理。 (2)完成C-语言的BNF文法到EBNF文法的转换。通

m0_45020051的博客 364

关于bison

yacc(Yet Another Compiler Compiler),是一个经典的生成语法分析器的工具。yacc生成的编译器主要是用C语言写成的语法解析器(Parser),需要与词法解析器Lex一起使用,再把两部份产生出来的C程序一并编译。 Bison 基本上与Yacc兼容,并且在 Yacc 之上进行了改进。它经常和Flex(一个自动的词法分析器生成器)一起使用。 此软件的源代码是可...

haigand的专栏 1058

SCAU 编译原理 实验二 语法分析

输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“suc-cess”,否则输出“error”。利用C语言编制递归下降分析程序,并对简单语言进行语法分析。(7)<因子)::= IDI NUMI(<表达式>)(6)<项)::=<因子)|*<因子)|/<因子>(5)<表达式)::=<项)|+<项)|-<项》(1)<程序)::=begin<语句串>end。(2)<语句串)::=<语句>|;(4)<赋值语句)::=ID:=(表达式)(3)<语句)::=<赋值语句》输出 success。

csdn3043663729的博客 796

acwj 编译器实践 Part 5:为语言引入 print 语句——BNF 语法、关键字扫描与代码生成分层

本部分在 acwj(A Compiler Writing Journey)系列编译器项目第 5 章([05_Statements](https://link.gitcode.com/i/d63665113897931215e68b2ca652206c))的基础上,为这门实验性 C 语言子集引入第一种"真正的"语句:`print` 打印语句。文章将以 BNF 语法为骨架,逐步讲解词法扫描器如何识别关

gitblog_00240的博客 219
上一篇: 两个有助于理解Common Lisp宏的例子
下一篇: Common LISP实现简单的深度优先搜索
Alexabc3000
博客等级 码龄20年 156粉丝 128原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alexabc3000

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值