王朝网络
分享
 
 
 

关于词法分析器的小程序

王朝java/jsp·作者佚名  2006-01-09
宽屏版  字体: |||超大  

class ParserException extends Exception

{

public ParserException(String message)

{

super(message);

}

}

class Token

{

public final static int INVALID = -1;

public final static int LEFTPARENTHESIS = 0;

public final static int RIGHTPARENTHESIS = 1;

public final static int ADD = 2;

public final static int SUB = 3;

public final static int MUL = 4;

public final static int DIV = 5;

public final static int NUM = 6;

private String content;

private int type;

public Token(String content, int type)

{

this.content = content;

this.type = type;

}

public String getContent()

{

return content;

}

public double getDoubleValue()

{

return Double.parseDouble(content);

}

public int getType()

{

return type;

}

}

public class Lex

{

private String buffer;

private int colNum = 0;

private char curChar;

public Lex(String input)

{

this.buffer = input;

curChar = getChar();

}

private char getChar()

{

char ch = '#';

while(buffer!=null && colNum<buffer.length())

{

ch = buffer.charAt(colNum);

colNum++;

break;

}

return ch;

}

private void skipBlank()

{

while(curChar == ' ')

curChar = getChar();

}

public Token getToken() throws ParserException

{

Token tk = null;

if(curChar == ' ')

skipBlank();

switch(curChar)

{

case '(':

tk = new Token("(",Token.LEFTPARENTHESIS);

curChar = getChar();

break;

case ')':

tk = new Token(")",Token.RIGHTPARENTHESIS);

curChar = getChar();

break;

case '+':

tk = new Token("+",Token.ADD);

curChar = getChar();

break;

case '-':

tk = new Token("-",Token.SUB);

curChar = getChar();

break;

case '*':

tk = new Token("*",Token.MUL);

curChar = getChar();

break;

case '/':

tk = new Token("/",Token.DIV);

curChar = getChar();

break;

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

case '.':

tk = parseNumber();

break;

case '#':

case '=':

tk = null;

break;

default:

tk = new Token("Invalid character",Token.INVALID);

curChar = getChar();

break;

}

return tk;

}

private Token parseNumber() throws ParserException

{

int dotNum = 0;

boolean key = true;

StringBuffer buf = new StringBuffer();

buf.append(curChar);

if(curChar == '.') dotNum++;

while(key)

{

curChar = getChar();

switch(curChar)

{

case '0':

case '1':

case '2':

case '3':

case '4':

case '5':

case '6':

case '7':

case '8':

case '9':

buf.append(curChar);

continue;

case '.':

dotNum++;

if(dotNum > 1)

throw new ParserException("the string inputed error at column:" + colNum);

buf.append('.');

continue;

default:

key = false;

continue;

}

}

return new Token(buf.toString(),Token.NUM);

}

public static void main(String args[]) {

try {

Lex lex = new Lex(args[0]);

while(true) {

Token tk = lex.getToken();

if(tk == null) {

break;

}

else

System.out.println(tk.getContent());

}

}

catch(Exception e) {

e.printStackTrace();

}

}

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有