gpt4 book ai didi

java - 使用 yacc 文件检测 Java 文本区域中的语法错误

转载 作者:行者123 更新时间:2023-11-30 10:41:55 28 4
gpt4 key购买 nike

我有一个很久以前由其他人创建的 yacc 文件。该文件描述了一种自定义语言。我的目标是使用该 yacc 文件为我的 Java 应用程序中的自定义文本区域创建解析器。最终目标是在语法不正确时显示错误。我目前正在使用 RSyntaxTextArea,它可以很好地处理突出显示(基于我自己的实现,而不是 yacc 文件),但是创建一个可以检测用户可能犯的每一个可能错误的解析器是一项更艰巨的任务。

在我看来,我有三个选择:

  1. 最好的情况是,如果我能以某种方式直接在我的 Java 应用程序中使用 yacc 文件。

  2. 第二好的情况是,如果有一种方法可以将 yacc 文件解析为我可以在 Java 中轻松使用的格式。我找到了 BYACC/J,它从 yacc 文件创建了一个 Java 类,但是我得到的文件充满了语法错误(缺少函数、变量等),所以效果不太好。

  3. 在我看来,第三个选择是学习 YACC 和另一个我可以在 Java 中使用的解析器生成器,然后用它重写整个东西。学习新事物从来都不是坏事,但由于我的时间不是无穷无尽的,而且这些“编译器编译器”的学习曲线似乎相当陡峭,如果没有办法使用 YACC,我只想投入时间直接定义。正如我发现那里有相当多的潜在选项,在 JavaCC、Jacc、CUP、ANTLR4 和可能还有很多其他选项之间,我想选择一个尽可能接近 yacc 的选项以减少实现时间。任何帮助将不胜感激。

最佳答案

Bison(“yacc 兼容”解析器生成器最常被错误地称为“yacc”)can generate Java parsers .话说回来,我从来没有尝试过,所以我不知道你会遇到什么问题。

“yacc”语法包括目标语言中的语义规则;如果你有一个现有的语法,语义规则可能会用 C 编写。Yacc 语法也依赖于扫描器的存在,通常用 flex(或 JFlex for Java,其工作方式非常相似)。

为了使用基于 Java 的解决方案,即使是使用相同语法的解决方案,您也需要重写现有 yacc 语法中的所有语义操作,并重写随附的扫描器。 BYacc/J 也是如此;您不能只向解析器生成器提供一个以 C 为目标的 yacc 语法文件并期望得到一个正常运行的 Java 解析器。

所以您肯定需要了解 yacc/bison/flex 的工作原理。

注意:Bison(和它的 friend 们)被设计用来解析语法正确的程序。显然他们可以检测到语法错误,但是从语法错误中恢复以继续解析要复杂得多;对于语法高亮显示,如果可能的话,您绝对希望能够检测到多个错误。因此,您可能会发现现有的 yacc 语法只是一个开始。

关于java - 使用 yacc 文件检测 Java 文本区域中的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38330611/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com