当前位置:首页 > 编译原理 LL(1)语法分析器java版 完整源代码
public class Accept2 { public
static
StringBuffer
stack=new
StringBuffer(\); public
static
StringBuffer
stack2=new
StringBuffer(\);
public static void main(String arts[]){ //stack2.deleteCharAt(0);
System.out.print(accept(stack,stack2)); } public
static
boolean
accept(StringBuffer
stack,StringBuffer stack2){//判断识别与否
boolean result=true; outer:while (true) {
System.out.format(\,stack+\); System.out.format(\,stack2+\); char c1 = stack.charAt(stack.length() - 1); char c2 = stack2.charAt(0); if(c1=='#'&&c2=='#') return true; switch (c1) {
case 'E':
if(!E(c2)) {result=false;break outer;} break;
case 'P': //P代表E’ if(!P(c2)) {result=false;break outer;} break; case 'T':
if(!T(c2)) {result=false;break outer;} break;
case 'Q': //Q代表T’ if(!Q(c2)) {result=false;break outer;} break; case 'F':
if(!F(c2)) {result=false;break outer;} break;
default: {//终结符的时候 if(c2==c1){
stack.deleteCharAt(stack.length()-1); stack2.deleteCharAt(0); //System.out.println(); } else{
return false; } } } if(result=false) break outer; }
return result; public static boolean E(char c) {//语法分析子程序boolean result=true; if(c=='i') {
stack.deleteCharAt(stack.length()-1); stack.append(\); }
else if(c=='('){
stack.deleteCharAt(stack.length()-1); stack.append(\);
}
E } else{
System.err.println(\推导时错误!不能匹配!\); result=false; }
return result; }
public static boolean P(char c){//语法分析子程序 P boolean result=true; if(c=='+') {
stack.deleteCharAt(stack.length()-1); stack.append(\); }
else if(c==')') {
stack.deleteCharAt(stack.length()-1); //stack.append(\ System.out.println(\); }
else if(c=='#') {
stack.deleteCharAt(stack.length()-1); //stack.append(\ System.out.println(\);
共分享92篇相关文档