编译原理词法分析器java

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一词法分析器的设计

一、实验目的

1.理解词法分析器的任务和输出形式

2.理解扫描器的工作原理

3.掌握状态转换图的绘制以及单词的识别技术

4.掌握词法分析器的设计过程,能够使用某种高级语言实现一个词法分析器

二、实验环境

Myeclipse

三、实验要求

给出一个简单的词法语言规则描述,其中:1开头的种别码为关键词,2开头的为算符,3开头的为界符,4开头的为标识符,5开头的为常数,标识符为字母开头,以字母和数字组成的任意符号串,常数为整数,即以数字组成的符号串。

四、实验难点

1.对整数的二进制转换,以及对指针的操作

2.标识符的设置

五、实验代码

1.ciFa.Java

package com.yaoer.test1;

import javax.swing.*;

import javax.swing.border.TitledBorder;

import java.awt.*;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

@SuppressWarnings("serial")

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();

* @param args

*/

public static void main(String[] args)

{

ciFa frame = new ciFa();

frame.setTitle("词法分析器");

//frame.setLocationRelativeTo(frame);

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(500, 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(2,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();

output=puterComp(intput);

jtaOut.append(output);

}

});

}

piler.Java

package com.yaoer.test1;

public class compiler {

public String computerComp(String str)

{

String output="";

int index=0;

int k = 0;

while(index

{

if(isJieFu(str.charAt(index))!=-1){ //判断界符

output+=("( 30"+isJieFu(str.charAt(index))+" "+str.charAt(index)+" 界符)");

index++;

}else if(isMath(str.charAt(index))){ //判断常数

int index1=index;

output+=("( ");

String sub;

String result;

while(isMath(str.charAt(index))){

output+=(str.charAt(index));

index++;

if(index>=str.length()){

if(str.charAt(index1)=='0'){

if(index1+1>=str.length()){

sub =str.substring(index1, index);

result = Zhuan(sub);

output+=(" "+result+" 数字)");

}else{

if(isMath(str.charAt(index1+1))){

output+=(" 非法字符)"); }

else{

sub =str.substring(index1, index);

result = Zhuan(sub);

output+=(" "+result+" 数字)");

}

}

}else{

sub =str.substring(index1, index);

result = Zhuan(sub);

output+=(" "+result+" 数字)");

相关文档
最新文档