一个小语言的词法分析程序原理及其实现(1
词法分析是程序的第一步,是以后步骤语法分析,语义分析以及代码生成的基础.目前可以利用LEX进行词法分析程序的编写,如果所要的语言比较庞大则应该使用LEX,这就需要学习LEX的使用了,本文不使用该工具,而自己手工编写一个,旨在解除大家对系统的神秘感,也希望能给大家一个提示吧.网上有些词法分析程序的原代码,觉得写的挺复杂的。其实词法分析程序的原理都是一样的,所以我想只要搞明白了简单的词法分析程序,再写复杂的就不难了,无非是多加几个关键字,多写几个条件判断语句而已。词法分析是程序的基础,也是最简单的。好,现在让我们开始吧。
先让我们看看这个小语言的文法吧。
G#60;程序#62;:
#60;程序#62;∷=#60;程序首部#62;;#60;分程序#62;.
#60;程序首部#62;∷=program#60;标识符#62;
#60;分程序#62;∷=#60;复合语句#62;
#60;复合语句#62;∷=begin#60;语句序列#62;end
#60;语句序列#62;∷=#60;语句#62;{;#60;语句#62;}
#60;语句#62;∷=#60;赋值语句#62;|#60;复合语句#62;|#60;条件语句#62;
#60;赋值语句#62;∷=#60;标识符#62;:=#60;表达式#62;
#60;条件语句#62;∷=if #60;布尔表达式#62; then #60;语句#62; else #60;语句#62;
#60;表达式#62;∷=#60;项#62;{(+|-#60;项#62;}
#60;项#62;∷=#60;因式#62;{(|/#60;因式#62;}
#60;因式#62;∷=#60;标识符#62;|#60;无正负号常量#62;|’(’#60;表达式#62;’’
#60;布尔表达式#62;∷=#60;表达式#62;#60;关系运算符#62;#60;表达式#62;
#60;关系运算符#62;∷= =|#60;|#60;=|#62;|#62;=|#60;#62;
#60;标识符#62;∷=#60;字母#62;{#60;字母#62;|#60;数字#62;}
#60;无正负号常量#62;∷=#60;数字#62;{#60;数字#62;}.#60;数字#62;{#60;数字#62;}
#60;字母#62;∷=a|b|c|d|e|f|g|……|u|v|w|x|y|z
#60;数字#62;∷=0|1|2|3|4|5|6|7|8|9
根据此文法,构造一词法分析程序。输入以“#”为结束符
按照这个文法,找出该语言的关键字,如program,begin,end ,if,then,else,以及其他一些特殊符号,然后再构造一个分析表,如下表:
单词符号
类别编号
单词符号
类别编号
标识符
1
14
常数
2
#62;
15
if
3
#62;=
16
then
4
#60;#60;/p#62;
17
else
5
#60;=
18
program
6
#60;#62;
19
begin
7
:=
20
end
8
;
21
+
9
.
22
-
10
,
23
11
/
12
(
13
这篇一个小语言的词法分析程序原理及其实现(1文章怎么样?希望它对您有帮助。如果喜欢一个小语言的词法分析程序原理及其实现(1,请分享给好友。本文网址:http://www.nicejiao.com (转载请保留)。