当前位置: 首页 > 图文教程 > 开发语言 > VC++ > 一个小语言的词法分析程序

VC++
几个数字信号处理算法程序
简易软盘镜像工具的实现及操作系统编写初步
教你使用正则表达式
C++ 扩展和嵌入 Python
拷贝构造和赋值操作符,C#和本机 C++ 代码的互用性
精通VC与Matlab联合编程(六)
精通VC与Matlab联合编程(五)
一个排序用的C++函数模板
浅析VC与MATLAB联合编程
C++编译器如何实现异常处理
文件重定义冲突的分析与解决
一步一步实现MFC扩展DLL中导出类和对话框
C宏:智者的利刃,愚者的恶梦!
引用的作用
《UTF-8与GB2312之间的互换》的改进
程序风格的要素-C++风格指南
VC+6.0实现文本串的自由拆分
怎样给串行化类分配版本号(可配置版本模式)
在常规的编程任务中使用新的 <tuple> 库
使用 typedef 抑制劣质代码

VC++ 中的 一个小语言的词法分析程序


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-10-30   浏览: 63 ::
收藏到网摘: n/a

一个小语言的词法分析程序
作者:loyalzu

下载本文示例代码

前些天写了个小语言的词法分析程序,因为前些天在VC知识库看到一个pascal词法分析的程序,觉得写得挺复杂的。其实词法分析程序的原理都是一样的,所以我想只要搞明白了简单的词法分析程序,再写复杂的就不难了,无非是多加几个关键字,多写几个条件判断语句而已。词法分析是编译程序的基础,也是最简单的。好,现在让我们看程序吧。
先让我们看看这个小语言的文法吧。

G[<程序>]:
<程序>∷=<程序首部>;<分程序>.
<程序首部>∷=program<标识符>
<分程序>∷=<复合语句>
<复合语句>∷=begin<语句序列>end
<语句序列>∷=<语句>{;<语句>}
<语句>∷=<赋值语句>|<复合语句>|<条件语句>
<赋值语句>∷=<标识符>:=<表达式>
<条件语句>∷=if <布尔表达式> then <语句> else <语句>
<表达式>∷=<项>{(+|-)<项>}
<项>∷=<因式>{(*|/)<因式>}
<因式>∷=<标识符>|<无正负号常量>|’(’<表达式>’)’
<布尔表达式>∷=<表达式><关系运算符><表达式>
<关系运算符>∷= =|<|<=|>|>=|<>
<标识符>∷=<字母>{<字母>|<数字>}
<无正负号常量>∷=<数字>{<数字>}[.<数字>{<数字>}]
<字母>∷=a|b|c|d|e|f|g|……|u|v|w|x|y|z
<数字>∷=0|1|2|3|4|5|6|7|8|9

根据此文法,构造一词法分析程序。输入以“#”为结束符
按照这个文法,找出该语言的关键字,如program,begin,end ,if,then,else,以及其他一些特殊符号,然后再构造一个分析表,如下表:

单词符号  类别编号
标识符 1
常数 2
if 3
then 4
else 5
program 6
begin 7
end 8
+ 9
- 10
* 11
/ 12
( 13
) 14
> 15
>= 16
< 17
<= 18
<> 19
:= 20
; 21
. 22