【背景】
拿到一个新的(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时能输出更详细的信息
【总结】
转载请注明:在路上 » 【记录】用antlr的preprocess去预处理一个新的eddl文件去除eddl中不支持的元素对应的文件内容