我正在开发一个小型文本编辑器项目,并希望为几种语言(Java、XML ..仅举几例)添加基本的语法突出显示。作为学习经验,我想添加一个流行或不流行的 Java 词法分析器。
你推荐什么项目。Antlr 可能是最知名的,但它看起来相当复杂和沉重。
这是我知道的选项。
- 蚂蚁
- Ragel(是的,它可以生成用于处理输入的 Java 源代码)
- 自己做(我想我可以编写一个简单的令牌解析器并突出显示源代码)。
ANTLR 或 JavaCC 将是我所知道的两个。我首先推荐ANTLR。
ANTLR 可能看起来既复杂又笨重,但您不需要使用它包含的所有功能;它的层次感很好。我非常喜欢用它来开发解析器。对于初学者,您可以使用出色的ANTLRWorks来可视化和测试您正在创建的语法。能够看到它捕获令牌、构建解析树并逐步完成整个过程真是太好了。
For your text editor project, I would check out filter grammars, which might suit your needs nicely. For filter grammars you don't need to specify the entire lexical structure of your language, only the parts that you care about (i.e. need to highlight, color or index) and you can always add in more until you can handle a whole language.
Google code has new project acacia-lex. Written by myself, it seems simple (so far) java lexer using javax annotations.
紫貂CC
另一个有趣的选项(我还没有尝试过)是 Xtext,它使用 Antlr,但还包括为您的语言创建 Eclipse 编辑器的工具。
ANTLR 是要走的路。我不会手工建造它。如果您浏览 ANTLR 网站,您还会发现语法可用于 Java、XML 等。
另一种选择是Xtext。它不仅会为您的语法生成解析器,还会生成带有语法着色、错误标记、内容辅助和大纲视图的完整编辑器。
我以前用JFlex做过,对它很满意。但是我强调的语言很简单,我不需要解析器生成器,所以你的里程可能会有所不同。
我认为您不需要词法分析器。您所需要的只是首先读取文件扩展名以检测语言,然后从列出语言关键字的 xml 文件中轻松找到它们并突出显示它们。