编译原理词法分析java程序报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件学院
编译原理实验报告
实验名称:词法分析器
班级: Java104 姓名:周瑞芳
学号: 201007092413
时间: 2013年4月27日
1.实验题目
此次词法分析器实验的目的是设计并且实现一个词法分析程序,加深对词法分析原理的理解。并掌握在对程序设计语言源程序进行扫描过程中将其分解为各类单词的词法分析方法。
实验要求
此次词法分析器实验要求源文件中的源代码,识别出具有独立意义的单词等,其中包括:保留字(关键字)、标识符、常数、运算符、分隔符等五大类。其中运算符要求识别出“++”,“+=”等复杂运算符。并依此将识别出的独立个体词法输出。输出的格式要求是按照二元式的形式,如(1,public)。另外,遇到错误时可显示“Error”,然后跳过错误部分继续显示。
2.算法设计
算法设计思路
1.利用循环数组和字符串下标和截取字符串等基本方法来实现。
2.调用isLetter(char charr)方法来判断读取的字符是否是字母。
3.调用isMath(char charr)方法来判断读取的字符是否是数字。
4.调用isJieFu(char charr)方法来判断读取的字符是否是界符。
5.调用isCompu(char charr)方法来判断读取的字符是否是运算符。
6.调用isKeyword(String str)方法来判断截取的字符串是否是关键字。
3.调试和测试
(1)调试过程总结
经过数次调试,最终成功调试了程序,实现了所需功能。
(2)给出实验结果,如下图:
4.实验总结
经过此次词法分析器的实验,利用所学的变成高级语言实现了一个词法分析器,输入的源代码能够被分析器解析出来。此次实验的要求程序能识别出具有独立意义的单词、字符等,其中包括关键字(保留字)、常数、标识符、运算符、分隔符等五类。其中运算符要求对“++”等复杂运算符能够成功识别。输出的格式要按照二元式的形式,如(public,关键字),而且在遇到错误时要显示“error”,紧接着跳过错误部分继续显示。
在此次编译原理实验,通过老师的细心讲解。我们利用老师讲的词法分析方法,用java语言来编程实现的。
此次词法分析实验,熟练掌握了词法分析的原理,在老师的指导下,顺利的独立完成。在这里对老师的指导和同学的帮助表示感谢。
5.附录(源程序)
//import javax.swing.*;
import javax.swing.border.TitledBorder;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ciFa extends JFrame{
private JButton jbtShow = new JButton("进行词法分析");
private JTextArea jta = new JTextArea();
private JTextArea jtaOut = new JTextArea();
private JPanel jpl=new JPanel();
private String intput ="";
private String output ="";
private compiler comp = new compiler();
public static void main(String[] args)
{
ciFa frame = new ciFa();
frame.setTitle("词法分析器");
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(600, 400);
frame.setVisible(true);
}
public ciFa()
{
jta.setWrapStyleWord(true);
jta.setLineWrap(true);
jtaOut.setWrapStyleWord(true);
jtaOut.setLineWrap(true);
jtaOut.setEditable(false);
JScrollPane scrollPane = new JScrollPane(jta);
JScrollPane scrollPane2 = new JScrollPane(jtaOut);
scrollPane.setPreferredSize(new Dimension(300,300));
scrollPane2.setPreferredSize(new Dimension(300,300));
jtaOut.setBorder(new TitledBorder("词法分析结果"));
jta.setBorder(new TitledBorder("请在这输入"));
jpl.setLayout(new GridLayout(1,2));
jpl.add(jta);
jpl.add(jtaOut);
add(jbtShow,BorderLayout.SOUTH);
add(jpl);
jbtShow.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
intput = jta.getText();