一个小语言的词法分析程序 作者: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 |
|