1.看到:
antlr.preprocessor.PreprocessorTokenTypes
antlr.preprocessor Class PreprocessorLexer
以为antlr终于有普通(C语言文件,EDDL语言文件等等)的预处理呢
2.实际上后来发现是:
是antlr解析自己的(.g的)grammar文件
自己的预处理
即:
antlr语言自身解析输入语法文件的预处理
而非:
用antlr预处理其他语言文件
3.所以:
后来去anltr的api:
http://antlr3.org/api/Java/index.html
中,的确还是没有找到,任何关于preprocess的支持。
【结论】
antlr中,对于用各种语言实现的,对于编译原理中涉及到的,输入代码文件的(比如.c,.h等源码)的预处理(include文件,宏替换,#if条件判断等等(叫做directive))的支持,
还是不支持的,至少没有人帮你写好的。
(只有别的个别的可参考的,比如java版本的preprocess方面的代码,供你参考)
而此处看到的预处理,只是ANTLR本身,内部实现方面,为了识别你所写的.g的antlr的语言,去处理而已,不是用antlr实现的,去对于普通文件的预处理。
注:
关于用antlr实现对于普通文件的预处理,可参考之前的一些折腾:
【记录】用antlr的preprocess去预处理一个新的eddl文件去除eddl中不支持的元素对应的文件内容
【记录】将antlr v2的C/C++的preprocess,即cpp.g,转换为antlr v3
转载请注明:在路上 » 【记录】关于ANTLR中对于预处理的支持:以为支持普通文件的预处理呢,但是实际上是ANTLR自身识别你写的语法文件的预处理