词法分析实验报告
1.1 实验目的
设计、编制并测试一个词法分析程序,加深对词法分析原理的理解。
1.2 实验要求
1.2.1 待分析的C语言子集的词法
1. 关键字
"auto", "break", "case", "char", "const", "continue",
"default", "do", "double", "else", "enum", "extern",
"float", "for", "goto", "if", "int", "long",
"register", "return", "short", "signed", "sizeof", "static",
"struct", "switch", "typedef", "union", "unsigned", "void",
"volatile", "while"
所有的关键字都是小写。
2.分隔符
"[", "]", "{", "}", ";", """, "'", "#", "(", ")", ".", ":", " ", ",",
"\\", "\?"
3. 运算符
"+", "-", "*", "/", "<", ">", "=", "^", "&", "|", "%", "~","!", ">>", "<<", "++", "--", "&&", "||", "!=", "==", "+=", "-=", "<=", ">=", "->"
3.其他标记ID和NUM
通过以下正规式定义其它标记:
VAR→letter(letter|digit)*
NUM→digit digit*
letter→a|…|z|A|…|Z
digit→0|…|9…
4.忽略的部分
空格一般用来分隔ID、NUM、专用符号和关键字,词法分析阶段通常被忽略。空格由空白、制表符和换行符组成
由’//’开始的行注释,和’/*’开始’*/’结束的段注释,对程序没有影响,也忽略.
1.2.2 单词类别序号和表序号
输出单词结点有类别,序号等信息
类别:由宏定义定义的int型数据
#define KEY 0
#define SPARATOR 1
#define OPERATOR 2
#define VALUE 3
#define VARIABLE 4
序号:单词在对应的表中的序号,从0开始
关键字表:
"auto" 0 "break" 1 "case" 2 "char" 3
"const" 4 "continue" 5 "default" 6 "do" 7
"double" 8 "else" 9 "enum" 10 "extern" 11
"float" 12 "for" 13 "goto" 14 "if" 15
"int" 16 "long" 17 "register" 18 "return" 19
"short" 20 "signed" 21 "sizeof" 22 "static" 23
"struct" 24 "switch" 25 "typedef" 26 "union" 27
"unsigned" 28 "void" 29 "volatile" 30 "while" 31
分隔符表:
"[" 0 "]" 1 "{" 2 "}" 3 ";" 4 """ 5 "'" 6 "#" 7
"(" 8 ")" 9 "." 10 ":" 11 "," 12 "\\" 13 "\?" 14
运算符表:
"+" 0 "-" 1 "*" 2 "/" 3 "<" 4 ">" 5