CN1877531A - 一种嵌入式编译体系扫描器的实现方法 - Google Patents
一种嵌入式编译体系扫描器的实现方法 Download PDFInfo
- Publication number
- CN1877531A CN1877531A CN 200610052230 CN200610052230A CN1877531A CN 1877531 A CN1877531 A CN 1877531A CN 200610052230 CN200610052230 CN 200610052230 CN 200610052230 A CN200610052230 A CN 200610052230A CN 1877531 A CN1877531 A CN 1877531A
- Authority
- CN
- China
- Prior art keywords
- program
- regular expression
- scanner
- character
- finite automaton
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 20
- 238000012546 transfer Methods 0.000 claims description 3
- 238000011161 development Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 4
- 230000008569 process Effects 0.000 description 4
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000002452 interceptive effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
Images
Landscapes
- Devices For Executing Special Programs (AREA)
Abstract
本发明涉及嵌入式系统编译技术领域,旨在提供一种嵌入式编译体系扫描器的实现方法。该方法包括读入程序文件内容、生成正则表达式、构造有穷自动机和词法分析结果记录。该方法将源程序读作字符文件并将其分为若干个记号。记号与自然语言中的单词类似,每一个记号都是表示源程序中信息单元的字符序列。在各种情况中,记号都表示由扫描程序从剩余的输入字符的开头识别或匹配的某种字符格式。本发明的方法可以从源代码中读取字符并形成由编译器的以后部分,通常是分析程序处理的逻辑单元,有效的为编译体系提供词法分析支持。
Description
技术领域
本发明涉及嵌入式系统编译技术领域,特别是涉及一种嵌入式编译体系扫描器的实现方法。
背景技术
编译器是将一种语言翻译为另一种语言的计算机程序。编译器将源程序(source language)编写的程序作为输入,而产生用目标语言(targetlanguage)编写的等价程序。通常地,源程序为高级语言(high-levellanguage),如C或C++,而目标语言则是目标机器的目标代码(object code,有时也称作机器代码(machine code),也就是写在计算机机器指令中的用于运行的代码。
编译器是一种相当复杂的程序,其代码的长度可从10 000行到1 000 000行不等。编写甚至读懂这样的一个程序都非易事,大多数的计算机科学家和专业人员也从来没有编写过一个完整的编译器。但是,几乎所有形式的计算均要用到编译器,而且任何一个与计算机打交道的专业人员都应掌握编译器的基本结构和操作。除此之外,计算机应用程序中经常遇到的一个任务就是命令解释程序和界面程序的开发,这比编译器要小,但使用的却是相同的技术。因此,掌握这一技术具有非常大的实际意义。
编译器设计最近的发展包括:首先,编译器包括了更为复杂的算法的应用程序,它用于推断和/或简化程序中的信息;这又与更为复杂的程序设计语言(可允许此类分析)的发展结合在一起。其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。其次,编译器已越来越成为基于窗口的交互开发环境(interactive development environment,IDE)的一部分,它包括了编辑器、链接程序、调试程序以及项目管理程序。这样IDE的标准并没有多少,但是已沿着这一方向对标准的窗口环境进行开发了。尽管近年来对此进行了大量的研究,但是基本的编译器设计在近20年中都没有多大的改变,而且它们正迅速地成为计算机科学课程中的中心一环。
发明内容
本发明的目的在于克服现有技术的不足,提供一种嵌入式编译体系扫描器的实现方法。本发明解决其技术问题采用的技术方案如下:
本发明提供了一种嵌入式编译体系扫描器的实现方法,其特征在于,包括以下步骤:
1)读入程序文件内容
扫描器程序根据编译要求打开编译对象程序文件,并将文件内容作为字符读入,由扫描器程序生成的逻辑单元,称作记号token;
2)生成正则表达式
扫描器程序按照正则表达式规则的要求,将步骤(1)中生成记号转化为正则表达式r;
所述正则表达式r表示字符串的格式,完全由它所匹配的串集来定义,写作L(r);
3)构造有穷自动机
扫描器程序按照有穷自动机的构造要求,将步骤(2)中生成的正则表达式转化为有穷自动机;
其实现方式为:确定性有穷自动机DFA,M由字母表∑、状态集合S、转换函数T:S×∑→S、初始状态S0∈S以及接受状态的集合AS组成,由M接受的且写作L(M)被定义为字符c1c2...cn串的集合,其中每个ci∈∑,存在状态s1=T(s0,c1),s2=T(s1,c2),...,sn=T(sn-1,cn),其中sn是A即一个接受状态的一个元素;
4)词法分析结果记录
将步骤(3)中生成的有穷自动机翻译成程序,记录到文件中,作为词法分析的结果输出。
作为本发明的一种改进,步骤(1)中所述扫描程序生成的逻辑单元记号token定义为枚举类型的逻辑项,包括了保留字reserved word、特殊符号special symbol。
本发明与背景技术相比,具有的有益的效果是:
将源程序读作字符文件并将其分为若干个记号。记号与自然语言中的单词类似,每一个记号都是表示源程序中信息单元的字符序列。在各种情况中,记号都表示由扫描程序从剩余的输入字符的开头识别或匹配的某种字符格式。本发明的方法可以从源代码中读取字符并形成由编译器的以后部分,通常是分析程序处理的逻辑单元,有效的为编译体系提供词法分析支持。
附图说明
图1是本发明过程的示意图;
图2是示例中有穷自动机构造示意图;
图3是示例中有穷自动机选择示意图;
图4是示例中有穷自动机重复示意图;
图5是示例中有穷自动机并置示意图。
具体实施方式
下面结合附图对本发明作进一步的说明。
一种嵌入式编译体系扫描器的实现方法,附图1是本发明实施过程的整体示意图,其具体实施方法如下:
1)读入程序
根据编译要求,打开编译对象文件,并将文件内容作为字符读入,由扫描程序生成的逻辑单元称作记号token,将字符组合成记号与在一个英语句子中将字母构成单词并确定单词的含义很相像,记号通常定义为枚举类型的逻辑项,记号有若干种类型,这其中包括了保留字reserved word,特殊符号specialsymbol,表示多字符串的记号;
例如,记号在C中可被定义为:
typedef enum
{IF,THEN,ELS,EPLUS,MINUS,NUM,ID,...}
Token Type;
作为逻辑项的记号必须与它们所表示的字符串完全区分开来。例如:保留字记号IF须与它表示的两个字符“if”的串相区别。为了使这个区别更明显,由记号表示的字符串有时称作它的串值(string value)或它的词义(lexeme)。某些记号只有一个词义:保留字就具有这个特性。但记号还可能表示无限多个语义。例如标识符全由单个记号ID表示,然而标识符有许多不同的串值来表示它们的单个名字。因为编译器必须掌握它们在符号表中的情况,所以不能忽略这些名字。因此,扫描器也需用至少一些记号来构造串值。任何与记号相关的值都是记号的属性(attribute),而串值就是属性的示例。记号还可有其他的属性。例如,NUM记号可有一个诸如“32767”的串值属性,它是由5个数字字符组成,但它还会有一个由其值计算所得的真实值32767组成的数字值属性。在诸如PLUS这样的特殊符号记号中,不仅有串值“+”还有与之相关的真实算术操作+。实际上,记号符号本身就可看作是简单的其他属性,而记号就是它所有属性的总和。
2)生成正则表达式
正则表达式表示字符串的格式。正则表达式r完全由它所匹配的串集来定义,这个集合称为由正则表达式生成的语言language generated by theregular expression,写作L(r),扫描器按照正则表达式规则的要求,将1)中生成记号转化为正则表达式;
实际识别:
I、数。数可以仅是数字(自然数)、十进制数、或带有指数的数(由e或E表示)的序列。例如:2.71E-2表示数.0271。可用正则定义将这些数表示如下:
nat=[0-9]+
signedNat=(+|-)?nat
number=signedNat(″.″nat)?(Esigned Nat)?
此处,在引号中用了一个十进制的点来强调它应直接匹配且不可被解释为一个元字符。
II、保留字和标识符。正则表达式中最简单的就是保留字了,它们由字符的固定序列表示。如果要将所有的保留字收集到一个定义中,就可写成:
reserved=if|while|do|...
相反地,标识符是不固定的字符串。通常,标识符必须由一个字母开头且只包含字母和数字。可用以下的正则定义表示:
letter=[a-zA-Z]
digit=[0-9]
identifier=letter(letter|digit)*
III、注释。注释在扫描过程中一般是被忽略的。然而扫描程序必须识别注释并舍弃它们。因此尽管扫描程序可能没有清晰的常量记号(可将其称为“伪记号pseudotoken”),仍需要给注释编写出正则表达式。注释可有若干个不同的格式。通常,它们可以是前后为分隔符的自由格式,例如:
{this is a Pascal comment}
/*this is a C comment*/
或由一个或多个特殊字符开头并直到该行的结尾,如在
;this is a Scheme comment
--this is an Ada comment
中。
为有单个字符的分隔符的注释(如Pascal注释)编写正则表达式并不难,且为那些从行的特殊字符到行尾编写正则表达式也不难。例如Pascal注释可写作:
{(~})*}
其中,用~}表示“非}”,并假设字符}作为元字符没有意义。
IV、二义性、空白格和先行在程序设计语言记号使用正则表达式的描述中,有一些串经常可被不同的正则表达式匹配。例如:诸如if和while的串可以既是标识符又可以是关键字。类似地,串<>可解释为表示两个记号(“小于号”和“大于号”)或一单个符号(“不等于”)。程序设计语言定义必须规定出应遵守哪个解释,但正则表达式本身却无法做到它。相反地,语言定义必须给出无二义性规则(disambiguating rules),由其回答每一种情况下的含义。
3)构造有穷自动机
确定性有穷自动机D FA,M由字母表∑、状态集合S、转换函数T:S×∑→S、初始状态S0∈S以及接受状态的集合AS组成,由M接受的且写作L(M)被定义为字符c1c2...cn串的集合,其中每个ci∈∑,存在状态s1=T(s0,c1),s2=T(s1,c2),...,sn=T(sn-1,cn),其中sn是A(即一个接受状态)的一个元素,扫描器按照有穷自动机的构造要求,主要采用基本正则表达式的转换,并置,选择,重复的方法,将2)中生成的正则表达式转化为有穷自动机;
如将正则表达式letter(letter|digit)*翻译为有穷自动机:
首先分别为正则表达式letter和digit构建机器,如图2;
接着再为选择letter|digit构造机器,如图3;
现在为重复(letter|digit)*构造自动机,如图4;
最后,将letter和(letter|digit)*并置在一起,并构造该并置的机器以得到完整的有穷自动机,如图5
4)词法分析结果记录
将3)中生成的有穷自动机翻译成程序,记录到文件中,作为词法分析的结果输出。
Claims (2)
1、一种嵌入式编译体系扫描器的实现方法,其特征在于,包括以下步骤:
1)读入程序文件内容
扫描器程序根据编译要求打开编译对象程序文件,并将文件内容作为字符读入,由扫描器程序生成的逻辑单元,称作记号token;
2)生成正则表达式
扫描器程序按照正则表达式规则的要求,将步骤(1)中生成记号转化为正则表达式r;
所述正则表达式r表示字符串的格式,完全由它所匹配的串集来定义,写作L(r);
3)构造有穷自动机
扫描器程序按照有穷自动机的构造要求,将步骤(2)中生成的正则表达式转化为有穷自动机;
其实现方式为:确定性有穷自动机DFA,M由字母表∑、状态集合S、转换函数T:S×∑→S、初始状态S0∈S以及接受状态的集合AS组成,由M接受的且写作L(M)被定义为字符c1c2...cn串的集合,其中每个ci∈∑,存在状态s1=T(s0,c1),s2=T(s1,c2),...,sn=T(sn-1,cn),其中sn是A即一个接受状态的一个元素;
4)词法分析结果记录
将步骤(3)中生成的有穷自动机翻译成程序,记录到文件中,作为词法分析的结果输出。
2、根据权利要求1所述的嵌入式编译体系扫描器的实现方法,其特征在于,步骤(1)中所述扫描程序生成的逻辑单元记号token定义为枚举类型的逻辑项,包括了保留字reserved word、特殊符号special symbol。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610052230 CN1877531A (zh) | 2006-06-30 | 2006-06-30 | 一种嵌入式编译体系扫描器的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200610052230 CN1877531A (zh) | 2006-06-30 | 2006-06-30 | 一种嵌入式编译体系扫描器的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1877531A true CN1877531A (zh) | 2006-12-13 |
Family
ID=37509976
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200610052230 Pending CN1877531A (zh) | 2006-06-30 | 2006-06-30 | 一种嵌入式编译体系扫描器的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1877531A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101201836B (zh) * | 2007-09-04 | 2010-04-14 | 浙江大学 | 基于带记忆确定有限自动机的正则表达式匹配加速方法 |
CN101667207B (zh) * | 2009-09-18 | 2011-09-28 | 南京联创科技集团股份有限公司 | 基于web2.0中ajax的员工身份快速识别选择方法 |
CN102968367A (zh) * | 2012-08-28 | 2013-03-13 | 华南理工大学 | 一种基于嵌入式软件的静态检测方法及其系统 |
CN101217557B (zh) * | 2007-01-03 | 2013-05-29 | 三星电子株式会社 | web服务器及其web服务方法 |
CN103547998A (zh) * | 2011-01-25 | 2014-01-29 | 美光科技公司 | 用于编译正则表达式的方法和设备 |
CN105550011A (zh) * | 2015-12-07 | 2016-05-04 | 国网浙江省电力公司湖州供电公司 | 一种自动将程序错误编码转化为错误描述的方法 |
CN106021109A (zh) * | 2016-05-20 | 2016-10-12 | 浪潮电子信息产业股份有限公司 | 一种面向程序结构分析自动化框架模型 |
US9916145B2 (en) | 2011-01-25 | 2018-03-13 | Micron Technology, Inc. | Utilizing special purpose elements to implement a FSM |
US11488378B2 (en) | 2010-06-10 | 2022-11-01 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
-
2006
- 2006-06-30 CN CN 200610052230 patent/CN1877531A/zh active Pending
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101217557B (zh) * | 2007-01-03 | 2013-05-29 | 三星电子株式会社 | web服务器及其web服务方法 |
CN101201836B (zh) * | 2007-09-04 | 2010-04-14 | 浙江大学 | 基于带记忆确定有限自动机的正则表达式匹配加速方法 |
CN101667207B (zh) * | 2009-09-18 | 2011-09-28 | 南京联创科技集团股份有限公司 | 基于web2.0中ajax的员工身份快速识别选择方法 |
US11488378B2 (en) | 2010-06-10 | 2022-11-01 | Micron Technology, Inc. | Analyzing data using a hierarchical structure |
CN103547998A (zh) * | 2011-01-25 | 2014-01-29 | 美光科技公司 | 用于编译正则表达式的方法和设备 |
CN103547998B (zh) * | 2011-01-25 | 2016-11-09 | 美光科技公司 | 用于编译正则表达式的方法和设备 |
US9792097B2 (en) | 2011-01-25 | 2017-10-17 | Micron Technology, Inc. | Method and apparatus for compiling regular expressions |
US9916145B2 (en) | 2011-01-25 | 2018-03-13 | Micron Technology, Inc. | Utilizing special purpose elements to implement a FSM |
US10089086B2 (en) | 2011-01-25 | 2018-10-02 | Micron Technologies, Inc. | Method and apparatus for compiling regular expressions |
CN102968367A (zh) * | 2012-08-28 | 2013-03-13 | 华南理工大学 | 一种基于嵌入式软件的静态检测方法及其系统 |
CN105550011A (zh) * | 2015-12-07 | 2016-05-04 | 国网浙江省电力公司湖州供电公司 | 一种自动将程序错误编码转化为错误描述的方法 |
CN106021109A (zh) * | 2016-05-20 | 2016-10-12 | 浪潮电子信息产业股份有限公司 | 一种面向程序结构分析自动化框架模型 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1877531A (zh) | 一种嵌入式编译体系扫描器的实现方法 | |
CN1297936C (zh) | 用来比较两个计算机文件的方法及系统 | |
CN1276375C (zh) | 用于显示和选择层次数据库段和字段的系统和方法 | |
CN1159661C (zh) | 用于中文的标记和命名实体识别的系统 | |
CN109308289B (zh) | 一种日志解析模板及基于该模板的日志解析方法 | |
CN1834955A (zh) | 多语种翻译存储器、翻译方法以及翻译程序 | |
CN105793818A (zh) | 源代码翻译 | |
US20080059146A1 (en) | Translation apparatus, translation method and translation program | |
CN1770144A (zh) | 机器翻译系统及方法 | |
CN101553779B (zh) | 将主机系统应用程序转换为开放系统应用程序的转换装置和方法 | |
CN108563629B (zh) | 一种日志解析规则自动生成方法和装置 | |
CN1627300A (zh) | 学习并使用广义串模式用于信息提取 | |
CN1794589A (zh) | 转换方法以及系统 | |
CN112417897B (zh) | 词对齐模型训练、文本处理的方法、系统、设备和介质 | |
CN1345426A (zh) | 用于提取索引关键字数据字段的系统和方法 | |
CN1101027C (zh) | 外部字符管理器 | |
CN109947711B (zh) | 一种对ios项目开发过程中的多语言文件自动化管理方法 | |
CN114153496A (zh) | 一种基于区块链的高速可并行代码相似度对比方法和系统 | |
CN1949175A (zh) | 一种对软件中的数据进行替换的方法 | |
CN1226692C (zh) | 基于语义语言的机器翻译系统及方法 | |
CN108292307A (zh) | 具有对压缩数据的快速操作的前缀Burrow-Wheeler变换 | |
CN101059758A (zh) | 屏幕转换程序生成方法及设备 | |
CN1916888A (zh) | 识别双字节字符集字符数据的语言的方法和系统 | |
CN1627289A (zh) | 用于分析汉语的装置和方法 | |
CN1302415C (zh) | 一种英汉翻译机器的实现方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Open date: 20061213 |