实验一 词法分析

合集下载

实验一(词法分析)

实验一(词法分析)

实验一词法分析

一.实验目的

1、学会针对DFA转换图实现相应的高级语言源程序。

2、深刻领会状态转换图的含义,逐步理解有限自动机。

3、掌握手工生成词法分析器的方法,了解词法分析器的内部工作原理。

二.实验内容

TINY计算机语言的编译程序的词法分析部分实现。

从左到右扫描每行该语言源程序的符号,拼成单词,换成统一的内部表示(token)送给语法分析程序。

为了简化程序的编写,有具体的要求如下:

(1)数仅仅是整数。

(2)空白符仅仅是空格、回车符、制表符。

(3)代码是自由格式。

(4)注释应放在花括号之内,并且不允许嵌套

三.实验要求

要求实现编译器的以下功能:

(1)按规则拼单词,并转换成二元式形式

(2)删除注释行

(3)删除空白符 (空格、回车符、制表符)

(4)列表打印源程序,按照源程序的行打印,在每行的前面加上行号,并且打印出每行包含的记号的二元形式

(5)发现并定位错误

,词法分析进行具体的要求:

(1)记号的二元式形式中种类采用枚举方法定义;其中保留字和特殊字符是每个都一个种类,标示符自己是一类,数字是一类;单词的属性就是表示的字符串值。

(2)词法分析的具体功能实现是一个函数GetToken(),每次调用都对剩余的字符串分析得到一个单词或记号识别其种类,收集该记号的符号串属性,当识别一个

单词完毕,采用返回值的形式返回符号的种类,同时采用程序变量的形式提供

当前识别出记号的属性值。这样配合语法分析程序的分析需要的记号及其属性,

生成一个语法树。

(3)标示符和保留字的词法构成相同,为了更好的实现,把语言的保留字建立一个表格存储,这样可以把保留字的识别放在标示符之后,用识别出的标示符对比

词法分析实验报告

词法分析实验报告

词法分析实验报告

词法分析实验报告

引言

词法分析是自然语言处理中的一个重要环节,它负责将输入的文本分割成一个

个的词语,并确定每个词语的词性。本次实验旨在通过实现一个简单的词法分

析器,来探索词法分析的原理和实践。

实验内容

本次实验中,我们使用Python编程语言来实现词法分析器。我们选取了一段简单的英文文本作为输入,以便更好地理解和演示词法分析的过程。

1. 文本预处理

在进行词法分析之前,我们首先需要对输入文本进行预处理。预处理的目的是

去除文本中的标点符号、空格和其他无关的字符,以便更好地进行后续的分词

操作。

2. 分词

分词是词法分析的核心步骤之一。在这个步骤中,我们将文本分割成一个个的

词语。常见的分词方法包括基于规则的分词和基于统计的分词。在本次实验中,我们选择了基于规则的分词方法。

基于规则的分词方法通过事先定义一系列的分词规则来进行分词。这些规则可

以是基于语法的,也可以是基于词典的。在实验中,我们使用了一个简单的基

于词典的分词规则,即根据英文单词的常见前缀和后缀来进行分词。

3. 词性标注

词性标注是词法分析的另一个重要步骤。在这个步骤中,我们为每个词语确定

其词性。词性标注可以通过事先定义的规则和模型来进行。在本次实验中,我们使用了一个简单的基于规则的词性标注方法。

基于规则的词性标注方法通过定义一系列的词性标注规则来进行词性标注。这些规则可以是基于词法的,也可以是基于语法的。在实验中,我们使用了一个简单的基于词法的词性标注规则,即根据英文单词的后缀来确定其词性。

实验结果

经过实验,我们得到了输入文本的分词结果和词性标注结果。分词结果如下:- I

编译原理实验一词法分析

编译原理实验一词法分析

编译原理实验⼀词法分析

实验⼀词法分析

【实验⽬的】

(1)熟悉词法分析器的基本功能和设计⽅法;

(2)掌握状态转换图及其实现;

(3)掌握编写简单的词法分析器⽅法。

【实验内容】

对⼀个简单语⾔的⼦集编制⼀个⼀遍扫描的词法分析程序。

【实验要求】

(1)待分析的简单语⾔的词法

1) 关键字 begin if then while do end

2) 运算符和界符 := + - * / < <= <> > >= = ; ( ) #

3) 其他单词是标识符(ID)和整形常数(NUM),通过以下正规式定义:

ID=letter(letter|digit)*

NUM=digitdigit*

4) 空格由空⽩、制表符和换⾏符组成。空格⼀般⽤来分隔 ID、NUM、运算符、界符和关键字,词法分析阶段通常被忽略。 (2)各种单词符号对应的种别编码

(3)词法分析程序的功能

输⼊:所给⽂法的源程序字符串

输出:⼆元组(syn,token 或 sum)构成的序列。

syn 为单词种别码;

token 为存放的单词⾃⾝字符串;

sum 为整形常数。

【实验代码】

1 #include<iostream>

2 #include<string.h>

3 #include<conio.h>

4 #include<ctype.h>

5using namespace std;

6int sum,syn,p,m,n;

7char ch,chs[8],s[100];

词法分析程序设计与实现

词法分析程序设计与实现

实验一词法分析程序设计与实现

一、实验目的及内容

调试并完成一个词法分析程序,加深对词法分析原理的理解。

二、实验原理(状态转换图)

1、C语言子集

(1)关键字:

begin if then while do end

所有关键字都是小写。

(2)运算符和界符:

:= + –*/ 〈<= <> 〉>= = ; ( ) #(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义: ID=letter(letter| digit)*

NUM=digit digit *

(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。

2、各种单词符号对应的种别码

3、词法分析程序的功能

输入:所给文法的源程序字符串。

输出:二元组(syn,token或sum)构成的序列。

其中:syn为单词种别码;

token为存放的单词自身字符串;

sum为整型常数.

二、软件平台及工具

PC机以及VISUAL C++6.0软件。

三、实验方法、步骤(或:程序代码或操作过程) (1)程序代码:

#include<stdio.h>

#include〈string。h>

#include〈iostream.h〉

char prog[80],token[8];

char ch;

int syn,p,m=0,n,row,sum=0;

char *rwtab[6]={"begin”,"if",”then","while”,”do”,”end"};

void scaner()

编译原理实验一 词法分析

编译原理实验一 词法分析

实验一词法分析

一、实验目的:

通过本实验理解词法分析的整个过程,处理对象和处理的结果,了解词法分析在整个编译过程中的作用。

二、实验学时:

2学时。

三、实验内容

根据给出的简单语言的词法构成规则和单词集合,编制词法分析程序,要求能用给定的简单语言书写的源程序进行词法分析,同时建立相应的符号表文件存放正确的单词。输出分析结果于文件中,包括:

(1)正确的单词符号及其单词种类的序对二元组。

具体输出形式为:二元组:(单词种类,单词内码值)单词种类见五。

四、实验方法

构造识别单词集的自动机,编写程序实现。

五、实验的处理单词集

(注:单词种类统一分类如下:)

七、实验报告要求

给出单词识别的状态转换图;带有注释(简单说明)的源程序。程序运行截图,要求运行结果内有输出自己的名字和学号.

状态转换图

源程序

#include

#include

using namespace std;

//单词结构定义

struct WordType{

int code;

string pro;

};

//关键字表和对应的编码

string codestring[6]={"main","int","if","then","else","return"};

int codebook[6]={26,21,22,23,24,25};

//全局变量

char ch;

int flag=0;

//函数声明

WordType get_w();

void getch();

void getBC();

bool isLetter();

bool isDigit();

void retract();

编译原理词法分析实验报告

编译原理词法分析实验报告

编译原理词法分析实验报告

实验一词法分析

一、实验目的

通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。

编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。

二、实验内容

(1)功能描述:

该程序是实现一个词法分析器,词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。本实验中,采用的是将单词分为五种的方法。

识别关键字:main、if、int、for、while、do、return、break、continue;

单词种别码为1。

标识符:单词种别码为2。

常数:为无符号整形数;单词种别码为3。

运算符:包括:+、-、*、/、=、>、<、>=、<=、!= ;单词种别码为4。

分隔符:包括:,、;、{、}、(、);单词种别码为5。

(2)程序结构描述:

输入:从控制台输入一段源程序代码,对输入的代码进行词法分析,

处理:分离出关键字、标识符、数值、运算符和界符。

输出:在词法分析结果表中输出每个单词所在行号、类型以及它所对应的编码。其中,编码是自定义的,一种类型对应一个编码。词法分析结

果显示在控制台上。

(3)程序设计思路

1、定义编码表,用ArrayList集合存放单词,如:关键字、运算符、分界符。这三种单词是固定的,标示符和数字这两种单词不存放在集合中。编码表是固定的,只需要初始化一次就够了,所以将集合定义为static类型,使其在类加载时,进行一次初始化。

实验1 词法分析实验报告

实验1  词法分析实验报告
{
token[m++]=ch;
ch=prog[p++];
}
token[m++]='\0';
p--;
syn=10;
for(n=0;n<6;n++)
if(strcmp(token,rwtab[n])==0)
{
syn=n+1;
break;
}
}
else if((ch>='0'&&ch<='9'))
{
{
sum=0;
{
p=0;
row=1;
cout<<"Please input string:"<<endl;
do
{
cin.get(ch);
prog[p++]=ch;
}
while(ch!='#');
p=0;
do
{
scaner();
switch(syn)
{
case 11: cout<<"("<<syn<<","<<sum<<")"<<endl; break;

编译原理实验一词法分析

编译原理实验一词法分析

《编译原理》(2014-2015学年第1学期)

学号:2012329620058

姓名:胡冰倩

班级:12计科3班

实验一:词法分析程序

一、实验目的

1、构造一个《科学计算器》的词法分析程序,程序要求能对输入的字符串流进行词法分析。

2、在实验的过程中,学会应用词法分析的方法——构造NFA和DFA。

二、实验内容和要求

1、科学计算器的功能

作为一个科学计算器,最重要的自然是能够计算,以下是罗列的一些可以实现的功能:

1)基本四则运算

2)三角函数计算

3)指幂运算

4)表达式求值

5)log运算

6)提供一些基本常数,如PI、e等

7)进制转换

8)变量存储

2、要实现该科学计算器,本次实验首先需要完成词法分析,下面列举4个输入的表达式,:

1.0+2*3=

1.0+(2*3+cos3)/3.6-6=

tg(1.0+(sin2*3+cos3)/3.6-6)=

4.0log(1.0+(sin2*3+cos3)/3.6-6)=

期望程序能根据实现的DFA对任给的一个输入串进行词法分析,程序的输出为单词的token序列$(CLASS, V ALUE) 。CLASS中存放类别,V ALUE中存放token的值,如第一个算式,其输出为:

$(CLASS,V ALUE)

$( number, 1.0)

$( plus, + )

$(number, 2)

$(mul, * )

$(number, 3)

关于TOKEN的分类(CLASS),可将所有标识符归为一类;将常数归为另一类;保留字和分隔符则可采取一词一类。

对于变量标识符和常数,CLASS字段为相应的类别码,V ALUE字段则是该标识符、常数在其符号表中登记项的序号。

词法分析程序设计与实现

词法分析程序设计与实现

实验一词法分析程序设计与实现

一、实验目的及内容

调试并完成一个词法分析程序,加深对词法分析原理的理解。

二、实验原理(状态转换图)

1、C语言子集

(1)关键字:

begin if then while do end

所有关键字都是小写。

(2)运算符和界符:

:= + – * / < <= <> > >= = ; ( ) #(3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:ID=letter(letter| digit)*

NUM=digit digit *

(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。

2、各种单词符号对应的种别码

3、词法分析程序的功能

输入:所给文法的源程序字符串。

输出:二元组(syn,token或sum)构成的序列。

其中:syn为单词种别码;

token为存放的单词自身字符串;

sum为整型常数。

二、软件平台及工具

PC机以及VISUAL C++软件。

三、实验方法、步骤(或:程序代码或操作过程)(1)程序代码:

#include<>

#include<>

#include<>

char prog[80],token[8];

char ch;

int syn,p,m=0,n,row,sum=0;

char *rwtab[6]={"begin","if","then","while","do","end"};

void scaner()

{

for(n=0;n<8;n++) token[n]=NULL;

ch=prog[p++];

编译原理实验词法分析器与语法分析器实现

编译原理实验词法分析器与语法分析器实现

编译原理实验词法分析器与语法分析器实现词法分析器与语法分析器是编译器的两个重要组成部分,它们在编译过程中扮演着至关重要的角色。词法分析器负责将源代码转化为一个个标记(token)序列,而语法分析器则根据词法分析器生成的标记序列构建语法树,验证源代码的语法正确性。本实验旨在实现一个简单的词法分析器和语法分析器。

实验一:词法分析器实现

在实现词法分析器之前,需要定义所需词法项的规则。以C语言为例,常见的词法项包括关键字(如int、if、for等)、标识符、运算符(如+、-、*、/等)、常量(如整数、浮点数等)和分隔符(如括号、逗号等)。接下来,我们来实现一个简单的C语言词法分析器。

1. 定义词法项的规则

在C语言中,关键字和标识符由字母、数字和下划线组成,且首字符不能为数字。运算符包括各种数学运算符和逻辑运算符。常量包括整数和浮点数。分隔符包括括号、逗号等。

2. 实现词法分析器的代码

下面是一个简单的C语言词法分析器的实现代码:

```python

def lexer(source_code):

keywords = ['int', 'if', 'for'] # 关键字列表

operators = ['+', '-', '*', '/'] # 运算符列表

separators = ['(', ')', '{', '}', ',', ';'] # 分隔符列表

tokens = [] # 标记序列列表

current_token = '' # 当前标记

for char in source_code:

if char.isspace(): # 如果是空格,则忽略

词法分析报告

词法分析报告

编译原理实验报告实验一词法分析程序的设计与实现

指导教师:

姓名:

学号:

班级:

一、实验目的

基本掌握计算机语言的词法分析程序的开发方法。

二、实验内容

编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。三、实验要求

1.根据以下的正规式,编制正规文法,画出状态图;

标识符<字母>(<字母>|<数字字符>)*

十进制整数0 | (1|2|3|4|5|6|7|8|9) (0|1|2|3|4|5|6|7|8|9)*

八进制整数0 (0|1|2|3|4|5|6|7) (0|1|2|3|4|5|6|7)*

十六进制整数0 (x|X) (0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f) (0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*

运算符和分隔符+ - * / > < = ( ) ;

关键字if then else while do

2.根据状态图,设计词法分析函数int scan( ),完成以下功能:

(1)从输入流(键盘或文件)读入数据,分析出一个单词。

(2)返回单词种别(用整数表示),

(3)返回单词属性(不同的属性可以放在不同的全局变量中)。

3.编写测试程序,循环调用函数scan( ),每次调用,获得一个单词的信息。在测试程序中,打印输出单词种别、属性(注意:不要在词法分析函数

scan 中打印输出!)。

四、实验环境

微型计算机。

Windows 操作系统/Linux 操作系统。

编程语言:C/C++/Java/C#。建议使用Visual C++/Netbeans/Eclipse 集成开发环境。

词法分析实验报告

词法分析实验报告

实验1 词法分析实验报告

一、实验目的

通过编写并上机调试一个词法分析程序,掌握在对程序设计语言的源程序进行扫描的过程中,将其分解后各类单词的词法分析方法。

二、实验内容

输入:据教学要求和学生具体情况,从具有代表性的高级程序设计语言中,选取一个适当大小的子集,例如可以选取一类典型单词,也可以尽可能使各种类型的单词都能兼顾到。

输出:单词串的输出形式,所输出的每一单词均按形如(CLASS,V ALUE)的二元式编码。对于变量和常数,CLASS字段为相应的类别码,V ALUE字段则是该标识符、常数在其符号表中登记项的序号(要求在变量名表登记项中存放该标识符的字符串;常数表登记项中则存放该常数的二进制形式)。

对于关键字和分隔符,采用一词一类的编码形式。由于采用一词一类的编码方式,所以仅需在二元式的CLASS字段上放置相应的单词的类别码,V ALUE 字段则为“空”。不过,为便于查看由词法分析程序所输出的单词串,要求在CLASS字段上直接放置单词符号串本身。

三、实验要求

1、待分析的简单语言的词法

(1)关键字:

begin if then while do end

所有关键字都是小写。

(2)运算符和界符:

:= + –* / < <= <> > >= = ; ( ) # (3)其他单词是标识符(ID)和整型常数(NUM),通过以下正规式定义:

ID=letter(letter| digit)*

NUM=digit digit *

(4)空格由空白、制表符和换行符组成。空格一般用来分隔ID、NUM,运算符、界符和关键字,词法分析阶段通常被忽略。

实验一:词法分析程序编制实验指导书

实验一:词法分析程序编制实验指导书

编译原理课程

实验报告(Experiments for Compiler Principle)

北京工业大学软件学院

二零一四年七月

实验一:词法分析程序编制实验指导书

(Scanner for a tiny programming language)

实验学时:4-6学时实验类型:程序设计

前修课程(含实验环节)名称:

高级语言程序设计及其课程设计、数据结构及其课程设计

使用专业:计算机科学与技术

一、实验目的

基本掌握计算机语言的词法分析程序的开发方法。

二、实验内容

编制一个能够分析三种整数、标识符、主要运算符和主要关键字的词法分析程序。

三、实验要求

1.根据以下的正规式,编制正规文法,画出状态图;

标识符<字母>(<字母>|<数字字符>)*

十进制整数0 | (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*

八进制整数0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*

十六进制整数0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*

运算符和分隔符+ - * / > < = ( ) ;

关键字if then else while do begin end

2.根据状态图,设计词法分析函数int scan( ),完成以下功能:

1)从键盘读入数据,分析出一个单词。

2)返回单词种别(用整数表示),

3)返回单词属性(不同的属性可以放在不同的全局变量中)。

实现词法分析实验报告

实现词法分析实验报告

实现词法分析实验报告

一、实验目的

本次实验的目的是通过编写代码实现一个简单的词法分析器,可以对一段输入的代码进行词法分析,识别出其中的各种标识符、关键字、常数和运算符等。二、实验原理

词法分析是编译过程中的第一个阶段,它负责将源代码按照规定的规则划分为一个个的单词(Token),每个单词代表一个最基本的语法单元。在词法分析中,我们通过预先定义好的正则表达式规则来描述各个单词类型,并自动从源代码中提取出这些单词。

本次实验采用基于正则表达式的文法描述方式,针对不同的单词类型,使用不同的正则表达式来匹配。通过遍历源代码字符串,逐一尝试匹配各个正则表达式,从而实现对单词的划分。在匹配过程中,我们使用一个状态机来记录当前的匹配状态,以便处理不同的情况。

三、实验过程

1. 定义Token的数据结构,包括单词类型和单词值两个字段。使用枚举类型来表示所有的单词类型,如关键字、标识符、常数等。

2. 编写正则表达式的匹配函数,用于判断给定的字符串是否符合某个模式。在这个函数中,使用系统提供的正则表达式库或者手动实现正则表达式匹配算法。

3. 设计一个状态机,用于记录当前匹配的状态。状态机的状态包括开始、正在匹配、匹配成功和匹配失败等。在状态机中,根据当前字符和当前状态进行不同的处理。

4. 在状态机中,当一个完整的Token被匹配出时,根据其类型和值创建一个

Token对象,并将其添加到Token列表中。

5. 将源代码字符串按照换行符划分成多行,逐行进行处理。对于每一行,调用状态机进行匹配,将得到的Token添加到Token列表中。

实验一词法分析(单词识别)

实验一词法分析(单词识别)

实验⼀词法分析(单词识别)

实验⼀:词法分析

⼀、实验⽬的:

通过设计编制调试⼀个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语⾔源程序进⾏扫描过程中将其分解为各类单词的词法分析⽅法。

编制⼀个读单词过程,从输⼊的源程序中,识别出各个具有独⽴意义的单词,即基本保留字、标识符、常数、运算符、分隔符五⼤类。并依次输出各个单词的内部编码及单词符号⾃⾝值。(遇到错误时可显⽰“Error”,然后跳过错误部分继续显⽰)

⼆、实验预习提⽰

1、词法分析器的功能和输出格式

词法分析器的功能是输⼊源程序,输出单词符号。词法分析器的单词符号常常表⽰成以下的⼆元式(单词种别码,单词符号的属性值)。本实验中,采⽤的是⼀类符号⼀种别码的⽅式。

2、单词的BNF表⽰

<标识符>-> <字母><字母数字串>

<字母数字串>-><字母><字母数字串>|<数字><字母数字串>|

<下划线><字母数字串>|ε

<⽆符号整数>-> <数字><数字串>

<数字串>-> <数字><数字串> |ε

<加法运算符>-> +

<减法运算符>-> -

<⼤于关系运算符>-> >

<⼤于等于关系运算符>-> >=

3、“超前搜索”⽅法

词法分析时,常常会⽤到超前搜索⽅法。如当前待分析字符串为“a>+”,当前字符为’>’,此时,分析器倒底是将其分析为⼤于关系运算符还是⼤于等于关系运算符呢?显然,只有知道下⼀个字符是什么才能下结论。于是分析器读⼊下⼀个字符’+’,这时可知应将’>’解释为⼤于运算符。但此时,超前读了⼀个字符’+’,所以要回退⼀个字符,词法分析器才能正常运⾏。在分析标识符,⽆符号整数等时也有类似情况。

实验一 词法分析程序的设计与实现(C语言)

实验一 词法分析程序的设计与实现(C语言)

实验一 词法分析程序的设计与实现(C 语言)

一、实验目的

通过C 语言词法分析程序的实现理解编译程序过程中对单词的分析过程。

二、实验重难点

DFA 自动机的数据结构表示,程序流程图,词法分析程序实现

三、实验内容与要求

实验内容:

1. 设计存储DFA 自动机的数据结构

2.绘制程序流程图

3. 词法分析程序设计

四、实验学时

2课时

五、实验设备与环境

C 语言编译环境

六、根据实验过程填写下列内容

1.DFA 自动机的状态转换图和数据结构设计。

a /b

2. 程序流程图

(见附页)

3. 代码

#include<stdio.h>

int f(int x,char e)

{ int df[4][2]={{2,3},{4,3},{2,4},{4,4}};

U a a a S b Q b

V b

int i;

if(e=='a')

i=df[x][1];

if(e=='b')

i=df[x][2];

return(i);

}

void main()

{ int S=1,U=2,V=3,Q=4;

int k=S;

char c;

printf("请输入字符,按#结束:\n");

c=getchar();

while(c!='#')

{

k=f(k,c);

c=getchar();

}

if(k==Q) printf("你输入的字符串能被DFA所识别\n");

else printf("你输入的字符串能被DFA所识别\n");

}

4.测试数据及结果分析

(结果见附页)

分析:从实验的结果可以看出上面程序代码基本上可以实现所给DFA的要求,但是有关实验的可读性和功能方面还有待进一步改进。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一词法分析

有如下算术运算文法:

1) E->E+T

2) E->E-T

3) E->T

4) T->T*F

5) T->T/F

6) T->F

7) F->(E)

8) F->I

9) I->十进制实数|十进制整数|十六进制实数|

十六进制整数|八进制实数|八进制整数

10) 十进制实数->

(0|(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9) *).(0|1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9) *

11) 八进制实数->

0(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*

.(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7) *

12) 十六进制实数->

0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* .(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3| 4|5|6|7|8|9|a|b|c|d|e|f) *

13) 十进制整数->

0 | (1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9) *

14) 八进制整数->

0(0|1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7) *

15)十六进制整数->

0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)

(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f) *

单词分类:

运算符:+ - * / ()

常数:

十进制实数

十进制整数

十六进制实数

十六进制整数

八进制实数

八进制整数

1. 实验目的

实现一个词法分析程序,将输入字符串流分解成

单词流供语法分析使用。

2. 实验要求

输入算术运算式,输出分解后的单词流,例如:

输入(0124.3+0x35a.4f)*12

输出:

八进制实数0124.3

运算符+

十六进制实数0x35a.4f

运算符)

运算符*

十进制整数12

注意:

●输入可以是键盘输入,也可以是文件输入

●如果单词输入错误,必须有提示,例如:

输入12a+45*013468-0x23a3

输出

错误数据12a

运算符+

十进制整数45

运算符*

错误数据0123468

运算符-

十六进制整数0x23a3

3.实验代码

相关文档
最新文档