⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lexer.java

📁 《j2ee开发全程实录》随书源码
💻 JAVA
字号:
package com.cownew.ctk.common.stringSep;

/**
 * 词法分析器
 * 
 * @author yangzk
 * 
 */
public class Lexer
{
	private StringReader strReader = null;

	public Lexer(String str)
	{
		strReader = new StringReader(str);
	}

	// 如果当前为>:下边的是;,则为word=word+;,next();如果下边的是>,则为word=word+>,
	//
	// next(),否则throw
	// 如果当前为;,则为return sep
	// 如果为普通字符:下边是>,下下边是>,则word=word+cc+> next next;下边是>,下下
	//
	// 边是;,则word=word+cc+;,next next ;如果下边为;,则next,return word;如果为普通
	//
	// 字符则word=word+c;
	public final Token next() throws ParserException
	{
		String strValue = "";
		for (; !strReader.eof();)
		{
			char c = strReader.next();
			if (c == '>')
			{
				char nc = strReader.lookup(0);
				if (nc == ';')
				{
					strReader.next();
					strValue = strValue + ';';
				} else if (nc == '>')
				{
					strValue = strValue + '>';
					strReader.next();
				} else
				{
					throw new ParserException("unreachable");
				}
			} else if (c == ';')
			{
				Token tk = new SepToken();
				return tk;
			} else
			{
				if (!strReader.eof(0) && strReader.lookup(0) == '>'
						&& !strReader.eof(1) && strReader.lookup(1) == '>')
				{
					strValue = strValue + c + '>';
					strReader.next();
					strReader.next();
				} else if (!strReader.eof(0) && strReader.lookup(0) == '>'
						&& !strReader.eof(1) && strReader.lookup(1) == ';')
				{
					strValue = strValue + c + ';';
					strReader.next();
					strReader.next();
				} else if (!strReader.eof(0) && strReader.lookup(0) == ';')
				{
					strReader.next();
					strValue = strValue + c;
					return new WordToken(strValue);
				} else if (strReader.eof(0))
				{
					strValue = strValue + c;
					return new WordToken(strValue);
				} else
				{
					strValue = strValue + c;
				}
				
				if(strReader.eof(0)||strReader.lookup(0) == ';')
				{
					return new WordToken(strValue);
				}
			}
		}
		return null;
	}

	public static void main(String[] args)
	{
		try
		{
			Lexer lexer = new Lexer("abd>>3>>>;3;dde>>>;3;aa");
			for (Token t = lexer.next(); t != null; t = lexer.next())
			{
				if (t instanceof WordToken)
				{
					System.out.println(((WordToken) t).getValue());
				} else
				{
					System.out.println("-------------------------");
				}
			}
		} catch (ParserException e)
		{
			e.printStackTrace();
		}
	}

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -