哪个面向Java的lexer解析器用于简单项目(ANTLR,DIY等)

我正在开发一个小型文本编辑器项目,并希望为几种语言添加基本语法高亮(Java,XML ……仅举几例)。 作为一种学习经历,我想添加一个流行或非流行的Java词法分析器。

你推荐什么项目。 Antlr可能是最知名的,但它似乎相当复杂和沉重。

以下是我所知道的选项。

  1. ANTLR
  2. Ragel(是的,它可以生成用于处理输入的Java源代码)
  3. 自己动手(我想我可以编写一个简单的令牌解析器并突出显示源代码)。

ANTLR或JavaCC将是我所知道的两个。 我首先推荐ANTLR。

ANTLR可能看起来既复杂又沉重,但您不需要使用它包含的所有function; 它很好地分层。 我非常喜欢用它来开发解析器。 对于初学者,您可以使用优秀的ANTLRWorks来可视化和测试您正在创建的语法。 能够观察它捕获令牌,构建解析树并逐步完成整个过程真的很棒。

对于您的文本编辑器项目,我会查看filter语法 ,这可能很适合您的需求。 对于filter语法,您不需要指定语言的整个词法结构,只需要指定您关注的部分(即需要突出显示,颜色或索引),并且您可以随时添加更多,直到您可以处理整个语言。

Google代码有新项目acacia-lex 。 由我自己编写,使用javax注释看起来很简单(到目前为止)java lexer。

SableCC

另一个有趣的选项(我还没试过)将是Xtext,它使用Antlr,但也包括为您的语言创建Eclipse编辑器的工具。

ANTLR是要走的路。 我不会手工制作它。 您还可以找到在ANTLR网站上查看语法可用于Java,XML等的文章。

另一种选择是Xtext 。 它不仅会为您的语法生成一个解析器,还会生成一个包含语法着色,错误标记,内容辅助和大纲视图的完整编辑器。

我以前用JFlex做过,对它非常满意。 但我突出的语言很简单,我不需要解析器生成器,所以你的里程可能会有所不同。

JLex和CUP分别是不错的词法分析器和解析器生成器。 我目前正在使用它们为我正在开发的项目开发一种简单的脚本语言。

我不认为你需要一个词法分析器。 您只需要首先读取文件扩展名以检测语言,然后从列出语言关键字的xml文件中轻松找到它们并突出显示它们。