C语言词法分析器

概述

词法分析是编译阶段的第一步。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即**对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。**词法分析程序实现这个任务。词法分析程序可以使用Lex等工具自动生成。

本项目实现了一个简单C语言词法分析器。

软件首页:http://www.oschina.net/p/lexer

项目主页:http://git.oschina.net/kinegratii/Lexer

项目特性

  • 支持十进制数、八进制数、标识符、关键字、操作符、分隔符等多种词素

  • 支持文件导入和代码编写两种输入方式

  • 算法和UI通过特定的接口实现二者之间的低耦合

项目结构

1Lexer 2 3-- com.kinegratii.lexer  主包 4     |--- Lexer.java         项目启动类 5     |--- MainFrame.java     界面类 6     |--- SoftwareInfo.java  软件信息常量定义 7      8-- com.kinegratii.core 词法分析包 9     |--- Analyzer.java                      词法分析器 10     |--- LexerAnalysisProccessCallback.java 回调接口 11  12-- com.kinegratii.token 词素包 13     |--- DoubleToken.java      浮点数 14     |--- DotToken.java         分隔符 15     |--- IdentifiterToken.java 标志符   16     |--- IntegerToken.java     整型数字 17     |--- ReservedToken.java    关键字 18      19-- com.kinegatii.utils  工具包  20     |--- BareBonesBrowserLaunch.java 调用浏览器

项目截图

词法单元序列

符号表

项目开发

本项目是《编译课程》的一个实践项目,初步代码完成于2012年4月,也经历过几次小的变动,版本到了1.2.4(那时版本比较随意)。前些时间进行了整体上的重构,就有了这次的v1.3.0 版本。

v1.3.0 2014-09-24

  • 重构整个项目,根据职责划分包和类,实现算法和UI的低耦合

  • 去掉了语言改造部分

所谓语言改造部分,就是这个分析器当中一些自定义的规则,比如有连续下划线的标识符应该只保留一个,如“a__b" => "a_b"等等。这些都不是标准分析器的一部分,之所以有这么个东西在,是为了防止全文复制,每年的语言改造都不一样,即使拿到了往届的代码也要改动一下,这就要熟悉整个项目代码了。

后续计划

  • 支持通过配置Analyzer实现自定义语言改造部分,这主要指代码级别上。基本要求是可配置性、通用接口。

  • 目前的处理回调接口还比较简单,可以考虑在接口中多暴露一些分析器的数据。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

Opencv中Mat矩阵相乘——点乘、dot、mul运算详解2016年09月02日00:00:36 \牧野(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fme.csdn.net%2Fdcrmg) 阅读数:59593

FLV文件格式

1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.