mysql 上下文无关文法_精读《手写 SQL 编译器 - 文法介绍》

1 引言

文法用来描述语言的语法规则,所以不仅可以用在编程语言上,也可用在汉语、英语上。

2 精读

我们将一块语法规则称为 产生式,使用 “Left → Right” 表示任意产生式,用 “Left => Right” 表示产生式的推导过程,比如对于产生式:

E → i

E → E + E

我们进行推导时,可以这样表示:E => E + E => i + E => i + i + E => i + i + i

也有使用 Left : Right 表示产生式的例子,比如 ANTLR。BNF 范式通过 Left ::= Right 表示产生式。

举个例子,比如 SELECT * FROM table 可以被表达为:

S → SELECT * FROM table

当然这是最固定的语法,真实场景中,* 可能被替换为其他单词,而 table 不但可能有其他名字,还可能是个子表达式。

一般用大写的 S 表示文法的开头,称为开始符号。

终结符与非终结符

下面为了方便书写,使用 BNF 范式表示文法。

终结符就是语句的终结,读到它表示产生式分析结束,相反,非终结符就是一个新产生式的开始,比如:

::= SELECT FROM

::= [ , ]

::= [ , ]

所有 ::= 号左边的都是非终结符,所以

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值