【记录】用antlr的preprocess去预处理一个新的eddl文件去除eddl中不支持的元素对应的文件内容

【背景】

拿到一个新的(hart的)dd(eddl)文件,现在其中有些element(元素)不支持,所以需要手动处理一下。

但是需要先去用之前的antlr的preprocess.g去预处理一下,处理其中的include文件,宏定义等内容。

【折腾过程】

1.在Eclipse中弄了个新的java项目:

antlrPreprocessTest

然后把对应的preprocess.g

然后把preprocess.g,通过antlrworks编译生成的,非debug版本的:

preprocessLexer.java

preprocessParser.java

加载到项目中,然后再写个测试文件:

antlrPreprecessTest.java

内容如下:

/**
 * [File]
 * antlrPreprecessTest.java
 * 
 * [Function]
 * test antlr preprocess
 * do preprcess for input origin eddl file
 * 
 * [Version]
 * 2013-10-16
 * 
 * @author Crifan Li
 */

import java.io.IOException;
import java.util.Date;

import org.antlr.runtime.ANTLRFileStream;
import org.antlr.runtime.CharStream;
//import org.antlr.runtime.*;
import org.antlr.runtime.Token;

public class antlrPreprecessTest {
	static crifanLib crl;
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		crl = new crifanLib();

		// TODO Auto-generated method stub
		preprcessTest();

	}
	
	public static void preprcessTest()
	{
		String currentPath = "D:/DevRoot/eclipse/common_root/antlrPreprocessTest/src/";
		String ddFile = "";
		ddFile = "yamatake_dtsj3000_ypress_removedUpsuppoted.ddl";
		//ddFile = "test_expr.ddl";
		String ddFullFilename = currentPath + ddFile;
		CharStream cs = null;
		try {
			cs = new ANTLRFileStream(ddFullFilename);
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		
        preprocessLexer lexer = new preprocessLexer(cs);
        Token token;
        String processedStr = "";
        token = lexer.nextToken();
        //while (token != Token.EOF_TOKEN) {
        while (true) {
        	processedStr += token.getText();
        	//System.out.println(token.getText());
          //System.out.println(token.getType() + " :: " + token.getText());
          token = lexer.nextToken();
          
          if(token.getType() == preprocessLexer.EOF) {
              break;
            }
        }
        
        System.out.println(processedStr);
        
		Date curDate = new Date();
		String curDatetimeStr = crl.dateToString(curDate, "yyyy-MM-dd_hhmmss"); //2013-07-08_033034

		String outputFilename = "processedStr_" + curDatetimeStr + ".txt";
		String outputfullFilename = currentPath + outputFilename;
		crl.outputStringToFile(processedStr, outputfullFilename);
	}

}

接着可以去调试了。

2.期间,出现出错,但是始终找不到错误的原因,所以希望是:

也是像之前一样,第一次出错,就退出:

【已解决】在用antlr预处理一个新的hart的eddl文件时希望第一次出错就退出

3.接着,再起给其添加源码级调试:

【记录】在Eclipse中给ANTLR添加源码实现ANTLR的源码级的调试

4.然后由于此处输出错误信息很少,所以再去想办法输出更详细的错误信息:

【记录】用antlr预处理异常MismatchedTokenException时能输出更详细的信息

 

【总结】



发表评论

电子邮件地址不会被公开。 必填项已用*标注

无觅相关文章插件,快速提升流量