抽象语法树手动生成--java实现

本人博客内编译原理文章的配套资源jar包,包括词法分析,语法分析,中间代码生成,静态语义检查,代码解释执行以及抽象语法树的手动生成:https://download.csdn.net/download/as1072966956/10448935

转载请注明出处。


ManualAST.java

package sch.cauc.edu.token;

import org.eclipse.jdt.core.dom.AST;
import org.eclipse.jdt.core.dom.Assignment;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.ExpressionStatement;
import org.eclipse.jdt.core.dom.IfStatement;
import org.eclipse.jdt.core.dom.InfixExpression;
import org.eclipse.jdt.core.dom.MethodInvocation;
import org.eclipse.jdt.core.dom.WhileStatement;

import edu.ustc.cs.compile.util.ir.HIRPack;

//import org.eclipse.jdt.core.dom.*;
//import edu.ustc.cs.compile.util.ir.HIRPack;
/**
 * ManualAST
 * 创建人:xrzhang 
 * 时间:2018年5月19日-下午3:54:50 
 * @version 1.0.0
 *
 */
public class ManualAST{
	
	public static void main(String [] args) {
		HIRPack ir = new HIRPack();
		ManualAST testcase=new ManualAST();
		ir.setIR(testcase.createSampleAST());
		ir.showIR();
	}
	/**
	 * 
	 *
	 * 产生一个如下程序的AST。
*

	 *{
	 *	m=12;
	 *	n=21;
	 *	if(m
* 方法名:createSampleAST * 创建人:xrzhang * 时间:2018年5月19日-下午3:54:23 * 邮件:[email protected] * @return Block * @exception * @since 1.0.0 */ private Block createSampleAST() { AST ast = AST.newAST(AST.JLS3); Assignment assign; ExpressionStatement ex; InfixExpression infixEx; //main 方法体 Block mainBody = ast.newBlock(); //赋值表达式m=12 assign = ast.newAssignment(); assign.setLeftHandSide(ast.newSimpleName("m")); assign.setOperator(Assignment.Operator.ASSIGN); assign.setRightHandSide(ast.newNumberLiteral("12")); ex=ast.newExpressionStatement(assign); mainBody.statements().add(ex); //赋值表达式n=15 assign = ast.newAssignment(); assign.setLeftHandSide(ast.newSimpleName("n")); assign.setOperator(Assignment.Operator.ASSIGN); assign.setRightHandSide(ast.newNumberLiteral("15")); ex=ast.newExpressionStatement(assign); mainBody.statements().add(ex); //关系表达式m

抽象语法树手动生成--java实现_第1张图片


你可能感兴趣的:(java源码,编译原理,编译原理)