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


相关推荐

  • Css3 阴影详解

    Css3 阴影详解box-shadow阴影语法:box-shadow:none|<shadow>[,<shadow>]*box-shadow:none/*设置none是表示没有

    2022年7月1日
    21
  • 2021 3.1 idea 破解激活码[在线序列号][通俗易懂]

    2021 3.1 idea 破解激活码[在线序列号],https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月19日
    141
  • 批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)

    批量梯度下降法(BGD)、随机梯度下降法(SGD)和小批量梯度下降法(MBGD)梯度下降法作为机器学习中较常使用的优化算法,其有着三种不同的形式:批量梯度下降(BatchGradientDescent)、随机梯度下降(StochasticGradientDescent)以及小批量梯度下降(Mini-BatchGradientDescent)。其中小批量梯度下降法也常用在深度学习中进行模型的训练。接下来,我们将对这三种不同的梯度下降法进行理解。  为了便于理解,…

    2022年9月11日
    0
  • 语音合成(speech synthesis)两种方法-拼接合成和参数合成

    语音合成(speech synthesis)两种方法-拼接合成和参数合成TTS(TextToSpeech)是一个序列到序列的匹配问题。处理TTS的方法一般分为两部分:文本分析和语音合成(speechsynthesis)。文本分析可能采用NLP方法。而在语音合成(speechsynthesis)上有两种主要的方法:一种是非参数化的,基于样例的方法,如拼接语音合成;另一种是参数化的、基于模型的方法,如统计参数语音合成。拼接语音合成:基于统计规则的大语料库拼接语音合成系统超大规模音库制作:语料设计;音库录制;精细切分;韵律标注;优点:音质最佳,录音和合成音质差异小

    2022年6月26日
    23
  • 用js来实现那些数据结构03(数组篇03-排序及多维数组)

    终于,这是有关于数组的最后一篇,下一篇会真真切切给大家带来数据结构在js中的实现方式。那么这篇文章还是得啰嗦一下数组的相关知识,因为数组真的太重要了!不要怀疑数组在JS中的重要性与实用性。这篇文章分为

    2022年3月25日
    39
  • Windows Azure AppFabric应用程序

    Windows Azure AppFabric应用程序WindowsAzureAppFabric团队在大步前进。在上个月发布服务总线队列和Topics到CTP之后,这个团队刚刚发布AppFabric应用程序到CTP。AppFabric应用程序简化了将服务组成一个应用程序的任务,但实际上,它似乎重写了平台作为服务的意义(PaaS)

    2022年10月16日
    0

发表回复

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

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