问题标签 [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 投票
1 回答
1532 浏览

parsing - 在 Java 中解析类乳胶语言

我正在尝试用Java 编写一个类似于Latex 的简单语言的解析器,即它包含许多非结构化文本,其中有几个\commands[with]{some}{parameters}。像 \\ 这样的转义序列也必须考虑在内。

我尝试使用 JavaCC 为其生成解析器,但看起来像 JavaCC 这样的编译器编译器只适用于高度结构化的代码(通常用于通用编程语言),而不适用于凌乱的类似 Latex 的标记。到目前为止,似乎我必须走低级并编写自己的有限状态机。

所以我的问题是,解析大部分非结构化输入的最简单方法是什么,中间只有几个类似 Latex 的命令?

编辑:使用有限状态机进行低级处理很困难,因为 Latex 命令可以嵌套,例如 \cmd1{\cmd2{\cmd3{...}}}

0 投票
2 回答
1673 浏览

python - 从 JavaCC 源代码生成 Python 语言的解析器?

我的意思是???标题中的,因为我不确定。让我解释一下情况。

我不是计算机科学专业的学生,​​而且我从未上过任何编译器课程。到目前为止,我一直认为编译器编写者或修过编译器课程的学生很优秀,因为他们必须用他们编写编译器的任何语言编写编译器的 Parser 组件。这不是一件容易的工作,对吧?

我正在处理信息检索问题。我想要的编程语言是 Python。

Parser Nature: http: //ir.iit.edu/~dagr/frDocs/fr940104.0.txt是样本语料库。该文件包含大约 50 个带有一些 XML 样式标记的文档。(您可以在上面的链接中看到它)。我需要记下其他一些其他值,例如<DOCNO> FR940104-2-00001 </DOCNO>& <PARENT> FR940104-2-00001 </PARENT>,我只需要索引<TEXT> </TEXT>文档的一部分,其中包含一些我需要删除的不同标签以及许多<!-- -->要忽略的注释和一些&hyph; &space; &amp;字符实体。我不知道为什么语料库有这样的东西,因为它知道它既不是要由浏览器呈现,也不是正确的 XML 文档。

我想过使用任何 Python XML 解析器并提取所需的文本。但经过一番搜索后,我找到了我在这里使用的同一个语料库的JavaCC 解析器源代码 (Parser.jj)。快速查看JavaCCCompiler-compiler后发现,编译器编写者并没有我想象的那么好。他们使用 Compiler-compiler 生成所需语言的解析器代码。Wiki 说编译器的输入是一种语法(通常在 BNF 中)。这就是我迷路的地方。

  1. Parser.jj语法(输入到称为 JavaCC 的编译器编译器)吗?这绝对不是 BNF。这个语法叫什么?为什么这个语法有Java语言?没有通用的语法语言吗?
  2. 我想要python解析器来解析语料库。有什么方法可以翻译 Parser.jj 以获得等效的 python 吗?如果是,那是什么?如果没有,我的其他选择是什么?
  3. 有没有人知道这个语料库是什么?它的原始来源在哪里?我想看看它的一些描述。它以名称分布在互联网上frDocs.tar.gz
0 投票
1 回答
697 浏览

java - 为什么我的 JavaCC 解析器不解析小于 2 个字符的标记?

我正在研究应该解析 BBcodes 的 JavaCC 解析器。

我的 Javacc 源代码:patebin.com(Junit 测试:这里

源代码有点工作,但它不想接受带有单个字符的标记,只能识别多字符串。

它确实解析了这个字符串:

"test[b]bold[/b]nothing[b]bold[/b]after"

但不是:

"t[b]bold[/b]nothing[b]bold[/b]after"

我有点迷路了,这里欢迎任何提示。

0 投票
2 回答
1503 浏览

java - 如何匹配 JavaCC 中的可选打开/关闭标签?

JavaCC 语法确实实现了可以解析这些行的语法:

尽管 JavaCC 解析器需要解析所有行,但它必须区分正确和不正确的标记行为。

正确的标签就像第一行一样,它们有一个打开和关闭标签。当标签匹配时,这将输出一个粗体格式的文本。

不正确的标签就像第 2 行和第 3 行一样,它们没有匹配的打开或关闭标签。当这些发生时,它们按原样写入输出,不会被解释为标签。

我已经尝试过下面的 JavaCC 代码(LOOKAHEAD = 999999)。问题是,这种语法总是将所有内容匹配为 invalidTag()而不是bold()。我如何确保 JavaCC 解析器尽可能匹配bold() ?

0 投票
2 回答
1433 浏览

java - JavaCC 中的解析器和 SKIP 指令

我正在使用 JavaCC 构建一个复杂的解析器。有一次,我想跳过我看到的所有字符,直到我的语法中出现所需的标记......让我们以以下为例

/* bla bla bla bla bla bla bla bla */ => 我想定义一种语法,比如

<OPEN_COMMENT> SKIP ~[] until <CLOSE_COMMENT>即使“bla”是常规标记,我也希望它是真的

谢谢你的帮助

0 投票
1 回答
987 浏览

parsing - 在 javacc 中解析特定数量的行

我有一个要解析的特定格式的文件。在这个文件中,我在一行上有一个数字,它指定跟随它的行数。

该文件的示例摘录:

我想读取数字(本例中为 3),然后仅读取以下 3 行。如果有更少或更多的行,我想生成一个错误。我怎样才能在 javacc 中做到这一点?

谢谢

0 投票
1 回答
2751 浏览

java - 如何使用 JavaCC / JJTree 存储令牌?

我为一种 DSL 编写了 JJTree (JavaCC) 配置,它成功地标记了给定的文件格式,并在请求时转储 AST。

问题是树中的每个节点都是空的,因为我当前没有存储令牌(我无法理解示例)。

这是我的 .jjt 文件的一部分:

我希望根节点存储对 Section1、Section2 的引用以及对 Section3 的引用列表。我希望 Section3 节点存储标识符、标题块并保留详细信息块的列表。

我填充的.jjt 文件有数百行,但我觉得如果我能理解这两部分的内容,我就能理解JJTree 是如何工作的。请让我知道如何正确使用 JJTree。

谢谢。

0 投票
1 回答
330 浏览

java - 如何在 JavaCC 中处理文本块中的令牌?

我有一个 DSL 的简单方面,我可以在其中定义一个键和一个值:

在这个例子中我想要的三个标记(用于价值部分)是

  • ValueLiteral == 这是我的
  • 价值参考 == $REF{有用}
  • ValueLiteral == 多行等....

我为该值定义了一个规则,如下所示:

这是我对多行字符串类型的 TOKEN 定义:

我的问题是我的多行字符串标记类型也使用了 '$REF{' 字符的字符序列。

我想修改这个多行字符串,以便在遇到未转义的“$REF{”时停止使用字符(但会继续读取“\$REF{”序列)。

任何帮助将不胜感激。

0 投票
0 回答
135 浏览

html - javacc,从 dir/x/s 转换为 HTML

我想从 dir/x/s 语言翻译成 html。

我有 Analyzer.j :

源代码是:

并导致 HTML 语言应为:

我如何将一个代码解析为另一个?并将 html 代码保存到文件中。

0 投票
2 回答
746 浏览

warnings - JavaCC:警告太多

我正在使用 JavaCC 5.0 版。与 Eclipse 伽利略。

但是当我在我的 jj 文件中设置选项“static=true”时,生成的 TokenManager 文件有许多警告,例如“应以静态方式访问 SimpleCharStream 类型的静态方法 readChar()”。此外,我的 jj 文件中的所有导入都已复制到 TokenManager,在那里它们被标记为未使用。有没有办法防止这种情况发生?

看来这个问题在 JavaCC v4.1 中已经修复了,那我为什么还要面对这个问题呢?