编程语言的词法结构是一套基础性的规则,用来描述你如何编写这门语言。作为语法的基础,它规定了变量名是怎么样的,如何写注释,以及语句之间是如何区分的。本节用很短的篇幅来介绍javascript的词法结构。1.字符集javascript程序是用Unicode字符集编写的,Unicode是ASCII和Lat...
分类:
编程语言 时间:
2015-01-23 07:15:52
阅读次数:
249
0、前言
最近项目的流程逐渐清晰,但是很多关键性的技术没有掌握,也只能一步一步摸索。
由于要做基于数据流分析的静态代码分析,所以前端的工作如:词法分析、语法分析必不可少。Yacc和Lex什么的就不再考虑了,查了一天的资料,发现两款比较适合,一款是Java下的ANTLR,另一款是专门做PHP AST生成的PHP-Parser。
ANTLR是编译原理领域比较著名的工具了,相对于Yacc和Lex,...
分类:
Web程序 时间:
2015-01-22 23:24:55
阅读次数:
2784
词法分析的任务: 首先,从阶段上来看,编译器可分为若干个中间阶段: 典型的,可以包含为一个前端,一个后端。前端接收源程序产生一个中间表示,后端接收表示继续生成一个目标程序。所以,前端处理的是跟源语言有关的属性,后端处理跟目标机器有关的属性。 更细节的,前端可以划分为若干个阶段: ...
分类:
其他好文 时间:
2015-01-22 12:40:41
阅读次数:
163
变量和有类型的标记
下一步扩展计算器来处理具有单个字母名字的变量,因为只有26个字母 (目前只关心小写字母),所以我们能在26个条目的数组(称它为vbltable)中存储变量。
为了使得计算器更加有用,也可以扩展它来处理多个表达式(每行一个)和使用浮点值。
具有变量和实值的计算器词法ch3-03.l
%{
#include "ch3-03.tab.h"
#include
exter...
分类:
其他好文 时间:
2015-01-22 11:11:34
阅读次数:
128
预处理就是在进行编译的第一遍词法扫描和语法分析之前所作的工作。说白了,就是对源文件进行编译前,先对预处理部分进行处理,然后对处理后的代码进行编译。这样做的好处是,经过处理后的代码,将会变的很精短。 关于预处理命令中的文件包含(#include),宏定义(#define),书上已经有了详细的说明,在....
分类:
其他好文 时间:
2015-01-17 20:50:17
阅读次数:
123
第一章:词法陷阱编译器中负责将程序分解为一个一个符号的部分,一般称为“词法分析器”。例如,对于语句:if ( x == big ) big = x ;它的第一个符号是C语言关键字if,紧接着下一个符号是左括号,在下一个符号是标识符x,在下一个是大于号,在下一个是标识符big,以此类推。在C语言中,符...
分类:
其他好文 时间:
2015-01-14 14:02:37
阅读次数:
110
Closuresarefunctionsthatrefertoindependent(free)variables.闭包是以静态方式/词法方式进行存储所有父作用域的一个函数在JavaScript高级程序设计里面通过一个createComparisonFunction()函数和这个函数的作用域链之间的...
分类:
编程语言 时间:
2015-01-12 20:57:34
阅读次数:
457
符号表
列举单词表的方式虽然简单但是不全面,如果在词法分析程序运行时可以构建一个单词表,那么就可以在添加新的单词时不用修改词法分析程序。
下面示例便利用符号表实现,即在词法分析程序运行时从输入文件中读取声明的单词时允许动态的声明单词。声明以词性的名字开始,后面跟着要声明的单词。
添加符号表可以完全的改变词法分析程序,不必在词法分析程为每个要匹配的单词放置独立的模式,只要有一个匹配任意单词的模...
分类:
其他好文 时间:
2015-01-12 17:40:10
阅读次数:
217
算法1:根据Regex构建NFA - McNaughton-Yamada-Thompson算法输入:字母表∑上的一个正则表达式r。输出:一个接受L(r)的NFA N。方法:首先对r进行语法分析,分解出组成它的子表达式。构建NFA的规则分为基本规则和归纳规则。基本规则:处理不包含运算符的子表达式。 ....
分类:
其他好文 时间:
2015-01-11 06:11:58
阅读次数:
391
Python之闭包闭包(Closure)是词法闭包(Lexical Closure)的简称,是引用了自由变量的函数。这个被引用的自由变量将和这个函数一同存在,即使已经离开了创造它的环境也不例外。所以,有另一种说法认为闭包是由函数和与其相关的引用环境组合而成的实体。闭包的一个例子:def counte...
分类:
编程语言 时间:
2015-01-09 18:48:44
阅读次数:
240