问题标签 [jison]

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 回答
514 浏览

grammar - Jison:减少实际上没有冲突的冲突

我正在尝试生成一个小型 JavaScript 解析器,其中还包括一个小型项目的类型变量。

幸运的是,jison 已经提供了一个 jscore.js,我只是对其进行了调整以满足我的需要。添加类型后,我遇到了减少冲突。我将问题最小化到这个最小的 JISON:

吉森:

实际上,这个脚本除了解析两个语句之外什么都不做:

变量语句

ExpStatement

由于这是一个极小化的 JISON 脚本,我不能简单地将“Type”替换为“IDENT”(顺便说一句。工作)。

生成解析器会引发以下冲突:

有什么技巧可以解决这个冲突吗?

提前谢谢你!〜本杰明

0 投票
1 回答
137 浏览

bison - Jison 解析器可能无法正确标记。(我认为)

我已经有一段时间没有使用 Flex 或 Bison 完成任何工作,回到大学。但是,我一直在尝试使用 Jison 推出我自己的轻量级 BBCode 解析器,以此作为周末的尝试。

我的问题涉及一个奇怪的问题,我被告知解析器正在寻找一个它没有找到先决条件令牌的令牌。我不认为我解释得很好(或者我理解实际发生的事情),所以这里是代码:

当我对字符串运行它时:

我收到错误:

非常感谢任何对错误的提醒。

0 投票
1 回答
730 浏览

javascript - Jison 语法问题,生成 dparser 的奇怪错误

我正在编写一个简单的 Jison 语法,以便在开始一个更复杂的项目之前获得一些经验。我尝试了一个简单的语法,它是一个逗号分隔的数字范围列表,其中开始值和结束值相同的范围使用单个数字速记。但是,当在某些测试输入上运行生成的解析器时,我收到一个错误,这对我来说没有多大意义。这是我想出的语法:

测试输入是这样的:

输出是:

如果它在前面放一个“a”,我会得到关于查找“INVALID”的预期错误,但我在输入字符串中没有“8”,所以我想知道这是否是内部状态?

我正在使用在线解析器生成器:http: //zaach.github.io/jison/try/

想法?

0 投票
2 回答
1319 浏览

javascript - 如何使用 Jison 生成处理语法歧义的解析器?

我正在尝试通过 Jison 为语言ChucK在 JavaScript 中生成一个解析器,并且已经有了一个良好的开端,除了生成的解析器无法处理的语言中存在歧义。最初的 ChuckK 编译器是由 Bison 生成的,它必须能够以某种方式解决这些歧义。

出于这个问题的目的,我已将问题简化为仅存在一种歧义的解释语法。作为参考,我列出了所有相关文件的要点(包括生成的parser)。项目结构如下:

语法本身如下所示:

歧义在于非终结符 DeclExpression 可以匹配TypeDecl VarDeclListPrimaryExpression。这使得 Jison 发出以下警告:

并且生成的解析器无法解析测试代码(Type var => out;),如下所示:

据我了解,它是=>解析器尝试与 rule 匹配的运算符之后的部分TypeDecl VarDeclList

那么,如何生成能够处理这种歧义的解析器呢?

0 投票
0 回答
399 浏览

javascript - 如何在 Jison 中正确使用 EBNF 组

我试图弄清楚如何处理在 Jison 中使用 EBNF 扩展时遇到的情况(Jison 默认仅支持 BNF——您可以根据需要激活该选项)。

我正在尝试编写一个简单的 XML 解析器。在 XML 中,有空标签和非空标签。非空标签有一个开始标签、内容、然后和结束标签。内容EBNF规则定义如下:

现在,我通过调试了解到 Jison 会将捕获组分配给 $2 并在数组中传递匹配项。这是有道理的,因为我希望在这里有一个匹配列表。但真正让我感到困惑的是,为什么在包含的数组中,只有元素而没有字符数据。

假设这个输入字符串,例如:

现在,上面的规则将产生 h、x 和 y 的表示。但是 i 和 j 将丢失。

我想我错过了一些东西,但不知道它可能是什么......

如果需要,我可以提供完整的语法,但会尝试隔离问题。

提前谢谢了!

最好的问候,哈拉尔

0 投票
1 回答
416 浏览

regex - JISON:为什么在正则表达式中使用“。” 代替 \。?

来自http://zaach.github.io/jison/docs/#specifying-a-language上的示例

为什么在这个正则表达式中使用"."而不是\.

0 投票
2 回答
330 浏览

bison - 如何解决这个 S/R 冲突

这是我的工作 EBNF 语法的简化:

\n 和 EOF 都将 NEWLINE 作为令牌吐出(因此在 EOF 之前不需要单个结尾的 NEWLINE)。它适用于这样的流:

现在我想有几个lineblock至少一个是强制性的,其余的用NEWLINE. 例如:

我试过这样做:

但是 Jison 在前瞻时抱怨 S/R 冲突NEWLINE。我猜状态机在决定它NEWLINE是新块的一部分line还是最终NEWLINE*输入时感到困惑file(这是必需的,因为文件可以以 NEWLINE/EOF 结尾)。

我怎样才能解决这个问题?

0 投票
3 回答
689 浏览

parsing - 代码替换(la #define)。词法分析器?还是解析器?

tl;dr:#define你如何在不做预处理步骤的情况下用 jison模拟 C 的等价物?

我正在研究一种相对简单的语法,该语法具有将标识符分配给代码块的功能,然后为了简洁起见,以后可以重复使用。例子:

到目前为止,我的解析器设置已正确识别代码的分配行并将“->”右侧的部分存储在可用于其他解析器操作的字典中。与下面提供的定义操作相关的代码:

如何让 jison 真正标记和解析保存的代码片段?我需要采用 AST 方法吗?有没有办法将代码注入解析器?这应该发生在词法分析阶段还是解析阶段?希望听到可以通过简短示例片段采取的多种策略。

谢谢!

0 投票
1 回答
451 浏览

bison - 了解 Bison/Jison

我希望为现有语言创建一个 JavaScript 解析器,该语言目前具有笨拙的“手工”C# 和 Java 解析器。我想使用 Jison,并且一直在尝试学习 Bison 的基础知识。

一个我不确定如何回答的问题是 Bison/Jison 的输出到底是什么?我会自动获得任何东西(例如 AST)吗?或者是编写野牛文件的人使用规则操作完成的一切。例如,如果我有一个规则指定一个符合规则的新变量赋值:

变量声明:VAR 变量声明列表 ';'

我是否必须指定要在生成的 javascript 文件中运行的操作,例如 { var var1 = {name: $1, value: $2 } Jison 来实际创建新变量?还是我弄错了。

谢谢!

0 投票
1 回答
166 浏览

javascript - 解析用户名和字符串

我正在尝试使用 Lex 和 Yacc 解析以下字符串输入,但没有成功。

"@user;一些随机文本;@another 用户;一些其他随机文本"

我正在使用以下语法:

你可以在这里试试这个语法:

我想要的结果是:

"@user;一些随机文本;@another 用户;一些其他随机文本"

输出:

用户一些

随机文本

另一个用户

其他一些随机文本