Eclipse中的Antlr IDE不起作用

我正在使用Antlr v3和java作为项目,并且在AntlrWorks中一切顺利,但是当我切换到eclipse的插件Antlr IDE时,解释器无法匹配我写的句子,告诉我不匹配。 在我看来,它无法识别我在lexer中指定的要跳过的单词列表。 然而,在AntlrWorks中完美运行也是如此。

有什么建议么?

我在eclipse中设置了antlr buider:Antlr Parser Generator v3.4

这可能是配置问题。 我有一些困难让一切工作,所以,没有找到任何一个地方如何做到这一点,我写了自己的文件。 希望这可以帮助。

如何在Eclipse Indigo中安装ANTLR IDE

使用Indigo R2和IDE 2.1.2进行测试

  1. 安装Eclipse。
  2. 下载包含ANTLR v2的ANTLR完整二进制文件jar。 提取到临时目录。 将antlr-nn文件夹复制到适当的永久位置,例如安装Eclipse的同一文件夹。
  3. 将ANTLR IDE更新站点添加到Eclipse。
    • 在Eclipse中,单击“帮助”并选择“安装新软件”。
    • 单击添加…按钮。
    • 在Add Repository窗口中,为Location类型http://antlrv3ide.sourceforge.net/updates输入类似于ANTLR IDE的名称,然后单击OK返回Available Software窗口。
    • 选中ANTLR IDE vn.nn的复选框,然后单击直到它安装完毕。 Eclipse可能会重启。
  4. 配置ANTLR IDE。
    • 在Eclipse主窗口中,单击Window,然后单击Preferences。
    • 在左侧窗格中,展开ANTLR并选择Builder。
    • 在右侧窗格中,单击“添加…”按钮。
    • 在Add ANTLR Package窗口中,单击Directory …并导航到antlr-nn文件夹的位置,然后单击OK。
    • 单击“确定”关闭“添加ANTLR包”窗口。
    • 在左窗格中选择Code Generator,然后单击右窗格中的Project relative文件夹。 输入文件夹名称。 示例:antlr-java或antlr生成的。
    • 选择任何其他配置参数,但不要在“构建”窗口的“常规”下检查-nfa或-dfa。 如果选中,则会导致ANTLR错误,从而阻止在输出文件夹中生成java文件。
    • 单击“确定”关闭“首选项”窗口。
  5. 创建一个新的Java项目并启用ANTLR支持。
    • 在Eclipse主窗口中,转到File,New,Java Project。 单击Next,键入项目名称,然后单击Finish。
    • 要为项目启用ANTLR支持,请在Package Explorer窗口(左窗格)中右键单击刚刚创建的项目,然后选择Configure,Convert to ANTLR project。
    • 将ANTLR完整jar文件添加到项目中:右键单击项目并选择Properties,Java Build Path,单击Add External JARs …,浏览到ANTLR jar文件,选择它,然后单击OK。 单击“确定”关闭项目“属性”窗口。
  6. 创建一个ANTLR语法。
    • 创建一个新的ANTLR语法:右键单击项目的src文件夹,然后单击File,New,Other,展开ANTLR并选择Combined Grammar。 单击“下一步”,键入语法名称,选择“语言”选项,然后单击“完成”。
    • 将使用所选选项和空白规则创建“.g”文件。 在顶部添加选项language = Java,@ header,@ ierer :: header和@members语句(参见示例)。 自动完成是添加这些内容的最简单方法(按CTRL空格以显示自动完成列表)。
  7. 保存语法。
    • 保存后,包含生成的语法Java代码的文件夹应出现在Project Explorer中。 如果没有,请确保未在“构建”窗口中“常规”下的“ANTLR首选项”中选中-nfa或-dfa选项(步骤4g)。 [确认是否需要这些:检查CLASSPATH环境变量指向与Eclipse安装(32位或64位)匹配的Java7,Windows Path环境变量是否具有Java7 SDK。
    • 要避免“无法解析为类型”Java错误,请右键单击包含生成的Java代码的文件夹,然后单击“构建路径”,“用作源文件夹”。

样本组合语法

grammar test; //must match filename.g options { language = Java; } @header { //parser package pkgName; //optional import java..*; } @members { //parser // java code here } @lexer::header { //lexer package pkgName; //optional import java..*; } @lexer::members { // java code here } /*------------------------------------------------------------------ * PARSER RULES (convention is all lowercase) *------------------------------------------------------------------*/ parserule: LEXRULE; /*------------------------------------------------------------------ * LEXER RULES (convention is all uppercase) *------------------------------------------------------------------*/ LEXRULE: 'a'..'z';