【背景】
拿到一个新的(hart的)dd(eddl)文件,现在其中有些element(元素)不支持,所以需要手动处理一下。
但是需要先去用之前的antlr的preprocess.g去预处理一下,处理其中的include文件,宏定义等内容。
【折腾过程】
1.在Eclipse中弄了个新的java项目:
antlrPreprocessTest
然后把对应的preprocess.g
然后把preprocess.g,通过antlrworks编译生成的,非debug版本的:
preprocessLexer.java
preprocessParser.java
加载到项目中,然后再写个测试文件:
antlrPreprecessTest.java
内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | /** * [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中不支持的元素对应的文件内容