我可以使用标准的antlr4运行时来开发Android应用程序,在我的情况下,我只有一个解析器,但当我去打包它们时,Lint和proguard抱怨缺少swing类和其他。
是否有一个运行时的Antlr4是Android兼容的?
编辑:我已经建立了一个包含Antlr Lexer V4.2.2 Android端口的Eclipse Android库项目的页面。按如下所述进行建模。(http://www.forward.com.au/AndroidProgramming/index.html)
是否有一个运行时的Antlr4是Android兼容的?
花了一些时间解决我的问题。
i)从语法生成词法分析器Java文件,并使用标准运行时库检查是否正确
ii)从项目中删除运行库
iii)从antlr4运行时源目录中添加Java文件,每次一个来解决编译错误
需要删除所有的@NonNull和@Nullable引用
注释掉引用javax等的代码,主要是toString()和树显示方法
增加了数组的实现。copyOf和binarySearch, Android不提供给misc。跑龙套并且修复了文件中所有的引用。
删除所有对System的引用。out和System。err (TODO添加到Android日志调用中)
删除不支持的@SuppressWarnings
删除未使用的导入
整个atn和dfa运行时包已经移植到Android API 7 (Android V2.1+)
在misc包中省略GraphicsSupport.java、JFileChooserConfirmOverwrite.java、LogManager.java和TestRig.java
在Utils中删除waitForClose和addWindowListener方法,添加copyOf和binarySearch方法
在树包提交包gui,模式和xpath和其他类不需要编译,因为我只有一个词法分析器在这个项目。这是一个"完整"的端口需要更多的工作。
在运行时包省略ConsoleErrorListener.java (TODO替换为Android Log错误监听器),将DiagnosticErrorListener.java中的String.isEmpty()替换为(String.length() == 0);从分析器中删除了compileparsetreeppattern方法,因为我的Lexer不需要(TODO修复此问题),省略了ParserInterpreter需要ArrayDeque和Deque实现(TODO修复此问题),在识别器中删除了ConsoleErrorListener。例如,在RuleContext中删除save()和inspect()和toStringTree()方法,并用空字符串返回替换toString()。
结果是到Android的端口大约完成了80%。
如果你想要上面描述的Android库代码,请通过www.pfod.com.au联系我。