资源简介
词法分析
一、实验目的:
通过设计编制调试一个具体的词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
编制一个读单词过程,从输入的源程序中,识别出各个具有独立意义的单词,即基本保留字、标识符、常数、运算符、分隔符五大类。并依次输出各个单词的内部编码及单词符号自身值。(遇到错误时可显示“Error”,然后跳过错误部分继续显示)
二、实验说明
1、 词法分析器的功能和输出格式
词法分析器的功能是输入源程序,输出单词符号。词法分析器的单词符号常常表示成以下的二元式(单词种别码,单词符号的属性值)。本实验中,采用的是一类符号一种别码的方式。
2、 单词的BNF表示
->
->||
|ε
->
-> |ε
-> +
-> -
-> >
-> >=
三、实验要求
(一)准备:
1.阅读课本有关章节,明确语言的语法,写出基本保留字、标识符、常数、运算符、分隔符和程序例。
2.初步编制好程序。
3.准备好多组测试数据。
(二)上课上机:
将源代码拷贝到机上调试,发现错误,再修改完善。
第二次上机调试通过。
(三)程序要求:
程序输入/输出示例:
如源程序为C语言。输入如下一段:
main()
{
int a,b;
a = 10;
b = a + 20;
}
要求输出如下:
(2,”main”)
(5,”(“)
(5,”)“)
(5,”{“)
(1,”int”)
(2,”a”)
(5,”,”)
(2,”b”)
(5,”;”)
(2,”a”)
(4,”=”)
(3,”10”)
(5,”;”)
(2,”b”)
(4,”=”)
(2,”a”)
(4,”+”)
(3,”20”)
(5,”;”)
(5,”}“)
要求:
识别保留字:if、int、for、while、do、return、break、continue;
单词种别码为1。
其他的都识别为标识符;单词种别码为2。
常数为无符号整形数;单词种别码为3。
运算符包括:+、-、*、/、=、>、=、<=、!= ;
单词种别码为4。
分隔符包括:,、;、{、}、(、); 单词种别码为5。
以上为参考,具体可自行增删。
(四)程序思路
这里以开始定义的C语言子集的源程序作为词法分析程序的输入数据。在词法分析中,自文件头开始扫描源程序字符,一旦发现符合“单词”定义的源程序字符串时,将它翻译成固定长度的单词内部表示,并查填适当的信息表。经过词法分析后,源程序字符串(源程序的外部表示)被翻译成具有等长信息的单词串(源程序的内部表示),并产生两个表格:常数表和标识符表,它们分别包含了源程序中的所有常数和所有标识符。
0.定义部分:定义常量、变量、数据结构。
1.初始化:从文件将源程序全部输入到字符缓冲区中。
2.取单词前:去掉多余空白。
3.取单词后:去掉多余空白(可选,看着办)。
4.取单词:利用实验一的成果读出单词的每一个字符,组成单词,分析类型。(关键是如何判断取单词结束?取到的单词是什么类型的单词?)
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Analysis
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button3_Click(object sender EventArgs e)
{
textBox2.Text = ““;
}
private void button2_Click(object sender EventArgs e)
{
textBox1.Text = ““;
}
private void button1_Click(object sender EventArgs e)
{
textBox2.Text = Analysis(textBox1.Text);
}
public string Analysis(string pro)
{
string[] chars = { “;“ “:“ “[“ “]“ “+“ “-“ “*“ “/“ “%“ “?“ “&“ “{“ “}“ “>“ “<“ “=“ “^“ “!“ “(“ “)“ “.“ “ “ “\n“ “\r“ ““ “int“ “float“ “const“ “for“ “switch“ “while“ “bool“ “long“ “short“ “true“ “false“ “case“ “defalt“ “goto“ “loop“ “main“ };
pro = pro.Trim();
int i;
string num=“0“;
//string[] end={“0““1““2““3““4““5““6““7““8““9“};
string print_out = ““;
for (i = 0; i < chars.Length; i++)
{
pro = pro.Replace(chars[i]“ “+chars[i]+“ “);
}
string[] Str = pro.Split(‘ ‘);
for (i = 0; i < Str.Length; i++)
{
if (Str[i] != ““ && Str[i] != “\n“ && Str[i] != “\r“)
{
if (Str[i] == “if“ || Str[i] == “int“ || Str[i] == “for“ || Str[i] == “while“ || Str[i] == “do“ || Str[i] == “return“ || Str[i] == “break“ || Str[i] == “continue“)
num = “1“;
else if (Str[i] == “+“ || Str[i] == “-“ || Str[i] == “*“ || Str[i] == “/“ || Str[i] == “=“ || Str[i] == “>“ || Str[i] == “>=“ || Str[i] == “<“ || Str[i] == “<=“ || Str[i] == “!=“)
num = “4“;
else if (Str[i] == “;“ || Str[i] == ““ || Str[i] == “{“ || Str[i] == “}“ || Str[i] == “(“ || Str[i] == “)“)
num = “5“;
else if (Str[i].EndsWith(“1“)||Str[i].EndsWith(“2“)||Str[i].EndsWith(“3“)||Str[i].EndsWith(“4“)||Str[i].EndsWith(“5“)||Str[i].EndsWith(“6“)||Str[i].EndsWith(“7“)||Str[i].EndsWith(“8“)||Str[i].EndsWith(“9“)||Str[i].EndsWith(“0“))
num = “3“;
else num = “2“;
print_out = print_out + “[“ + num + ““ + Str[i] + “]“ + “\r\n“;
}
}
return print_out;
}
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3762 2010-03-09 18:27 Analysis\Analysis\Analysis.csproj
文件 78848 2010-03-23 17:24 Analysis\Analysis\bin\Debug\Analysis.exe
文件 24064 2010-03-23 17:24 Analysis\Analysis\bin\Debug\Analysis.pdb
文件 14328 2010-04-14 18:20 Analysis\Analysis\bin\Debug\Analysis.vshost.exe
文件 490 2009-06-11 05:14 Analysis\Analysis\bin\Debug\Analysis.vshost.exe.manifest
....SH. 67 2010-03-21 19:54 Analysis\Analysis\bin\Debug\desktop.ini
文件 2738 2010-03-23 17:24 Analysis\Analysis\Form1.cs
文件 4762 2010-03-23 17:24 Analysis\Analysis\Form1.Designer.cs
文件 106989 2010-03-23 17:24 Analysis\Analysis\Form1.resx
文件 595 2010-04-14 18:20 Analysis\Analysis\obj\Debug\Analysis.csproj.FileListAbsolute.txt
文件 847 2010-03-23 17:24 Analysis\Analysis\obj\Debug\Analysis.csproj.GenerateResource.Cache
文件 78848 2010-03-23 17:24 Analysis\Analysis\obj\Debug\Analysis.exe
文件 67702 2010-03-23 17:24 Analysis\Analysis\obj\Debug\Analysis.Form1.resources
文件 24064 2010-03-23 17:24 Analysis\Analysis\obj\Debug\Analysis.pdb
文件 180 2010-03-09 18:27 Analysis\Analysis\obj\Debug\Analysis.Properties.Resources.resources
文件 489 2010-03-09 18:15 Analysis\Analysis\Program.cs
文件 1366 2010-03-09 18:15 Analysis\Analysis\Properties\AssemblyInfo.cs
文件 2866 2010-03-09 18:15 Analysis\Analysis\Properties\Resources.Designer.cs
文件 5612 2010-03-09 18:15 Analysis\Analysis\Properties\Resources.resx
文件 1093 2010-03-09 18:15 Analysis\Analysis\Properties\Settings.Designer.cs
文件 249 2010-03-09 18:15 Analysis\Analysis\Properties\Settings.settings
文件 914 2010-03-09 18:15 Analysis\Analysis.sln
..A..H. 13312 2010-04-14 18:20 Analysis\Analysis.suo
目录 0 2010-03-10 13:29 Analysis\Analysis\obj\Debug\Refactor
目录 0 2010-03-09 18:15 Analysis\Analysis\obj\Debug\TempPE
...D..R 0 2010-03-21 19:54 Analysis\Analysis\bin\Debug
目录 0 2010-03-23 17:24 Analysis\Analysis\obj\Debug
目录 0 2010-03-09 18:15 Analysis\Analysis\bin
目录 0 2010-03-09 18:15 Analysis\Analysis\obj
目录 0 2010-03-09 18:15 Analysis\Analysis\Properties
............此处省略5个文件信息
- 上一篇:单片机I2C通信程序
- 下一篇:四路抢答器 c语言
相关资源
- 基于STM32的音频信号采样与FFT分析
- 海康私有流分析接口源码(附使用说
- 北邮-编译原理-词法分析
- 现代编译原理-C语言描述
- 《Data Structures and Algorithm Analysis in C
- 数值分析算法程序设计 C++实现
- c语言难点分析整理,C语言
- 编译原理实验报告+代码+使用说明
- 编译原理课程设计-C语言子集编译器
- c++ 飞机订票系统设计及分析包含源代
- 赋值语句翻译c语言实现四元式
- 语法分析c语言实现程序代码+实验报告
- 编译原理用C++消除左递归
- LL1语义分析的C语言子集编译器
- 编译原理简易C编译器
- 实现语法分析器-编译原理
- 编译原理 LR分析器 c++代码
- 设计并实现TINYC语言的扫描程序TINYC
- Data Structures and Algorithm Analysis in C++
- LL(1)文法分析全过程(FIRST/FLLOW/S
- 编译原理 LR0项目集规范族的构造 L
- 山东大学编译原理实验源代码c++版
- 词法分析器有去除注释功能
- 数据结构与算法分析C++语言描述第四
- 利用FFT计算频谱图
- 英文原版数据结构与算法分析——C语
- MATLAB科学计算及分析唐培培源代码
- 基于VC MFC的数据分析系统
- PCA代码实现详解
- 语法分析器 tiny语言语法分析
评论
共有 条评论