什么是和如何在antlr3中使用“岛语法”?Island语法antlr3
2
A
回答
1
嗯,我不知道你的意思到底是什么,但因为你没有提到你写的是什么,到目前为止我从这里开始:
http://www.antlr.org/wiki/display/ANTLR3/Island+Grammars+Under+Parser+Control
4
一个岛屿语法是一个对待大部分语言都是文本(“水”),并挑选出部分感兴趣的语言来使用语法规则(“岛”)进行解析。例如,你可以选择构建一个孤岛语法来挑选在C#程序中找到的所有表达式,并忽略变量/方法/类声明和语句语法(if,while,...)。
真正的问题是,“你应该使用岛语法吗?”。
的正面效益:
- 你不必为你写要处理的语言一个完整的,完整的语法。
缺点:
它并不总是很容易挑出感兴趣的源的一部分。例如, 您如何确保孤岛语法不会挑出被注释掉的代码块,除非您的岛语法详细解释了所有注释?岛语法的要点是避免进入这种细节,但在这里你必须。
您现在只能使用孤岛语法来关注问题。如果问题出现了,那么你的岛语法也可能不得不改变,而这并不容易。
程序操作中最有趣的问题要求您不仅能够确定语法(例如“解析”)并构建某种树来操作,而且还能够确定符号的含义。用岛屿语法,你已经有效地写下了这样做的可能性(除非你想包括块,声明等的所有语法...... oops突然间它不是岛语法,而是一个小的大陆语法) 。而那真的限制你可以做的。
打电话给我偏见,但我一直在做这种东西很长一段时间。我相信岛语法确实没有那么有用。我提出的替代方案是基于共同基础的许多语言的摊销成本解析器,其名称为DMS Software Reengineering Toolkit。
YMMV。
相关问题
- 1. ANTLR3语法参考?
- 2. Procedural Island Generation confusion
- 3. ANTLR3词法优先
- 4. 在antlr3语法中切换词法分析器状态
- 5. 查找Replica Island的项目
- 6. ANTLR3语法在ICSharpCode.TextEditor中突出显示隐藏通道
- 7. 是否可以将ANTLR3语法转换为正则表达式?
- 8. 在antlr3中从语法到Java抛出错误
- 9. 在antlr3语法中打印传入的令牌?
- 10. 用C语言中的antlr3解析一些特定的语句
- 11. 获取语义的复合规则的ANTLR3
- 12. 如何使用Antlr与antlr3
- 13. 如何序列化antlr3 AST
- 14. 从Antlr3转换为Antlr4
- 15. ANTLR3解析表达式
- 16. antlr3 c#代码生成
- 17. Antlr3匹配lexeme变体
- 18. Antlr3 - 解析器中的隐藏标记
- 19. 如何在ANTLR3中制作TreeParser?
- 20. 如何获取ANTLR3 TreeParser中的行号
- 21. 帮助解析日志文件(ANTLR3)
- 22. ANTLR3 C目标线程安全吗?
- 23. ANTLR3向我的树注入一个int
- 24. 任何使用antlr3的C项目?
- 25. antlr3 Unicode字符导致错误
- 26. ANTLR3规则EVAL具有非LL(*)
- 27. Django App Engine找不到antlr3模块
- 28. antlr3 - 读截流值的变量
- 29. 简单的Antlr3令牌解析
- 30. ANTLR3 C目标与C++异常