《编译原理论文-词法分析器的设计》由会员分享,可在线阅读,更多相关《编译原理论文-词法分析器的设计(20页珍藏版)》请在金锄头文库上搜索。
1、 编译原理编译原理课课 程程 设设 计计 报报 告告题题 目目 词法分析器的设计词法分析器的设计 院院 系系 年级班级年级班级 学学 号号 学生姓名学生姓名 指导教师指导教师 20132013 年年 6 6 月月 5 5 日日目目 录录一、课程设计目的、任务及要求.1 二、需求分析.2 三、系统设计.3 四、系统实现.4 五、系统测试.5 六、课程设计小结.6编译原理课程设计报告第 0 页一、课程设计目的、任务及要求一、课程设计目的、任务及要求课程设计目的:1、 理解词法分析器的工作原理。 2、 能够使用程序设计语言实现一个词法分析器。课程设计任务及要求:1、课程设计任务:完成下述文法所描述的
2、单词符号的词法分析程序。 | | +|-|*|/|;|(|)|=|=| a|z|A|Z 0|9 说明: 1.假定该语言对字母的大小写不敏感,由指定文件读入预分析的源程 序,分析结果再写入指定文件。 2假定语言的关键字为 “if“,“else“,“then“,“for“,“while“,“do“,“and“,“not“,“or“。 3程序的功能描述 从左至右扫描源程序的字符串,按照词法规则(正则文法规则)识别 出一个个正确的单词,并转换成该单词相应的二元式(种别码、属性值) 交给语法分析使用。 本程序规定输出用 KeyWord 代表关键字,Word 代表普通标识符, Digit 代表阿拉伯数字,
3、SingleWord 代表单分界符,DoubleWord 代表双分 界符,ERROR 代表无法识别的字符。 2、课程设计要求: 每个学生应完成:课题的需求分析,词法分析器的设计及开发,撰写 课程设计报告等。课程设计环境:本系统使用 eclipse 软件在 JVM 上开发即使用 java 语言在 java 的 jdk开发环境中开发。编译原理课程设计报告第 1 页二、需求分析本系统需要实现对|+|-|*|/|;|(|)|=|=|a|z|A|Z0|9关键字为“if“,“else“,“then“,“for“,“while“,“do“,“and“,“not“,“or“。KeyWord 代表关键字,Wor
4、d 代表普通标识符,Digit 代表阿拉伯数字,SingleWord 代表单分界符,DoubleWord 代表双分界符,ERROR 代表无法识别的字。其相应功能实现三、系统设计编译原理课程设计报告第 2 页编译原理课程设计报告第 3 页四、系统实现四、系统实现import javax.swing.*;import java.awt.*;import java.io.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import
5、java.awt.event.WindowEvent;public class Compiler extends JFrame int row = 0;int line = 1;int begin = 0;int end = 0;JButton exit;JButton confirm;TextArea in = new TextArea(5,10);TextArea out = new TextArea(5,10);public Compiler() super(“词法分析器“);setSize(300,300);Container con=getContentPane();JPanel p
6、 = new JPanel();confirm = new JButton(“确定“);编译原理课程设计报告第 1 页exit = new JButton(“退出“);exit.addActionListener(new Monitor();confirm.addActionListener(new Monitor();p.add(in);p.add(confirm);p.add(exit);p.add(out);con.add(p);addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) S
7、ystem.exit(0););pack();setVisible(true);public class Monitor implements ActionListener public void actionPerformed(ActionEvent e) if (e.getSource() = exit) System.exit(0);if (e.getSource() = confirm) out.setText(“);row = 0;line = 1;compile();编译原理课程设计报告第 2 页public boolean isDigit(char c) return Chara
8、cter.isDigit(c);public boolean isLetter(char c) if (c = a else if (c = = n“); else i-;row-;state = 0;out.append(“运算符 n“);break;case 6:if (c = =) state = 0;out.append(“运算符 = n“); else i-;row-;编译原理课程设计报告第 9 页state = 0;out.append(“运算符 n“);break;case 7:if (c = =) state = 0;out.append(“运算符 = n“); else i-
9、;row-;state = 0;out.append(“运算符 = n“);break;case 8:if (c = =) state = 0;out.append(“运算符 != n“); else i-;row-;state = 0;out.append(“运算符 ! n“);break;编译原理课程设计报告第 10 页case 9:line+;row = 0;state = 0;break;case 10:if (isDigit(c) | c = .) else if(isLetter(c) out.append(“行“ + line + “ 列“ + row + “ error: “
10、+ “数字格式不正确 n“);int temp = i;i = getLocation(i,input)-1;row += i -temp;i-;row-;state = 0;break;case 11:if (isDigit(c) | isLetter(c) state = 11; else end = i;编译原理课程设计报告第 11 页String s = input.substring(begin, end);if (isKey(s) out.append(“关键字 “ + s + “n“); else out.append(“标识符 “ + s + “n“);i-;row-;state = 0;break;case 12:if (c = else i-;row-;out.append(“不明state = 0;break;case 13:if (c = |) out.append(“逻辑 or 运算符 | n“ ); else i-;编译原理课程设计报告第 12 页row-;out.append(“不明|运算符 n“ );state = 0;break;public static void main(String args) new Compiler();五、系统测试编译原理课程设计报告第 13 页编译原理课程设计报告第 14 页 六、六、课程设计小结课程设计小结