atitit.词法分析的实现token attilax总结

atitit.词法分析的实现token attilax总结

1. 词法分析(英语:lexical analysis)跟token 1

1.1. 扫描器 2

2. 单词流必须识别为保留字,标识符(变量),常量,操作符(运算符 )和界符五大类 2

2.1. 操作符(运算符 )::: 3

2.2. 4.界符:“;”分号,“{}”大括号,单引号,双引号
3

3.  如何进行词法分析? 3

3.1. 使用Fsm状态机(自动机) 3

4. 词法分析器框架选型 4

4.1. 语法分析器 4

4.2. lex 4

4.3. flex词法分析器
4

4.4. 1     ANTLR简介 5

4.5. antlr韩式javacc 5

4.6. Antlr 简介
6

5. 参考 6

1. 词法分析(英语:lexical analysis)跟token

计算机科学中将字符序列转换为单词(Token)序列的过程。进行词法分析的程序或者函数叫作词法分析器(Lexical analyzer,简称Lexer),也叫扫描器(Scanner)。词法分析器一般以函数的形式存在,供语法分析器调用。

这里的单词是一个字符串,是构成源代码的最小单位。从输入字符流中生成单词的过程叫作单词化(Tokenization),在这个过程中,词法分析器还会对单词进行分类。

词法分析器通常不会关心单词之间的关系(属于语法分析的范畴),举例来说:词法分析器能够将括号识别为单词,但并不保证括号是否匹配。

词法分析(lexical analysis)或扫描(scanning)是编译器的第一个步骤。词法分析器读入组成源程序的字符流,并且将它们组织成有意义的词素(lexeme)的序列,并对每个词素产生词法单元(token)作为输出。

简单的来说,词法分析就是将源程序(可以认为是一个很长的字符串)读进来,并且“切”成小段(每一段就是一个词法单元 token),每个单元都是有具体的意义的,例如表示某个特定的关键词,或者代表一个数字。而这个词法单元在源程序中对应的文本,就叫做“词素”。

token就是把程序的语句进行类似分词得到的单词。

作者::老哇的爪子Attilax艾龙,EMAIL:[email protected]

转载请注明来源: http://blog.csdn.net/attilax

1.1. 扫描器

词法分析的第一阶段即扫描器,通常基于有限状态自动机。 扫描器能够识别其所能处理的单词中可能包含的所有字符序列(单个这样的字符序列即前面所说的“语素”)。例如“整数”单词可以包含所有数字字符序列。很多 情况下,根据第一个非空白字符便可以推导出该单词的类型,于是便可逐个处理之后的字符,直到出现不属于该类型单词字符集中的字符(即最长一致原则)。

尽管在某些情况下需要手工编写词法分析器,一般情况下词法分析器都用自动化工具生成。

HTMLTokenizer的处理,它是利用有穷状态自动机来完成词法解析的,把解码后的字符串作为输入,输出一个个的HTMLToken的。

致可以知道了HTMLToken中其实就是保存了输入流中被分出的几段数据,这些数据会用于构建DOM的节点。这些数据抽象为类型,数据,属性结合的一条记录。

,HTML的词法分析就是利用HTMLTokenizer中的状态机来实现的。而HTML的语法分析则是根据HTMLToken的类型,以及 HTMLTreeBuilder中的状态机来识别的,然后根据识别到的类型情况,来创建一个具体的Node,并在创建该Node后,把其插入到DOM树的 相应的位置上,完成语法分析,生成一个DOM树作为语法树。

2. 单词流必须识别为保留字,标识符(变量),常量,操作符(运算符 )和界符五大类

2.1. 操作符(运算符 ):::

() [] -> .


? :


条件


由右向左


() [] -> .


括号(函数等),数组,两种结构成员访问


由左向右


,


逗号(顺序)


+ -


加,减


由左向右

括号,纺括号

参考

编译器DIY——词法分析 - GodLike - 博客频道 - CSDN.NET.htm

2.2. 4.界符:“;”分号,“{}”大括号,单引号,双引号

3.  如何进行词法分析?

A: 一种很简单的思路就是,用一个状态保存在处理到各个字符时的状态,比如是标识符或者数字或者空格等等,直到状态改变到可以认定是不同token的时候结束。

可以肯定的是,必然要对需要处理的数据挨个字符判断,然后在恰当的位置截断,得到一个个的token.

这里的核心在于将不同符号对应的字符给区别开,在一个字符无法表达此符号时将它截断,token形成。

3.1. 使用Fsm状态机(自动机)

4. 词法分析器框架选型

4.1. 语法分析器

4.2. lex

4.3. flex词法分析器

以计算器来举例,12+34*9 这一段“源程序”的词法分析过程如下所示:

图 2 算式的词法分析过程

一段对计算机来说豪无意义的字符串,经过语法分析后就得到了略微有意义的 Token 流。digit 就表示这个词法单元对应的是数字,operator 则表示操作符,后面相应的数字和符号(粉色背景)就是词素。同时,程序中一些不必要的空白、注释也可以由词法分析器来过滤掉,这样,之后的语法分析等步骤 处理起来就会容易得多。

使用antlr或者javacc来生成词法分析器比较简单,自己写实在是很麻烦的事情

开源的LL(K)语法/词法分析器—ANTLR

4.4. 1     ANTLR简介

ANTLR—A, 其前身是PCCTS,它为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器 (parser)和解释器(translator)的框架。ANTLR可以通过断言(Predicate)解决识别冲突;支持动作(Action)和返回 值(Return Value)来;更棒的是,它可以根据输入自动生成语法树并可视化的显示出来(这一点我将在下面的例子中演示)。由此,计算机语言的翻译变成了一项普通的 任务—在这之前YACC/LEX显得过于学院派,而以LL(k)为基础的ANTLR虽然在效率上还略有不足,但是经过近些年来的升级修改,使得ANTLR 足以应付现存的绝大多数应用。感谢Terence Parr博士和他的同事们十几年来的出色工作,他们为编译理论的基础和语言工具的构造做了大量基础性工作,也直接导致了俄ANTLR的产生。nother Tool for Language Recognition

正则表达式     正则表达式  被认  为  是文本处理的  首选  工具,当我们使用正则表  示  式时,  首先  定义  一个正则表达式,  然  后  和  预期  文本  进行  匹配  ,  最  终再按照  正则表  示  式  中  的  分  组  ,  逐  一  获  取  相匹配  的  数  据  ,  然  后  再  进行下  一  步  的处理(  输出  、  替  换  等等  )。在  进行  比  较复杂  一些的  问题  时,使用正则表达式,  整体  处理  过  程比  较漫长  ,有时  为了  处理一个  问题  ,写  出  的正则表达式  晦涩难懂  ,  很  不  便  于  维护  。     词法分析器     在     Antlr   中词法分析器  使用  了  和语  法分析器  相  同  的  技术  来  构造  ,  对词法  记  号     Token   的  匹配  使用  了  递归  下  降  的  策略  ,使  得  词法分析器  具有处理  上下  文  无关  文  法  的能  力  ,  而  正则表达式  所  能处理的文  法  只包含  正则文  法  (  线性  文  法  ),  因此  词法分析器  可  以  处理  很  多正则表达式  难  以  处理的  问题  ,比如  左括  号  和  右括  号  的成  对  匹配  等  。     此外  ,在     Antlr   中词法分析器所  要  匹配  的  词法  记  号  ,  通  过  相互引  用的  方  式  进行  嵌套  和  递归  定义  ,比正则表达的  书  写  更直观  ,  更加便  于  维护  。     总  的  来说  ,使用     Antlr   词法分析器  处理文本和正则表达式  相  比,处理能  力更  强大,  便  于开发和  测试  ,在本文的  后续  部  分中  ,我们一起  来  看  一  下  如何使用     Antlr   词法分析器  完成抽取、转换、重写  这  三  类文本处理工作

4.5. antlr韩式javacc

Antlr百度为您找到相关结果约1,640,000个

是javacc的两倍...所以,韩式antlr...

在文  件  的  第  一  行  使用  两  个     Antlr   的  关  键  字     lexer grammar   声  明  这是一个  词法  文  件  ,如

唯  一  需  要  注  意  的是  词法  的  名称必须  和文  件  名称  一  致  ,  否  则  Antlr   生  成  词法分析器  时  会  报错  ,  错误  类  似  于     SqlExtrator.g contains grammar xxx; names must be identical  ,这  里  统  一使用     SqlExtrator  。

4.6. Antlr 简介

1. ANTLR 语言识别的一个工具 (ANother Tool for Language Recognition ) 是一种语言工具,它提供了一个框架,可以通过包含 Java, C++, 或 C# 动作(action)的语法描述来构造语言识别器,编译器和解释器。 计算机语言的解析已经变成了一种非常普遍的工作,在这方面的理论和工具经过近 40 年的发展已经相当成熟,使用 Antlr 等识别工具来识别,解析,构造编译器比手工编程更加容易,同时开发的程序也更易于维护。

2. 语言识别的工具有很多种,比如大名鼎鼎的 Lex 和 YACC,Linux 中有他们的开源版本,分别是 Flex 和 Bison。在 Java 社区里,除了 Antlr 外,语言识别工具还有 JavaCC 和 SableCC 等。

算术表达式中用到了 4 类记号 ( 在 Antlr 中被称为 Token),分别是标识符 ID,表示一个变量;常量 INT,表示一个常数;换行符 NEWLINE 和空格 WS,空格字符在语言处理时将被跳过,skip() 是词法分析器类的一个方法。如清单 3 所示:

4.6.1.1.1. 清单 3. 记号定义

ID : (‘a‘..‘z‘ |‘A‘..‘Z‘)+ ;  INT : ‘0‘..‘9‘ + ;  NEWLINE:‘\r‘ ? ‘\n‘ ;  WS : (‘ ‘ |‘\t‘ |‘\n‘ |‘\r‘ )+ {skip();} ;

5. 参考

开源语法分析器--ANTLR - 薛笛的专栏 - 博客频道 - CSDN.NET.htm

词法分析 - 维基百科,自由的百科全书.htm

( 详细 ) 词法分析(字符串分析) - Thinker - BlogJava.htm

浏览器探究——webkit部分——解析HTML(3)HTMLToken的处理 - 落魂的专栏 - 博客频道 - CSDN.NET.htm

C# 词法分析器(一)词法分析介绍 update 2014.1.8 - CYJB - 博客园.htm

词法分析(NFA与DFA) - woaidongmao - C++博客.htm

Java开源语法分析生成器分类列表.htm

(详细) 使用 Antlr 处理文本_百度文库.htm

(ibm 详细)使用 Antlr 开发领域语言.htm

词法分析,让状态机旋转地更猛烈些吧----小话c语言(21) - 陈曦的分享 - 博客频道 - CSDN.NET.htm

词法分析(Java实现)不用状态机 - 0≡(-∞,+∞) - 博客频道 - CSDN.NET.htm

时间: 2024-12-29 09:43:47

atitit.词法分析的实现token attilax总结的相关文章

atitit.词法分析原理 词法分析器 (Lexer)

atitit.词法分析原理 词法分析器 (Lexer) 1. 词法分析(英语:lexical analysis)1 2. :实现词法分析程序的常用途径:自动生成,手工生成.[1] 2 2.1. 词法分析程序的功能2 2.2. 如何描述词素3 2.3. 单词token3 2.4. Token的类型,根据程序设计语言的特点,单词可以分为五类:关键字.标识符.常量.运算符.界符.以4 2.5. 词法分析的第一阶段即扫描器4 2.6. 词法分析的第二阶段评估器(Evaluator)5 2.7. 例如C语

Atitit.词法分析的理论原理 part2

Atitit.词法分析的理论原理 part2 1.  转换图1 1.1. 转换图是由程序流程图改进而成的.同样,转换图也可以等价地转换为程序流程图3 1.2. 2.2.3  构造词法分析器(2)流程程序2-1虽然只有26行,却是词法分析器的核心4 1.3. 单词存储形式就是三元组(单词ID,单词备注,单词行号).4 1.4. 单词流是如何传递给语法分析器的.5 1.5. 词法定义5 1.6. 词法分析器主要包括:构造转换图与转换表.设计词法分析器算法.6 1.7. 超前搜索几个字符与词法定义有关

Atitit 图像处理之理解卷积attilax总结

Atitit 图像处理之理解卷积attilax总结 卷积的运算可以分为反转.平移,相乘,求和. 在图像处理中,图像是一个大矩阵,卷积模板是一个小矩阵.按照上述过程,就是先把小矩阵反转,然后平移到某一位置,小矩阵的每一个小格对应大矩阵里面的一个小格,然后把对应小格里面的数相乘,把所有对应小格相乘的结果相加求和,得出的最后结果赋值给小矩阵中央小格对应的图像中小格的值,替换原来的值.就是上述说到的,反转.平移.相乘.求和.        一般图像卷积就是从第一个像素(小格)开始遍历到最后一个像素(小格

Atitit.数据库分区的设计 attilax  总结

Atitit.数据库分区的设计 attilax  总结 1. 分区就是分门别类的文件夹 (what)1 2. 分区的好处(y)1 3. 分区原则(要不要分区,何时分区)how2 4. 主要的分表类型有range,list,hash,key等2 5. 水平分区(Horizontal Partitioning) 垂直分区(Vertical Partitioning)3 6. 分区的操作4 7. 分区理论  并行数据库的体系结构4 8. 参考7 1. 分区就是分门别类的文件夹 (what) 分区的原理

Atitit.jquery 版本新特性attilax总结

Atitit.jquery 版本新特性attilax总结 1. Jq1.4 1 2. 1.5 1 3. 1.6 3 4. Jq1.7 3 ⒉提升了事件委派时的性能有了大幅度的提升,尤其是在ie7下: 4 ⒊更好的在 ie 6/7/8 上支持 html5: 4 ⒋切换动画更加直观: 4 ⒌匿名模块定义 awd 4 ⒍jQuery.Deferred 4 ⒎jQuery.isNumeric() 4 5. Jq1.8 5 5.1. jQuery 1.8 5 5.1.1. 可定制 5 5.1.2. 自动生

Atitit.常用分区api的attilax总结

1. Api 来源与oracle与mysql1 1.1. 分区定义partition by range (uid)  使用VALUES LESS THAN操作符来进行定1 1.1.1. mysql1 1.1.2. Oracle分区定义partition by range (uid)  使用VALUES LESS THAN操作符来进行定2 1.2. 分区按照hash2 1.2.1. Oracle语法2 1.3.  列表分区: partition by list().3 1.4. 分区的修改和合并3

Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持

Atitit.js跨域解决方案attilax大总结 后台java php c#.net的CORS支持 1. 设置 document.domain为一致  推荐1 2. Apache 反向代理 推荐1 3. jsonp ,2 4. CORS ,2 5. iframe+post3 6. 回调解决方案>>服务端推送dwr 反向ajax3 7. 服务器中转 3 8. Js跨3 9. 从所有的浏览器都支持来看,CORS将成为未来跨域访问的标准解决方案3 10. 参考4 1. 设置 document.do

atitit.高性能遍历 文本文件行 attilax总结

atitit.高性能遍历 文本文件行 attilax总结 文件读写有以下几种常用的方法 1 通常io读取2.5s 1 nio读取或许越高的.. 2 NIO通常采用Reactor模式,AIO通常采用Proactor模式 2 Java对BIO.NIO.AIO的支持: 2 BIO.NIO.AIO适用场景分析: 3 文件读写有以下几种常用的方法 1.字节读写(InputStream/OutputStream) 2.字符读取(FileReader/FileWriter) 3.行读取(BufferedRea

Atitit xml框架类库选型 attilax总结

1. 1. XML类库可以分成2大类.标准的.这些类库通常接口和实现都是分开的1 2. Jdom 和dom4j1 2.1. 5.1. jdom1 2.2. 5.2. dom4j2 2.3. 上手度比较  jdom更加简洁些..命名空间支持,dom4j更好..Jdom读取不到..2 2.3.1. Jdom范例2 2.3.2. D:\0workspace\atiplat_restapi\src\aaaPKg\dom4jReader.java3 3. 结论 dom4j推荐3 3.1. 参考资料3 1.