[程序设计语言-实践之路]读书笔记(1)
2015-12-23 15:09
204 查看
语法:如何描述程序设计语言的结构规则,编译器如何识别给定输入程序的结构。
描述语言规则,依赖于正则表达式和上下文无关文法;确定给定的程序是如何按照这些规则构造起来的,依赖于扫描器和语法分析器。
如果一个字符串集合可以通过加入递归后的规则形式地定义,那么就称为它是一个上下文无关语言(
单词是构成程序的最基本元素,包括关键字、标识符、数、各种标点符号和其他符号。
indentifier_list -> identifier (, identifier)*
可以写成:
identifier_list -> identifier
identifier_list -> identifier_list, identifier
上下文无关文法里的一条规则称为一个产生式(备注:翻译成生成式会更好?),位于产生式左部的符号成为变量或者非终结符,多个产生式可以有相同的左部。构成文法导出的串的那些符号成为终结符,它们不能出现在产生式的左部。
最优推导(规范推导),给定表达式,在每一步都用某个产生式的右部代换掉位置在最右边的非终结符,形成最终的语法分析树。
某些串(表达式)可以生成多于一个的语法分析树,这种情况说明所用的语法存在歧异性
一个扫描器也就是一个识别某个程序设计语言单词的确定性的有限自动机(DFA),而一个语法分析器也就是一个识别语言的上下文无关的语法的下推自动机(PDA)。可以用正则表达式和
扫描器的工作准则是在每次调用中接受最长的可能单词。
扫描器可以借助某个扫描器生成器,让它从一集正则表达式自动构造出一个扫描器。从效果上看,正则表达式就像是一种针对很有限的问题领域(这里就是扫描)的说明性语言。
描述语言规则,依赖于正则表达式和上下文无关文法;确定给定的程序是如何按照这些规则构造起来的,依赖于扫描器和语法分析器。
如果一个字符串集合可以通过加入递归后的规则形式地定义,那么就称为它是一个上下文无关语言(
CFL),上下文无关语言由上下文无关文法(
CFG,有时被称为
Backus-Naur形式
BNF)定义,由语法分析器识别。
单词是构成程序的最基本元素,包括关键字、标识符、数、各种标点符号和其他符号。
indentifier_list -> identifier (, identifier)*
可以写成:
identifier_list -> identifier
identifier_list -> identifier_list, identifier
上下文无关文法里的一条规则称为一个产生式(备注:翻译成生成式会更好?),位于产生式左部的符号成为变量或者非终结符,多个产生式可以有相同的左部。构成文法导出的串的那些符号成为终结符,它们不能出现在产生式的左部。
最优推导(规范推导),给定表达式,在每一步都用某个产生式的右部代换掉位置在最右边的非终结符,形成最终的语法分析树。
某些串(表达式)可以生成多于一个的语法分析树,这种情况说明所用的语法存在歧异性
一个扫描器也就是一个识别某个程序设计语言单词的确定性的有限自动机(DFA),而一个语法分析器也就是一个识别语言的上下文无关的语法的下推自动机(PDA)。可以用正则表达式和
CFG自动地生成扫描器和语法分析器。比如
lex和
yacc
扫描器的工作准则是在每次调用中接受最长的可能单词。
扫描器可以借助某个扫描器生成器,让它从一集正则表达式自动构造出一个扫描器。从效果上看,正则表达式就像是一种针对很有限的问题领域(这里就是扫描)的说明性语言。
相关文章推荐
- stay hungry ,stay foolish!
- 云计算推动互联网金融技术性变革 打造专业安全的金融解决方案
- asp.net文件压缩,下载,物理路径,相对路径,删除文件
- 存储过程实现报表数据源的利弊分析
- 如何获取(GET)一杯咖啡——星巴克REST案例分析
- 第九章-----jsp标签
- 线上引流压测工具Meteor
- 手机自动化测试:Appium源码之API(2)
- Java数据结构和算法系列1--链表
- Xcode中使用Git进行代码版本控制
- Hibernate 参数设置一览表
- JVM内存区域
- 设计模式C++实现--观察者模式
- #Objective-C 之 省市区 (数组-字典-数组-字典-数组)
- Mongoose使用案例--让JSON数据直接入库MongoDB
- Dreamweaver
- php http请求
- 手机自动化测试:Appium源码之api(1)
- 手机自动化测试:Appium源码之api(1)
- 第八章------拦截器机制