码迷,mamicode.com
首页 > 编程语言 > 详细

java实现的简单词法分析器

时间:2016-05-24 20:59:20      阅读:269      评论:0      收藏:0      [点我收藏+]

标签:

一个简单的词法分析器

  词法分析(Lexical Analysis) 是编译的第一阶段。词法分析器的主要任务是读入源程序的输入字符、将他们组成词素,生成并输出一个词法单元序列,每个词法单元对应一个词素。这个词法单元序列被输出到语法分析器进行语法分析。

有关原理的介绍参考http://www.cnblogs.com/yanlingyin/archive/2012/04/17/2451717.html

这里就不多说了。

下面直接代码,相关注释在代码中均已经给出,对字符串的处理完全按照自己的思路编写的。

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

技术分享

其中读取的是E盘下的test.txt文本文档:

技术分享

运行结果如下:

技术分享

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

public class Word {
    /**
    *1~20号为关键字,用下标表示,i+1就是其机器码;21~40号为操作符,用下标表示,i+21就是其机器码;41~60号为分界符,
    *  用下标表示,i+41就是其机器码;用户自定义的标识符,其机器码为51;常数的机器码为52;
    *不可以识别的标识符,其机器码为0
    **/
    //关键字
    private String keyword[]={"int","long","char","short","float","double",
            "if","else","for","while","return","break","continue","switch","case",
            "default","void","struct","static","do"};
    //运算符
    private String operator[]={"+","-","*","/","%","=",">","<","!",
            "==","!=",">=","<=","++","--","&","&&","||","[","]"};
    //分界符
    private String delimiter[]={",",";","(",")","{","}","\‘","\"",":","#"};
    //是否为数字
    public boolean isDigit(String str){
        char ch;
        if(str==""){
            return false;
        }
        for(int i=0;i<str.length();i++){
        ch=str.charAt(i);
        if(ch<‘0‘||ch>‘9‘){
        return false;
        }
        }
        return true;
    }
    //是否为字母或字符串
    public boolean isLetter(String str){
        char ch;
        if(str==""){
            return false;
        }
        for(int i=0;i<str.length();i++){
            ch=str.charAt(i);
            if(ch<‘A‘||ch>‘z‘||(ch>‘Z‘&&ch<‘a‘)){
                return false;
            }
        }
        return true;
        
    }
    //判断是否为运算符
    public boolean isOperator(String str){
        char ch;
        char ch2;
        //非运算符
        if(str==""||str.length()==0||str.length()>2){
            return false;
        }
        if(str.length()==1){
            //一个元算符
            for(int i=0;i<operator.length;i++){
                if(str.equals(operator[i])){
                    return true;
                }
            }
            return false;
        }else if(str.length()==2){
            //两个运算符
            ch=str.charAt(0);
            ch2=str.charAt(1);
            if(ch2==‘=‘&&(ch==‘!‘||ch==‘>‘||ch==‘<‘||ch==‘=‘)){
                return true;
            }else if(ch==‘+‘&&ch2==‘+‘){
                return true;
            }else if(ch==‘-‘&&ch2==‘-‘){
                return true;
            }else if(ch==‘|‘&&ch2==‘|‘){
                return true;
            }else if(ch==‘&‘&&ch2==‘&‘){
                return true;
            }else{
                return false;
            }
        }
        return true;
        
    }
    //判断是否为标识符(此处标识符包含了关键字,下面获取机器码需要去掉关键字)
    public boolean isIdentifier(String str){
        if(str==""){
            return false;
        }else if(str.length()==1){
            if(isLetter(str)||str=="_"){
                return true;
            }else{
                return false;
            }
        }else{
            char ch=str.charAt(0);
            String str2=str.substring(1, str.length()-1);
            String str3;
            if((ch>‘a‘&&ch<‘z‘)||(ch>‘A‘&&ch<‘Z‘)||ch==‘_‘){
                for(int i=0;i<str2.length();i++){
                    str3=str2.substring(i, i+1);
                    if(!(isDigit(str3)||isLetter(str3))){
                        return f

java实现的简单词法分析器

标签:

原文地址:http://www.cnblogs.com/pokid/p/5524555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!