文法分析相关笔记

描述语言语法结构的形式规则称为文法。文法是一个四元组,具体组成如图所示。

文法一共四类,若文法G=(Vn,Vt,P,S)的每个产生式α→β,均有α∈(Vn∪Vt)*,则称G为0型文法。在0型文法上加以扩展,则得到以下文法:

1型文法:G的任何产生式α→β(S→ε除外)均满足左部中文法符号的个数小于右部文法的符号的个数,又称为上下文有关文法,意味着对非终结符的替换考虑必须考虑上下文(eg:有生产式如:αAB→Βcb,假设该生产式符合1型文法的生产式,则非终结符A只有在左边为α右边为B的情况才能转化为C)。

2型文法:G的任何产生式如A→β,其中A∈Vn,β∈(Vn∪Vt)*,上下文无关文法;

3型文法:G的任何产生式如A→α或A→αB,其中A、B∈Vn,a∈Vt,正规式。

推导/归约

推导就是从文法的开始符号S出发,反复使用生产式(P),将生产式左部的非终结符替换成右部的文发符号序列,知道产生一个终结符的序列位置。如果说α→β∈p,γ、λ∈V*,则γαλ=>γβλ称为文法G的一个直接推导,并称γαλ可直接推导出γβλ,反之即是直接归约(推导的逆过程)。如果α0=>α1=>…=>αn,则α0=>αn。

句型/句子/语言

如果文法G的开始符号为S,即从S推导出的字符串为一个句型。若X是S的一个句型,且X∈Vt*,则X是文法G的一个句子。仅含终结符的句型是一个句子。从文法G的开始符号出发,能推导出的句子全体成为语言,记为L(G)。如果L(G1)==L(G2),则G1==G2.

时间: 2024-10-01 04:50:05

文法分析相关笔记的相关文章

Android在线升级相关笔记一(解析服务器版本与当前版本比较)

大概流程:Android客户端去访问服务器上的封装了版本号等信息的xml文件,对服务器上的版本和当前版本进行比较, 如果低于服务器的版本,则下载服务器上的新版软件,进行安装替换,完成升级. 一.首先用tomcat搭建服务器,用于开发测试. 下载tomcat请参考:http://blog.csdn.net/only_tan/article/details/25110625 1.在tomcat中新建自己的项目: \apache-tomcat-6.0.39\webapps 目录下新建自己的项目文件夹,

词法与文法分析程序

1.词法与文法分析程序功能:   主要语句:begin<语句串>end 输入单词串,以“#”结束,如果是文法正确的句子,则输出成功信息,打印“成功”,否则输出“错误”. 2.符号与种别码对照表: 单词符号 种别码 单词符号 种别码 begin 1 : 17 if 2 := 18 then 3 < 20 while 4 <= 21 do 5 <> 22 end 6 > 23 l(l|d)* 10 >= 24 dd* 11 = 25 + 13 ; 26 - 14

Linux 下面java编译环境相关笔记

1.如果自己编写的java文件依赖于很多第三方库(比如adir1和dir2下面都有很多jar包),加入自己的文件名叫foo.java那么可以用如下指令编译 javac -Djava.ext.dirs=dir1;dir2 foo.java 2.打包一个可执行的jar包的过程 a.写一个完整的java文件HelloWorld.java b.执行命令:javac HelloWorld.java生成HelloWorld.class c.执行命令 jar cvf HelloWorld.jar HelloW

软件安装相关笔记

程序的安装 rpm :redhat packagemanager早期 rpm is package manager现在 rpm:/var/lib/rpm数据库 rpm命名规则: 主包:bind-version-el5.i386.rpm 子包:bind-libs-version-el5.i386.rpm 格式: name-version-release.arch.rpm bind-major.minor.release.arch.rpm 主版本号:重大改进 次版本好:某个子功能发生重大改变 发行号

shell脚本相关笔记

书写一个shell脚本并使之执行的步骤: 1. 打开一个文件,以 #! bin/bash作为开头 2.在文件中写入一些正确可执行的shell语句 3.保存文件 4.更改文件权限,执行文件 一些小技巧: 如果想在系统中添加自己的命令,比如执行自己建好的shell脚本语句这样一条命令 实例: 1.创建文件cd.sh 内容为: #! bin/bash cd xxx/yyy/zzz 2.保存文件 3.执行文件./cd.sh 现在发现并没有能够打开我们想要打开的目录并进去. 原因是shell还有分父she

神经网络与深度学习相关笔记

说明: 本文是关于http://neuralnetworksanddeeplearning.com/的相关笔记 问题一:神经元在错误的值上饱和导致学习速率的下降 解决: 1.输出层: 因使用二次代价函数时,学习在神经元犯了明显错误时却比学习快接近真实值时慢, 可以使用交叉熵代价函数 使得在神经元犯明显错误时学习得更快 注: 输出层:具有交叉熵代价的S型(sigmoid)输出层或具有对数似然代价的柔性最大值(softmax)输出层 后者更加适用于那些需要将输出激活值解释为概率的场景 2.隐藏层:

Linux源代码情景分析读书笔记 物理页面的分配

函数 alloc_pages流程图 Linux源代码情景分析读书笔记 物理页面的分配,布布扣,bubuko.com

05 神经网络与深度学习相关笔记

说明: 本文主要是关于http://neuralnetworksanddeeplearning.com/的相关笔记 问题一:神经元在错误的值上饱和导致学习速率的下降 解决: 1.输出层: 因使用二次代价函数时,学习在神经元犯了明显错误时却比学习快接近真实值时慢, 可以使用交叉熵代价函数 使得在神经元犯明显错误时学习得更快 注: 输出层:具有交叉熵代价的S型(sigmoid)输出层或具有对数似然代价的柔性最大值(softmax)输出层 后者更加适用于那些需要将输出激活值解释为概率的场景 2.隐藏层

《大型网站技术架构:核心原理与案例分析》笔记03

<大型网站技术架构:核心原理与案例分析>笔记01 1.大型网站核心架构要素. 架构:"最高层次的规划,难以改变的决定."从这个角度而言,人生规划也是一种架构.选什么学校.学什么专业.进什么公司.找什么对象,过什么样的生活,都是自己人生的架构. 软件架构:"有关软件整体结构与组件的抽象描述,用于指导大型软件系统各个方面的设计." 五大要素:性能.可用性.伸缩性.扩展性和安全性. 2.性能测试指标: 响应时间:指应用执行一个操作需要的时间,包括从发出请求开始