学习笔记-BNF、EBNF、ABNF语法格式描述规范

目标是确认一些c/cpp的语法细节,需要看cpp语法定义文件。
考虑从c的语法定义文件开始确认。
考虑实现一个简化的语言定义和编译器,为后续的实际需求做自定义扩展。

参考网页:
https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form
中文参考:https://www.jianshu.com/p/15efcb0c06c8
C11 : ISO/IEC 9899:2011
http://www.open-std.org/jtc1/sc22/WG14/www/docs/n1570.pdf
6.4 Lexical elements 开始
EBNF定义: https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf
EBNF图示定义:https://www.ics.uci.edu/~pattis/misc/ebnf2.pdf

每种语言都可能对标准BNF做了扩展,但基本都比较好理解。
BNF:Backus–Naur Form 巴科斯-诺尔范式,无确切规范
EBNF: Extended BNF 扩展的,无标准
ABNF :augmented BNF 增强型,适合解析,不适合阅读

典型的元语言BNF,用来描述语法的一种形式体系。

::=   被定义为,EBNF中为=
""    引号中的字符本身,EBNF中也支持单引号''
double_quote  "引号用double_quote转义
|,      串接,中间无任何字符
;      EBNF中为终止,类似c语言
<>  必选项
[]  可选,EBNF中单个?也表示可选
{}   重复
()    分组,优先级,类似c语言
...:表示各种列举或省略的代码片断;示例:a...z 
"..." 表示 由 双引号 " 包围起来的任意字符
(*...*):注释,EBNF
?...?:特殊序列,EBNF
-:排除,除去,EBNF

ISO/IEC 14977 标准给出的ENBF符号表,共12种符号
=,;|[]{}()“”‘’??-
https://www.cl.cam.ac.uk/~mgk25/iso-14977.pdf

用 EBNF范式 来描述 EBNF 的语法

生成式 = 生成式名 '=' [ 表达式 ] [';'] ;
表达式 = 选择项 { '|' 选择项 } ;
选择项 = 条目 { 条目 } ;
条目   = 生成式名 | 标记 [ '…' 标记 ] | 分组 | 可选项 | 重复项 ;
分组   = '(' 表达式 ')' ;
可选项 = '[' 表达式 ']' ;
重复项 = '{' 表达式 '}' ;

用EBNF描述xml,基于chatgpt。可能并不准确,只是示例。
完整的在https://www.w3.org/TR/2004/REC-xml-20040204/#sec-notation

Document ::= Prolog Element
Prolog ::= '<?xml' Version Encoding? '?>'
Version ::= 'version' Eq ("'1.0'" | "'1.1'")
Encoding ::= 'encoding' Eq ('"' EncName '"' | "'" EncName "'")
Eq ::= '='
Element ::= '<' Name AttrList? '>' Content '</' Name '>'
AttrList ::= Attribute+
Attribute ::= Name Eq ('"' Value '"' | "'" Value "'")
Content ::= (Element | Data)*
Data ::= (characters not including '<' or '&')
Name ::= (Letter | '_') (NameChar)*
NameChar ::= Letter | Digit | '.' | '-' | '_' | ':'
Letter ::= [A-Za-z]
Digit ::= [0-9]
EncName ::= [A-Za-z] [A-Za-z0-9._-]*

BNF变体列表:http://www.cs.man.ac.uk/~pjj/bnf/ebnf.html
其中,C语言为Intermediate风格BNF变体。
Intermediate BNF说明:https://www.cl.cam.ac.uk/~mgk25/iso-14977-paper.pdf
C语言语法定义的字体说明:
字体说明
C语言语法示例:
语法示例

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/75184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高可用Kuberbetes部署Prometheus + Grafana

概述 阅读官方文档部署部署Prometheus Grafana GitHub - prometheus-operator/kube-prometheus at release-0.10 环境 步骤 下周官方github仓库 git clone https://github.com/prometheus-operator/kube-prometheus.git git checkout release-0.10 进入工作目录 cd kube…

【linux命令讲解大全】100. Linux常用文件传输命令详解

文章目录 cd概要主要用途参数选项返回值例子关于切换到上一个工作目录的说明关于 CDPATH关于 cdable_vars注意 从零学 python cd 切换用户当前工作目录。 概要 cd [-L|[-P [-e]]] [dir] 主要用途 切换工作目录至 dir。其中 dir 的表示法可以是绝对路径或相对路径。若参数 …

二、[mysql]之Explain讲解与实战

目录 一、了解Explain1.Explain介绍 二、Explain相关字段1.partitions2.filtered3.SHOW WARNINGS命令 三、Explain比较重要字段1.id2.select_type3.table4.type5.possible_keys6.key7.key_len8.ref9.rows10.Extra 四、索引优化实战&#xff08;遵循原则&#xff09;1.全值匹配2…

Linux 系统中查看和停止删除定时任务

文章目录 linux系统定时任务之crontab什么是crontabcrond 在 Linux 系统中查看当前配置的定时任务停止和删除定时任务的方法cron定时任务控制防火墙恢复 linux系统定时任务之crontab 什么是crontab 在Linux或类Unix系统中&#xff0c;通常使用crontab命令在指定的时间执行一个…

python关闭指定进程以excel为例

先说下环境&#xff1a; Excel版本&#xff1a; Python2.7.13和Python3.10.4并存。 2、打开两个excel工作簿 看进程是这样的&#xff1a; 3、用python编程kill进程 # -*- coding: utf-8 -*- import os proc_nameEXCEL.EXE if __name__ __main__:os.system(taskkill /im {} /…

【vue2第十六章】VueRouter 声明式导航(跳转传参)、路由重定向、页面未找到的提示页面404、vue路由模式设置

声明式导航(跳转传参) 在一些特定的需求中&#xff0c;跳转路径时我们是需要携带参数跳转的&#xff0c;比如有一个搜索框&#xff0c;点击搜索的按钮需要跳转到另外一个页面组件&#xff0c;此时需要把用户输入的input框的值也携带到那页面进行发送请求&#xff0c;请求数据。…

python 随机生成emoji表情

问答板块觉得比较有意思的问题 当时搜了些网上的发现基本都不能用&#xff0c;不知道是版本的问题还是咋的就开始自己研究 python随机生成emoji 问题的产生解决官网文档数据类型实现思路实现前提&#xff1a;具体实现&#xff1a; 其他常见用法插入 Emoji 表情&#xff1a;解析…

【ES6】Class中this指向

先上代码&#xff1a; 正常运行的代码&#xff1a; class Logger{printName(name kexuexiong){this.print(hello ${name});}print(text){console.log(text);} }const logger new Logger(); logger.printName("kexueixong xiong");输出&#xff1a; 单独调用函数p…

【Java基础】学习笔记5 - 包装类与集合介绍

目录 第四阶段包装类StringStringBufferArraysSystemCollectionArrayListVector 第四阶段 包装类 装箱拆箱以及手动自动 package chapter4;public class Pack {public static void main(String[] args) {// 自动装箱int a 100;Integer aa a;// 自动拆箱int b aa;// 手动装…

搭建自己的OCR服务,第二步:PaddleOCR环境安装

PaddleOCR环境安装&#xff0c;遇到了很多问题&#xff0c;根据系统不同问题也不同&#xff0c;不要盲目看别人的教程&#xff0c;有的教程也过时了&#xff0c;根据实际情况自己调整。 我这边目前是使用windows 10系统CPU python 3.7 搭建。 熟悉OCR的人应该知道&#xff0…

合宙Air724UG LuatOS-Air LVGL API控件-标签 (Label)

标签 (Label) 标签是 LVGL 用来显示文字的控件。 示例代码 label lvgl.label_create(lvgl.scr_act(), nil) lvgl.label_set_recolor(label, true) lvgl.label_set_text(label, "#0000ff Re-color# #ff00ff words# #ff0000 of\n# align the lines …

时间管理类书籍阅读笔记

背景 这段时间看了时间管理方面的书籍&#xff0c;大部分和早晨时间利用相关。之所以有了利用早晨时间的想法&#xff0c;是某天下班后&#xff0c;感觉很疲惫&#xff0c;什么都不想做&#xff0c;于是就打了一晚上游戏&#xff0c;然后第二天重复着这样的生活。 突然意识到…

基于Spring、SpringMVC、Mybatis的超市管理系统

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SSM的超市订单管理系统,java项目。 …

微信小程序替换双重循环渲染中报错图片

当微信小程序中的图片加载失败导致报错时&#xff0c;你可以通过以下步骤替换报错图片&#xff1a; 确保你有一个用于替换报错图片的备用图片&#xff0c;可以是与原始图片相同尺寸和格式的另一张图片。 在相关的.wxml文件中&#xff0c;找到显示报错图片的 <image> 标签…

AWK语言第二版 2.2选择

2.2 选择 Awk的基本结构组成&#xff0c;就是用一系列的样式选择出感兴趣的行&#xff0c;并对其进行操作。这样的程序很多都是一次性的&#xff0c;敲出来之后就用几次。然而&#xff0c;有些程序很有用&#xff0c;如果每次用之前都要重新敲一遍代码&#xff0c;就太麻烦了&…

Linux修改fs.inotify.max_user_watches(“外部文件更改同步可能很慢”和“当前的 inotify(7) 监视限制太低”)

fs.inotify.max_user_watches 参数是用于控制 Linux 内核中 inotify 子系统的观察者数量限制。inotify 是一种文件系统监控机制&#xff0c;它可以用于检测文件或目录的变化&#xff0c;并在事件发生时通知相关的应用程序。 具体而言&#xff0c;fs.inotify.max_user_watches …

B站:AB test [下]

Focus在&#xff1a;AB Test结束后&#xff0c;如何进行显著性检验&#xff1f;&#xff08;以判断改动是否有效果&#xff09; 引入&#xff1a;Z检验和T检验 而T检验适用于 n<30 的小样本 值得注意的是&#xff1a;统计上显著并不意味着现实中显著&#xff01; e.g. 加速…

尚硅谷大数据项目《在线教育之离线数仓》笔记008

视频地址&#xff1a;尚硅谷大数据项目《在线教育之离线数仓》_哔哩哔哩_bilibili 目录 P123 P124 P125 P126 P127 P128 P129 P123 Apache Superset是一个现代的数据探索和可视化平台。它功能强大且十分易用&#xff0c;可对接各种数据源&#xff0c;包括很多现代的大数…

设计模式的六大设计原则

一、单一职责原则 一个类只负责一个单一明确的职责。如果一个类同时负责多个职责&#xff0c;来自职责A的需求变更引起的修改可能会导致职责B的功能发生故障。 比如说一个类T原本是符合单一职责的&#xff0c;后来因为某种原因或者是需求变更了&#xff0c;需要将职责P细分为…

医院空调冷热源设计方案VR元宇宙模拟演练的独特之处

作为一个备受关注的技术-元宇宙&#xff0c;毋庸置疑的是&#xff0c;因为建筑本身契合了时尚、前卫、高端、虚拟、科幻、泛在、协作、互通等元素特征&#xff0c;因此在建筑行业更需要元宇宙&#xff0c;以居民建筑环境冷热源设计来说&#xff0c;元宇宙会打破既定的现实阻碍和…