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

📄 exprparser.java

📁 实现的一个简单的语言编译器,可以编译类JAVA 的小语言
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
    public ASTNode getAST() {        return root;    }    public boolean success(){    	return go;    }    private int counter;    private boolean methodBody;    private HashMap curTable = new HashMap();    private LinkedList basStack = new LinkedList();    private LinkedList mayError = new LinkedList();    private LinkedList soError = new LinkedList();    private LinkedList varError = new LinkedList();    public HashMap majesty = new HashMap();    public HashMap methodTable = new HashMap();    private int blockTag = 0;    private boolean defineTag = false;    private boolean go = true;        private boolean hasDefined(SimpleName n){    	defineTag = false;    	ListIterator iter = basStack.listIterator(basStack.size());		HashMap temp = curTable;		while(iter.hasPrevious()){			if(temp.containsKey(n.getIdentifier())) return true;			temp = (HashMap)iter.previous();				}		if (temp.containsKey(n.getIdentifier())) {defineTag = true;return true;}		return false;   }   private Type typeClone(Type n){   		if (n.isPrimitiveType()) return ast.newPrimitiveType(((PrimitiveType)n).getPrimitiveTypeCode());   		else if (n.isArrayType()) {   			Type t =typeClone(((ArrayType)n).getComponentType());   			    			ArrayType temp = ast.newArrayType(t);     			temp.setProperty("size",n.getProperty("size"));   			return temp;   		}   		else return ast.newSimpleType(ast.newSimpleName("String"));   }   private void parseError(String s,ASTNode x){    	System.out.println("[LINE."+x.getStartPosition()+"]Error:"+s);    	go = false;    }    private void parseWarning(String s,ASTNode x){    	System.out.println("[LINE."+x.getStartPosition()+"]Warning:"+s);    }
  private final ExprParser parser;

  /** Constructor */
  CUP$ExprParser$actions(ExprParser parser) {
    this.parser = parser;
  }

  /** Method with the actual generated action code. */
  public final java_cup.runtime.Symbol CUP$ExprParser$do_action(
    int                        CUP$ExprParser$act_num,
    java_cup.runtime.lr_parser CUP$ExprParser$parser,
    java.util.Stack            CUP$ExprParser$stack,
    int                        CUP$ExprParser$top)
    throws java.lang.Exception
    {
      /* Symbol object for return from actions */
      java_cup.runtime.Symbol CUP$ExprParser$result;

      /* select the action based on the action number */
      switch (CUP$ExprParser$act_num)
        {
          /*. . . . . . . . . . . . . . . . . . . .*/
          case 136: // name ::= IDENTIFIER 
            {
              SimpleName RESULT =null;
		int idleft = ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()).left;		int idright = ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()).right;		String id = (String)((java_cup.runtime.Symbol) CUP$ExprParser$stack.peek()).value;				RESULT = ast.newSimpleName(id);			RESULT.setSourceRange(idleft,1);		/*ListIterator iter = basStack.listIterator(basStack.size());		HashMap temp = curTable;		boolean hasDefined = false;		while(iter.hasPrevious()){			hasDefined = temp.containsKey(RESULT.getIdentifier());			if (hasDefined) break;				temp = (HashMap)iter.previous();				}*/		if (!hasDefined(RESULT)) 		{			mayError.add(RESULT);			//System.out.println(RESULT.getIdentifier()+"not found immediately");		}	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("name",43, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 135: // binary_operator ::= AND 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.CONDITIONAL_AND;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 134: // binary_operator ::= OR 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.CONDITIONAL_OR;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 133: // binary_operator ::= LESS_EQ 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.LESS_EQUALS;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 132: // binary_operator ::= GREAT_EQ 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.GREATER_EQUALS;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 131: // binary_operator ::= LESS 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.LESS;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 130: // binary_operator ::= GREAT 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.GREATER;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 129: // binary_operator ::= NOT_EQ 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.NOT_EQUALS;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 128: // binary_operator ::= EQ_EQ 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.EQUALS;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 127: // binary_operator ::= REMAINDER 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.REMAINDER;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 126: // binary_operator ::= DIV 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.DIVIDE;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 125: // binary_operator ::= MULT 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.TIMES;			
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 124: // binary_operator ::= MINUS 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.MINUS;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 123: // binary_operator ::= PLUS 
            {
              InfixExpression.Operator RESULT =null;
				RESULT = InfixExpression.Operator.PLUS;	
              CUP$ExprParser$result = parser.getSymbolFactory().newSymbol("binary_operator",33, ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), ((java_cup.runtime.Symbol)CUP$ExprParser$stack.peek()), RESULT);
            }
          return CUP$ExprParser$result;

          /*. . . . . . . . . . . . . . . . . . . .*/
          case 122: // unary_operator ::= NOT 
            {

⌨️ 快捷键说明

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