编译原理(清华大学出版社)-- 文法概念以及符号和符号串
- 对Pascal程序来说,一个上下文无关文法,可以定义为符号串 A := BC
- 程序设计语义分为两类:静态语义和动态语义
文法的直观概念#
推导或产生句子#
例如,我是大学生
<句子> => <主语><谓语>
=> <代词><谓语>
=> 我<谓语>
=> 我<动词><直接宾语>
=> 我是<直接宾语>
=> 我是<名词>
=> 我是大学生
- 符号 => 的含义是,使用一条规则,代替其左端的某个符号,产生其右端的符号串
符号和符号串#
字母表#
- 字母表的元素的非空有穷集合,字母表中的元素称为符号
- 因此字母表也称为符号集
- 不同语言可以有不同的字母表
符号串#
- 由字母表中的符号组成的任何有穷序列称为符号串
- 例如,001110 是字母表{0, 1}的符号串;a,b,c,aaca是A={a,b,c}上的符号串
- 允许空符号串,不包含任何符号的符号串,用ε表示,其长度为0,即|ε|=0
符号串的运算#
- 符号串的头尾,固有头和固有尾
- 如果 z=xy 是一符号串,那么 x 是z的头,y是z的尾,如果x是非空的,那么y是固有尾;如果y是非空的,那么x是固有头
- 设z=abc,那么z的头是ε,a,ab和abc;除abc外,其他都是固有头;z的尾是ε,c,bc和abc;z的固有尾是ε,c和bc
- 省略写法:z=x...,z=...x...
符号串的连接#
- 设x和y是符号串,它们的连接xy是把y的符号写在x的符号之后得到的符号串
- 例如,设x=ST,y=abu,则它们的连接xy=STabu,看出|x|=2,|y|=3,|xy|=5,由于ε的含义,显然由 εx=xε=x
符号串的方幂#
- 设x是符号串,把x自身连接n次得到符号串z,即z=xx...xx,称为符号串x的方幂,写作z=xn,即把符号串x相继地重复写n次
- x0=ε,x1=ε,x2=xx,x3=xxx分别对应于n=0,1,2,3
- 对于n>0,有xn=xxn-1=xn-1x
符号串集合#
- 若集合A中的一切元素都是某字母表上的符号串,则称A为该字母表上的符号串集合
- 两个符号串集合A和B的乘积定义如下:AB={xy|x∈A且y∈B},即AB是满足x属于A,y属于B的所有符号串xy所组成的集合
- 例如,若A={a,b},B={c,d},则集合AB={ac, ad, bc, bd},对任意符号串x有εx=xε=x,所以有{ε}A=A{ε}=A
- 指定字母表∑之后,可以用∑*表示∑上所有有穷长的串的集合,例如∑={0,1},则∑*={ε,0,1,00,01,10,11,000,001,010,...},也可表示为字母表的方幂形式,∑*称为集合∑的闭包
- 而∑+=∑1∪∑2...∑n称为∑的正闭包,显然有 ∑*=∑0∪∑+,∑+=∑∑*=∑*∑
- ∑*具有可数的无穷数量的元素,若x是∑*中的元素,则表示为x∈∑*,否则x不属于∑*,对于所有的∑,有ε∈∑*
#
作者:BigBender
出处:https://www.cnblogs.com/BigBender/p/12168994.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!