上下文无关文法产生的语言都可以用正则文法来描述_c语言结构体默认值

上下文无关文法产生的语言都可以用正则文法来描述_c语言结构体默认值对于文法G=(V,T,S,P),如果产生式的形式如下:A->xBA->x其中A,B属于V,x属于T*,则称为右线性文法;相似的,如果产生式的形式如下:A->BxA->x则称为左线性文法。右线性文法和左线性文法统称为正则文法。正则表达式的表达能力等价于正则文法,正则表达式的定义如下:字母表中的任意字母是正则表达式,空串和空集也是正则表达式;如果r,s…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

对于文法G=(V, T, S, P),如果产生式的形式如下:

A -> xB

A -> x

其中A, B属于V,x属于T*,则称为右线性文法;相似的,如果产生式的形式如下:

A -> Bx

A -> x

则称为左线性文法。右线性文法和左线性文法统称为正则文法。

正则表达式的表达能力等价于正则文法,正则表达式的定义如下:

字母表中的任意字母是正则表达式,空串和空集也是正则表达式;

如果r, s是正则表达式,那么r|s, rs, r*, (r)也是正则表达式。

正则表达式的扩展:

r+:一个或多个重复

.  :任意字符

[a-z]:字符范围

[^abc]:不在给定集合中的任意字符

r?:可选

正则表达式只能使用终结符(字母表中的字符),因而很容易变得复杂又难懂,实际中,经常使用正则描述,正则描述允许使用非终结符定义表达式,很像EBNF,但是它限制在未完全定义之前,不能使用非终结符,也就是说不允许递归或自嵌套。

像正则表达式的表达能力等价于正则文法一样,BNF范式的表达能力等价于上下文无关文法。BNF是“Backus Naur Form”的缩写。John Backus和Peter Naur首次引入一种形式化符号来描述给定语言的语法。

BNF的元符号:

::=表示“定义为”,有的书上用–>|表示“或者”< >尖括号用于括起非终结符。

BNF的扩展EBNF:

可选项被括在元符号“[”和“]”中

重复项(零个或者多个)被括在元符号“{”和“}”中

仅一个字符的终结符用引号(“)引起来,以和元符号区别开来

上述操作符不是严格限定的,有的人喜欢直接使用扩展正则表达式的操作符描述EBNF。除了方便表达以外,引入EBNF的另一个主要原因是为了更紧密地把文法映射到递归下降分析程序的真实代码。当需要手动构造归下降分析程序的时候,通常把上下文无关文法改写为EBNF是必需的。

如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:

U =>* xUy

那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。

如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:

U =>* xUy

那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。

BNF的扩展EBNF:

可选项被括在元符号“[”和“]”中

重复项(零个或者多个)被括在元符号“{”和“}”中

仅一个字符的终结符用引号(“)引起来,以和元符号区别开来

上述操作符不是严格限定的,有的人喜欢直接使用扩展正则表达式的操作符描述EBNF。除了方便表达以外,引入EBNF的另一个主要原因是为了更紧密地把文法映射到递归下降分析程序的真实代码。当需要手动构造归下降分析程序的时候,通常把上下文无关文法改写为EBNF是必需的。

如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:

U =>* xUy

那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。

如上所述,上下文无关文法的递归性,对其分析方法也有很大影响。首先,用作识别这些结构的算法必须使用递归调用或显式管理的分析栈。其次,用作表示语言语义结构的数据结构现在也必须是递归的(通常是一颗分析树),而不再是线性的(如同用于词法和记号中的一样)了。

在程序设计语言中,通常用正则表达式描述词法规则。但是正则表示式的表达能力有限,她无法表达括号配对等语法形式,因而,需要引入表达能力更强的上下文无关文法。编译程序中常用正则文法表示词法,用上下文无关文法表示语法。那么程序语言中那些属于词法哪些属于语法呢?一个简单的办法,把所有能用正则文法表示的规则成为词法,即我们用尽可能的使用正则文法表示更多的东西,那些无法用正则表示式表示的成为句法,如C语言中的{ statement; }语法形式。语言中有些规则使用上下文无关文法仍然无法描述,例如变量的定义在使用之前,类型匹配等等,这些通常称为(静态)语义,它们在编译程序的静态语义检查阶段进行检测。

如果一个上下文无关文法G不是自嵌套或自递归的,即不存在如下推导:

U =>* xUy

那么L(G)是正则语言。自嵌套的上下文无关文法不一定是正则语言。事实上,一个上下文无关文法是严格的,既不可能由正则文法产生,当且仅当该语言的一切文法都是自嵌套的。

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

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

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


相关推荐

  • 解决ORA-01008: 并非所有变量都已绑定(详解问题所在)

    解决ORA-01008: 并非所有变量都已绑定(详解问题所在)将executeUpdate(sql)或executeQuery(sql)括号中的sql删除。问题代码:publicstaticvoidmain(String[]args)throwsException{Connectionconnection=null;Statementstatement=null;connection=DBHelper.getConnection();Stringsql=”up

    2025年9月28日
    2
  • 详解LK光流法(含金字塔多层光流),反向光流法(附代码)「建议收藏」

    详解LK光流法(含金字塔多层光流),反向光流法(附代码)「建议收藏」LK光流法可用来跟踪特征点的位置。比如在img1中的特征点,由于相机或物体的运动,在img2中来到了不同的位置。后面会称img1为Template(T),img2为I。光流法有个假设:灰度不变假设:同一个空间点的像素灰度值,在各图像中是不变的,也就是说T中特征点处的灰度,到了I中仍然是一样的灰度。这就要求光照恒定,物体反射恒定,是个很强的假设。现在要估计的是运动偏移量[dx,dy],也就是光流。仅用一个点无法解,一般会取一个窗口内的像素,考虑它们具有相同的运动。用最小二乘法来解像素的运动如下:

    2022年7月23日
    25
  • unable to access android sdk add-on list解决方案[通俗易懂]

    unable to access android sdk add-on list解决方案[通俗易懂]AndroidStudio报错unabletoaccessandroidsdkadd-onlist解决方案问题原因解决方案1.配置Proxy2.跳过检测在AndroidStudio的安装目录下,找到\bin\idea.properties在尾行添加disable.android.first.run=true,表示初次启动不检测SDK跳过后设置AndroidStuido模式下载SDK总结问题更新AndroidStudio4.2版本,启动后报错如下原因AS启动之后,会检查默

    2022年7月19日
    25
  • potplayer自定义加速播放[通俗易懂]

    potplayer自定义加速播放[通俗易懂]进入选项如下图如下图,其中第三步输入快捷键时使用键盘,如冲突会有响铃和提示,建议使用图中ctrl+方向键一定要点击应用

    2022年5月21日
    54
  • k8s 开源_jdk源码剖析手册

    k8s 开源_jdk源码剖析手册createfunc main() { #随机数 rand.Seed(time.Now().UnixNano()) #创建一个新的命令行对象 command := cmd.NewDefaultKubectlCommand() #日志 logs.InitLogs() defer logs.FlushLogs() #真正执行的命令行 if err := command.Execute(); err != nil { os.Exit(1) }}# NewDefaultKubectl

    2022年8月11日
    4
  • JDK5什么是新的堵塞队列线程(四)

    JDK5什么是新的堵塞队列线程(四)

    2022年1月12日
    42

发表回复

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

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