【背景】
拿到一个新的(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中不支持的元素对应的文件内容