• 大小: 7KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-07-15
  • 语言: Java
  • 标签: 编译原理  

资源简介

识别保留字:if、int、for、while、do、return、break、continue等等;单词种别码为1。
其他的都识别为标识符;单词种别码为2。
常数为整数或浮点数;单词种别码为3。
运算符包括:+、-、*、/、=、>、=、<=、!= ;单词种别码为4。
分隔符包括: “,”“;”“(”“)”“{”“}”等; 单词种别码为5。
处理注释(去掉注释): /* */

资源截图

代码片段和文件信息

import javax.swing.JTextArea;

public class LexicalAnalyzer {

    static String[] rwtab=new String[]{“main““if““then““while““do““static“
                                “int““double““struct““break““else“
                                “long““switch““case““typedef““char“
                                “return““const““float““short““continue“
                                “for““void““sizeof“};   //已经定义的24个关键字,种别码从1开始
    static String storage=““;   //存储源程序字符串
    static StringBuilder token=new StringBuilder(““);     //存储单词自身组成的字符串

    private char lastchar; //单个读取字符
    private int index=0; //单行字符串脚标
    private int syn; //种别码
    private int row=1;

     //分析器
     void analyzer(){
        token.delete(0 token.length());                //置空token对象,清除
        lastchar=storage.charAt(index); //索引指向第0位
        if(((lastchar>=‘a‘&&lastchar<=‘z‘)||(lastchar>=‘A‘&&lastchar<=‘Z‘))&&index         index++; 
         token.append(lastchar);
            while(((lastchar>=‘0‘&&lastchar<=‘9‘)||(lastchar>=‘a‘&&lastchar<=‘z‘)||(lastchar>=‘A‘&&lastchar<=‘Z‘))&&index             lastchar=storage.charAt(index++);
             if((lastchar>=‘0‘&&lastchar<=‘9‘)||(lastchar>=‘a‘&&lastchar<=‘z‘)||(lastchar>=‘A‘&&lastchar<=‘Z‘)) {
             token.append(lastchar);
             }else {
             index--;
             }
            }
            syn=2;       //默认为识别出的字符串为自定义的标识符,种别码为2
            String s=token.toString();
            for(int i=0; i                if(s.equals(rwtab[i])){     
                    syn=1;
                    break;        //识别出是关键字
                }
            }
        }else if((lastchar>=‘0‘&&lastchar<=‘9‘)&&index         index++;
         token.append(lastchar);
            while((lastchar>=‘0‘&&lastchar<=‘9‘||lastchar==‘.‘)&&index                lastchar=storage.charAt(index++);
                if((lastchar>=‘0‘&&lastchar<=‘9‘)||lastchar==‘.‘) {
                  token.append(lastchar);
                }else {
                 index--;
                }
            }
            syn=3; //整数的种别码为3
        }else if(index         index++;
         switch(lastchar){
         case ‘+‘:
            case ‘-‘:
            case ‘*‘:
             token.append(lastchar);
             syn=4;
             break;
            case ‘<‘:
                token.append(lastchar);
                syn=4;
                if(index                 lastchar=storage.charAt(index);
                    if(lastchar==‘=‘){
                        token.append(lastchar);
                        index++;
                    }else if(lastchar==‘>‘){
                        token.append(lastchar);
                        index++;
                    }
                }
            

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     文件        5908  2019-11-24 21:03  LexicalAnalyzer.java
     文件        2383  2019-11-24 21:03  Mainframe.txt
     文件        4633  2019-11-29 13:40  词法分析器.jar

评论

共有 条评论