上下文无关文法产生的语言都可以用正则文法来描述_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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • SpringBoot集成拦截器[通俗易懂]

    SpringBoot集成拦截器[通俗易懂]集成拦截器登录验证为例添加拦截器public class LoginInterceptor implements HandlerInterceptor { private Logger log = LoggerFactory.getLogger(getClass()); //Controller逻辑执行之前 @Override public boolean preHandle(HttpServletRequest request, HttpServletRe

    2022年8月9日
    5
  • mac 亿图11 激活码-激活码分享

    (mac 亿图11 激活码)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月27日
    622
  • android菜鸟教程_菜鸟软件下载app

    android菜鸟教程_菜鸟软件下载app相对布局是通过相对定位的方式让控件出现在布局任意位置; 在相对布局中如果不指定控件摆放的位置,那么控件都会被默认放在RelativeLayout的左上角。因此要先指定第一个控件的位置,其他控件为该位置的相对位置;RelativeLayout属性:(使用相对布局属性需要先指定控件的id,其他控件根据该控件的id,来确定相对于该控件的相对位置)示例:xmlversion=”1

    2025年6月22日
    5
  • 数字图像处理标准图像Lena的故事「建议收藏」

    数字图像处理标准图像Lena的故事「建议收藏」熟悉图像处理或者压缩的工程师、研究人员和学生经常在他们的实验或者项目任务里使用“Lenna”或者“Lena”的图像。Lenna图像已经成为被广泛使用的测试图像。今天,Lenna图像的使用被认为是数字图像历史上最重要的事件之一。然而,很少有人看过原始的图像并知道完整的关于Lenna的故事。这里3sBeta将综合收集的材料对此做一个详细的梳理。。。1.Lena图像的来源在数

    2022年6月19日
    31
  • 香港科技大学赵天寿课题组_科大国盾科创板申请通过了吗

    香港科技大学赵天寿课题组_科大国盾科创板申请通过了吗2021年12月11日,“香港科大-越秀集团”百万奖金国际创业大赛·2021年度总决赛(点击下划线内容了解决赛信息)圆满落幕。在年度总决赛现场,【香港科大科创产业联盟】也正式成立。香港科技…

    2022年9月18日
    2
  • gridbagconstraints什么意思_gridbaglayout布局

    gridbagconstraints什么意思_gridbaglayout布局GridBagConstraints的具体参考为:http://download.oracle.com/technetwork/java/javase/6/docs/zh/api/java/awt/GridBagConstraints.html下面是构造函数:publicGridBagConstraints(intgridx,…

    2025年9月5日
    4

发表回复

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

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