问题标签 [javacc]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1480 浏览

java - 是否有输出 javascript 代码的 Javacc 版本?

我正在寻找一个解析器生成器,它接受 Javacc 语法文件 (.jj) 并在 Javascript(而不是 Java)中生成解析器。这样的事情存在吗?或者,将 .jj 文件转换为 ANTLR(可以输出 Javascript)可以理解的东西会有多困难?

0 投票
1 回答
6591 浏览

string - 如何在 JavaCC 中为新行使用反斜杠转义字符?

我的任务是创建一个词法分析器,除了一点点之外,我已经完成了所有工作。我需要创建一个将接受新行的字符串,并且该字符串由双引号分隔。该字符串接受分隔符内的任何数字、字母、某些指定的标点符号、反斜杠和双引号。我似乎无法弄清楚如何转义换行符。是否有某种转义字符的方法,例如换行符和制表符?

这是我的一些代码可能会有所帮助

所以我的字符串应该允许一个引号,然后是以下任何字符,如反斜杠、空格、数字等,然后是另一个引号。像 "\n" 这样的换行符不起作用。提前致谢!

0 投票
2 回答
1043 浏览

parsing - 使用 javacc + PMD 的 COBOL 解析器

我正在使用这个语法来生成 COBOL 解析器。

我使用 javacc 来生成解析器和 Java Tree Builder 来从这个语法生成 AST。

我正在自定义一个名为PMD的 Eclipse 插件来读取 COBOL 文件并生成 AST。有一个名为 Designer 的 UI,允许您从源代码中填充 AST。

当我尝试使用下面的源代码时,我收到一条错误消息:

错误信息

COBOL 代码

我不是 COBOL 程序员,因此,我不明白这个语法有什么问题。

谁能帮我?

0 投票
1 回答
761 浏览

json - 如何让javacc在生成源代码时不转义字符?

我使用 javacc 5.0 生成带有语法文件的 json 解析器:https ://github.com/inqwell/json/blob/master/src/main/javacc/com/inqwell/json/JSON.jj

但是生成的java源代码有一些错误。

在语法文件中,它们是:

这些大小写字符不应该被转义,但是怎么做呢?


更新

代码无法在我的IDEA中编译,请看我的截图:

在此处输入图像描述

0 投票
1 回答
367 浏览

parsing - javacc 令牌前缀

我试图在我的查询语言中允许这样的字符串:

其中第一个-表示要排除该术语。问题是-最终包含在令牌文本中,而不是被解析为排除令牌。我确定我错过了一些简单的东西,但我无法弄清楚。

0 投票
1 回答
1086 浏览

compiler-construction - 消除间接左递归

我的大脑正在试图从生产规则中消除一些左递归。我正在使用 JavaCC 构建编译器,我需要使用以下 2 个生产规则:

但问题是片段与片段相关的表达式有关,即:间接左递归。

我环顾了互联网,每个人似乎都在使用这个算法,可以在这里找到。该站点没有解释直接左递归消除,您可以在此处找到

我最终得到这样的规则:

它们是用用于 JavaCC 的代码编写的,因此希望您能理解它们。基本上,我引入了一个规则 K 来处理递归,但问题仍然存在,因为 K 的第一部分可以减少到零,因为它是 *​​(0 次或更多次),这让你剩下 K -> k()递归!!

我不知道从这里去哪里,并且掉了很多头发。任何见解将不胜感激!

0 投票
1 回答
1372 浏览

java - 在不向前看的情况下删除选择冲突 - JavaCC

我正在尝试在 JavaCC 中制定以下生产规则,但出现选择冲突错误。我知道如何使用前瞻来修复它,但我的印象是我们不允许将它用于我们的任务。

任何想法表示赞赏!

0 投票
2 回答
15610 浏览

java - 如何在语法上实现 JJTree

我的任务是使用 JavaCC 为讲师提供的语言制作带有语义分析的自上而下的解析器。我写出了生产规则,没有错误。我完全被困在如何在我的代码中使用 JJTree 并且我在互联网上搜索教程的时间并没有让我到任何地方。只是想知道有人可以花一些时间来解释如何在代码中实现 JJTree 吗?或者,如果有一个隐藏的分步教程,那将是一个很大的帮助!

以下是我的一些生产规则,以防万一。提前致谢!

0 投票
2 回答
2234 浏览

grammar - 如何解决这个选择冲突 - JavaCC

我有一个 javacc 语法,它使用简单的表达式和条件语句定义了一种简单的脚本语言,我正在审查并尝试更正大致如下定义:

第一个明显的问题是表达式的定义方式,因为它用于定义 IfStatement,我很容易得到这样的结果: If (variable1 < variable2 >= variable3 )

我试图通过将条件表达式的逻辑与一般表达式的逻辑分开来纠正这一点,如下所示:

编译生成的 jj 文件时,我收到以下警告:警告:第 210 行第 3 列的 (...)* 构造中的选择冲突。嵌套在构造中的扩展和扩展后的构造具有共同的前缀,其中之一是:“+ " 考虑使用 2 或更多的前瞻进行嵌套扩展。

错误行号是生成的 jj 文件中的一行。我认为冲突是在遇到 SimpleExpression 时发生的,因为它无法确定正在解析的是 ConditionalExpression 还是 Expression 所以我尝试了:

接着

但它并没有消失。jj 文件中说存在选择冲突的行是

另一个问题是运算符优先级以某种方式搞砸了,例如 IF ( "a" == "a" | "c"=="c" ) 导致 | 在使用“c”作为其第二个操作数并给出 ClassCastException 的第二个 == 运算符之前被解释,我得出结论,解决这个问题需要重写整个语法,所以我想可能在复合的单个条件周围强制使用括号像这样的条件语句 if ( ("a" == "a") | ("c" == "c" ) ) 我只是不知道该怎么做。

0 投票
1 回答
3093 浏览

java - 使用 JavaCC 删除 C 注释

我知道如何使用 SKIP 声明跳过这些注释,但我需要做的就是获取一个 C 源代码并输出相同的源代码而没有注释。

所以我声明了一个标记 <GENERIC_TEXT: (~[])+ >,它被复制到输出,并且不会跳过注释。我怀疑这个令牌会自己获取所有输入。

有人能帮助我吗?

谢谢