【问题标题】:JFlex Scanner ArrayIndexOutOfBoundsException: 769JFlex 扫描仪 ArrayIndexOutOfBoundsException:769
【发布时间】:2018-08-18 05:38:26
【问题描述】:

我正在尝试使用 JFlex 创建一个扫描仪。我创建了我的 .jflex 文件,它可以编译一切。问题是,当我尝试证明它时,有时它会在 JFlex 创建的 .java 类中给出 ArrayIndexOutOfBoundsException: 769 的错误。

我也在使用 Cup Parser 生成器。我不知道问题是否与 Cup Analysis 部分有关,但这是我如何调用我的分析器。

    ScannerLexico lexico = new ScannerLexico(new BufferedReader(new StringReader( jTextPane1.getText())));
    ParserSintactico sintaxis = new ParserSintactico(lexico);

我不知道如何解决它。请帮帮我。

这里是我的代码的链接:

JFlex File "ScannerFranklin.jflex"

Java Class generated "ScannerLexico.java"

我在 JFlex 创建的 .java 类中遇到问题的部分,在 next_token() 函数中(java 文件中的第 899 行)。

      int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ];
      if (zzNext == -1) break zzForAction;
      zzState = zzNext;

谢谢。

【问题讨论】:

  • 为了将来参考,请注意问题本身应包含相关代码,而不仅仅是作为粘贴箱的链接。您还应该确保您的代码尽可能小,同时仍然编译和重现错误(这称为MCVE)。在这种情况下,您可以轻松地生成 20 行或更少行的 jflex 文件,但仍会产生相同的错误。在这样做的同时,您还应该将您的方法和变量名称翻译成英文,以便我们更容易理解代码。谢谢。

标签: java compiler-construction lexer jflex


【解决方案1】:

根据其文档,只要使用%7bit%8bit/%full 编码选项遇到Unicode 字符,JFlex 就会抛出ArrayIndexOutOfBounds 异常。它建议始终使用%unicode 选项,这是默认选项。

正在使用%unicode 选项,但您也在使用%full。显然,当您有两个选项时,%full 优先。所以删除%full,错误就会消失。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2013-03-04
    相关资源
    最近更新 更多