?? parsing.java
字號(hào):
package trans;
import java.util.Stack;
import semantic.Action;
import semantic.ActionSet;
import semantic.GoState;
import semantic.Activity;
import semantic.ParserException;
import semantic.Rate;
import semantic.RateException;
import semantic.Scanner;
import semantic.Symbol;
import semantic.Token;
import semantic.Process;
public class Parsing {
private Scanner scan;
private GoState actor;
private static boolean isEnd=false;
public Stack actstack=new Stack();
public Stack symstack=new Stack();
Parsing(Scanner s,GoState a)
{
scan=s;
actor=a;
Action.initialize();
Rate.initialize();
Process.initialize();
isEnd=false;
}
public static boolean isEnd()
{
return isEnd;
}
public static void setEnd(boolean f)
{
isEnd=f;
}
public void finalize()
{
actstack=null;
symstack=null;
}
public Symbol parser() throws ParserException,RateException
{
Symbol sym=null;
symstack.add(new Symbol(Token.EOF));
actstack.add(new Integer(0));
Symbol curToken=scan.next_token();
while(!isEnd)
{
Integer state=(Integer)actstack.peek();
int act=actor.get_action(state.intValue(),curToken.token);
if(act>0)
{
Integer newstate=new Integer(act-1);
actstack.add(newstate);
symstack.add(curToken);
curToken=scan.next_token();
}else if(act<0)
{
int a=-act-1;
sym=actor.do_action(a,symstack);
short s_num=actor.sym_num(a);
short s_size=actor.sym_size(a);
for(int i=0;i<s_size;i++)
{
symstack.pop();
actstack.pop();
}
Integer item=(Integer)actstack.peek();
act=actor.get_reduce(item.intValue(),s_num);
symstack.push((Object)sym);
actstack.push(new Integer(act));
}else
{
sym=(Symbol)symstack.peek();
setEnd(true);
throw new ParserException("異常退出!行:"+Lexer.getLine()+" 列:"+Lexer.getColumn());
}
}
return sym;
}
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -