词法分析器编译预处理程序 java版 修改

这是一个使用Java编写的词法分析器预处理程序,旨在理解词法分析过程。程序删除空格、处理行数和列数,识别特定符号和关键字,并进行简单的编译预处理。实验要求包括从源文件读取字符、统计位置信息、删除空白字符、拼接单词和填充标识符表。程序能够处理‘//’注释,但不处理‘/* */’注释。程序包含一个简单的用户界面,允许打开文件并进行词法检查,但存在一些限制,例如无法保存分析记录和处理某些复杂注释。
摘要由CSDN通过智能技术生成
 
题目:词法分析器编译预处理程序
 
目的:通过完成词法分析程序,了解词法分析的过程
 
实验内容:用 java 实现对词法分析器编译预处理程序子程集程序设计语言的语法识别程序
 
实验要求:将该语言的源程序,也就是相应字符流程序转换分析
词法分析器编译预处理设计思想:为了实现的便宜程序实用,这里规定源程序可采用自由书写格式,即一行内可以书写多个语句,一个语句可以占领多行书写;表示符的前 20 个字符有效;整数用 2 个字节表示;长整数用 4 个字节表示。这样的词法分析器的主要工作内容是(由于时间太仓促,解吸语句自己在程序中更改):
1        从源程序文件中读入字符。
2        统计行数和列数用于错误单词的定位。
3        删除空格类字符,包括回车、制表符空格。
4        按拼写单词,并用(内码,属性)二元式表示
5        根据需要是否填写表识符表供以后各阶段使用
这里采用的编译程序的实现是一遍扫描,即从左到右只扫描依次源程序,也就是词法分析作为语法分析的一个子程序。故在编写词法分析程序时,用重复调用词法分析子程序取一单词的方法得到整个源程序得到整个程序的内码流。扫描程序流程图
流程图:待传
实验结果:待传
总结 本程序特殊符号: '/n'    ','     ' '     '/t'    '{'   '}'   '('   ')'   ';'   '='   '+'    '-'   '*'   '/'         
                             关键字: int  real   for  while  do  begin  end  if  then  AND  OR  NOT  repeat  until  read   write  return  true  false  boolean  program  const  to
                             字母以及数字进行词法分析,对源代码进行编译预处理将注析部分消除,程序成功运行
             不足之处:匆促只中难免有些不足之处,不能将代码进行词法的分析的记录进行保存,  在编译预处理部分只能对 “//” 进行处理  未能对 “/*  */”  进行处理,以及对编译部分在处理 符号时候是将程序中;符号前打一空格。                         
          通过本次学习,自己学习到如何编写 java Applictaion 程序,了解了词法分析的过程
附录 代码
import java.awt.*;
import java.awt.event.*;
import java.io.*;
public class Compiler extends Frame implements ActionListener{
        int row = 1;
        int line = 1;
        MenuBar mb = new MenuBar();
   
        Menu fileMenu = new Menu("File");
        Menu actionMenu = new Menu("Project");
        MenuItem closeWindow = new MenuItem("Exit");
        MenuItem openFile = new MenuItem("Open file");
        MenuItem lexical_check = new MenuItem("Check lex");
        int begin = 0;
        int end = 0;
        TextArea text = new TextArea(25,60);        
        TextArea error_text = new TextArea(10,60);  
   
        FileDialog file_dialog_load = new FileDialog(this, "Open file...", FileDialog.LOAD);
        Compiler(){
            
                this.setLayout(new FlowLayout());
      
                this.setMenuBar(mb);
                mb.add(fileMenu);
                mb.add(actionMenu);
                fileMenu.add(openFile);
                fileMenu.add(closeWindow);
                actionMenu.add(lexical_check);
                this.add(text);
                this.add(error_text);
                error_text.setText("Lexical Information: /n");
                closeWindow.addActionListener(this);
                openFile.addActionListener(this);
                lexical_check.addActionListener(this);
                this.setSize(500, 600);
                this.addWindowListener(new WindowAdapter(){
                        public void windowClosing(WindowEvent e){
                                System.exit(0);
                        }
                });
                this.setVisible(true);
        }
        public static void main(String[] args) {
                Compiler compiler = new Compiler();
        }

        public void actionPerformed(ActionEvent e){
                if(e.getSource() == closeWindow){
                        System.exit(0);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值