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:1466519819@qq.com

转载请注明来源: 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

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

  1. atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx

    atitit.TokenService v3 qb1  token服务模块的设计 新特性.docx 1.1. V3 新特性1 1.2. V2 新特性1 2. Token的归类1 3. Token的用途 ...

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

    Atitit.词法分析的原理 理论 1. 分词 .词法分析lexical analysis 1 1.1. 分词主要流程 1 1.2. 分词的属性如下表token 1 1.3. 词法分析器主要包括:构造 ...

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

    atitit.词法分析原理 词法分析器 (Lexer) 1. 词法分析(英语:lexical analysis)1 2. :实现词法分析程序的常用途径:自动生成,手工生成.[1] 2 2.1. 词法分 ...

  4. Atitit 编程语言原理与概论attilax总结 三大书籍总结

    Atitit 编程语言原理与概论attilax总结 三大书籍总结 编程语言原理(第10版) 目录: 第1章 预备知识第2章 主要程序设计语言的发展第3章 描述语法和语义第4章 词法分析和语法分析第5章 ...

  5. Atitit 编程语言原理与概论attilax总结

    Atitit 编程语言原理与概论attilax总结 1. 语言的分类1 2. 语言评价标准1 3. 编程语言原理(第10版) 目录: 2 4. 代码之髓:编程语言核心概念2 5. <编程语言实现 ...

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

    Atitit.词法分析的理论原理 part2 1.  转换图1 1.1. 转换图是由程序流程图改进而成的.同样,转换图也可以等价地转换为程序流程图3 1.2. 2.2.3  构造词法分析器(2)流程程 ...

  7. Atitit 管理原理与实践attilax总结

    Atitit 管理原理与实践attilax总结 1. 管理学分类1 2. 我要学的管理学科2 3. 管理学原理2 4. 管理心理学2 5. 现代管理理论与方法2 6. <领导科学与艺术4 7. ...

  8. Atitit 图像处理的摩西五经attilax总结

    Atitit 图像处理的摩西五经attilax总结 1. 数字图像处理(第三版)1 2. 图像处理基础(第2版)(世界著名计算机教材精选)1 3. 计算机视觉特征提取与图像处理(第三版)2 4. Op ...

  9. Atitit opencv版本新特性attilax总结

    Atitit opencv版本新特性attilax总结 1.1. :OpenCV 3.0 发布,史上功能最全,速度最快的版1 1.2. 应用领域2 1.3. OPENCV2.4.3改进 2.4.2就有 ...

随机推荐

  1. android——根据MVC框架设计的结构

  2. Java 反照机制中 getMethod()和getDeclaredField()区别

    Java 反射机制中 getMethod()和getDeclaredField()区别 今天在程序中用到java反射机制时,遇到的问题记录一下:我当时遇到的问题是,我用反射getMethod()调用类 ...

  3. 数学图形(2.13)Spherical trochoid曲线

    该曲线与上一节的herical cycloid球面外摆曲线 很相似,难道这是球面内摆曲线? #http://www.mathcurve.com/courbes3d/cycloidspheric/tro ...

  4. powerVR tbdr 硬件架构理解

    有两点 TSP里的iteration 和那个vertex data 到 tsp的 *2 itedration是为了把 ps里面uv的动态改变提前算出来给 texture fetch用 这个的通用方法是 ...

  5. Javascript屏蔽鼠标右键-超简单,不过还是记录一下

    Javascript屏蔽鼠标右键,其实作用也不大,也许是为了防止别人查看源代码,其实想查看源代码有多种途径,未必需要通过鼠标右键.不过当我们自定义鼠标右键弹出菜单时,也许需要这些. 下面是源码: 1 ...

  6. ECharts学习总结(一):ECharts的第一个图表

    在进行echarts图表开发之前先要到echarts官网下载echarts的库文件,我下载的是echarts-2.2.7.然后把库文件放到工程文件web目录下.接下来进行第一个图表的显示步骤如下: 1 ...

  7. linux 的空命令:(冒号)

    php里面又“空操作”这个东西,于是想一想linux的命令中是否有“空命令”这种东西,搜索一下,结果发现真的有这个东西存在 -------:) 冒号 : 就是空命令.即什么也不做,是一个命令占位符 # ...

  8. Linux磁盘扩容

    Linux磁盘扩容 fdisk -l # 查看硬盘信息 lvextend -L +1G /dev/mapper/vg00-lvroot 或者 lvextend -l +%FREE /dev/mappe ...

  9. Linux系统配置VSFTP软件详解

    Linux系统配置VSFTP软件详解 出处 http://www.sudu.cn/service/detail.php?id=11656 vsftpd.conf 是vsftpd的配置文件,用来控制vs ...

  10. zoj3662Math Magic

    Math Magic Time Limit: 3 Seconds       Memory Limit: 32768 KB Yesterday, my teacher taught us about ...