简易词法分析器-Java

编译原理课程设计
记录下,防丢

import java.util.Scanner;
public class BY0 {

	public static void main(String[] args) {
		System.out.println("输入开始");
		String token ;
		Scanner input = new Scanner(System.in);
		token = input.nextLine();					//输入
		input.close();
		char str[] = null;
		int j =0;									//记录token的指针位置
													//String word = "void" ;
													//System.out.println(Identify(word)+"00");
		for (int i1=0;i1<token.length();i1++)		//此for循环是在拆分token
			str = InputToArray(token);				//str[]是token的拆分
														//for (int i=0;i<token.length();i++)
														//System.out.println(str[i]);
		while(j<token.length())
		{
			String word1 = "" ;
			if (Character.isDigit(str[j]))//圈2
				{
					while(true)
					{
						if (Character.isDigit(str[j]))
							{
								word1 = word1 +str[j];
								j++;
							}
						else
							{
								System.out.println("("+word1+",数字)");
								break;
							}
					}
				}
            else if (Character.isLetter(str[j]))//圈1
			{
				while(true)
				{
					if (Character.isLetter(str[j]))
						{
							word1 = word1 +str[j];
							j++;
						}
					else
						{
							if (KeyName(word1))//调用一个表,查表
								System.out.println("("+word1+",关键字)");
							else if (Identify(word1))
                            	System.out.println("("+word1+",标识符)");
							else
								System.out.println("无法辨识  - > "+word1);
							break;
						}
				} 
			}
			else
			{
				word1 = word1+str[j];
			    if (str[j] == '>')
                {
                    j++;
                    if (str[j] == '=')
                    {word1 = ">=";j++;}
                    else
                        {
                            //j--;
                            word1 =">";
                        }
                }
			    else if (str[j] == '<')
                {
                    j++;
                    if (str[j] == '=')
                        {word1 = "<=";j++;}
                    else
                        {
                            //j--;
                            word1 ="<";
                        }
                }
			    if (Delimiter(word1))		//界符
                		{
					    	System.out.println("("+word1+",界符)");
					    	j++;
				    	}
			    else if (str[j] != 0 && str[j] != ' ')			//java初始化为0不为' '
                    {
                							//System.out.println("j="+j);
                		System.out.println("无法辨识 - >> "+str[j]);//最后报错
                		j++;
                    }
			    else if (str[j] == ' ')
                	j++;
			}
		}
	}
	public static char[] InputToArray(String temp_token)
	{
		char str[] = new char[100];
		for (int i =0;i<temp_token.length();i++)
			{
			    while(temp_token.charAt(i) ==' '&&i!=(temp_token.length()-1)&&temp_token.charAt(i+1) ==' ')
                    i++;
			    //if (temp_token.charAt(i)!= '')//空格预处理
                str[i] = temp_token.charAt(i);
			}
														//for (int i =0;i<str.length;i++)
														//{
														//	System.out.println(str[i]);
														//}
		return str;
	}
	public static boolean KeyName(String word)
	{
	    String keyName[] = new String[100];
	    keyName[0] = "void";
	    keyName[1] = "public";
	    keyName[2] = "int";
	    for (int i = 0;i<keyName.length;i++)
        {
            if (word.equals(keyName[i]))
                return true;
        }
        return false;
	}
	public static boolean Identify(String word)
	{
	    String identify[] = new String[100];
	    identify[0] = "by";
	    identify[1] = "abc";
	    identify[2] = "first";
	    for (int i = 0;i<identify.length;i++)
        {
            if (word.equals(identify[i]))
                return true;
        }
        return false;
	}
	public static boolean Delimiter(String word)
	{
	    String delimiter[] = new String[100];
	    delimiter[0] = "(";
	    delimiter[1] = ")";
	    delimiter[2] = "+";
	    delimiter[3] = "-";
	    delimiter[4] = "*";
	    delimiter[5] = ";";
	    delimiter[6] = ">";
	    delimiter[7] = "<";
	    delimiter[8] = "<=";
	    delimiter[9] = ">=";
	    delimiter[10] = "=";
	    for (int i = 0;i<delimiter.length;i++)
        {
            if (word.equals(delimiter[i]))
                return true;
        }
        return false;
	}
}

程序运行结果:在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值