📄 lexer.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 + -