问题标签 [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 回答
316 浏览

javascript - Jison 类 Google 解析器

我使用 Jison 编写了一个解析器,它能够处理带有运算符和布尔运算支持的类似 google 的搜索查询。目前,我很难弄清楚如何在 AND OR 和 NOT 运算符之间接受空格。任何帮助将不胜感激,我在下面附上了一些所需输入/输出的示例。

输入:

  1. 真 && 假 || 真的
  2. ( 真 ) && ( 假 || 真 )
  3. 真&&假||真

结果:

1-3。([真]&&([假]||[真]))

代码:

0 投票
0 回答
59 浏览

parsing - Jison Actions 检查类型?

检查我是否做对了。我认为我对 BNF 语法有相当牢固的掌握,但不太了解这些操作应该如何工作。下面的 WORD 标记是一个字符串。标签列表应该是一个标签数组。其他规则应该根据类型做不同的事情。如果它是标签对象,它应该成为称为标签的 JSON 对象的成员。如果它是一个字符串,它应该是一个名为 title 的属性。这是前进的正确方式吗?

示例文本:

旁注和其他问题:

  • 最初何时在规则中使用return $1vs非常令人困惑。$$ = $1
  • 对于 outdents/indents,我只看到了 CoffeeScript 的语法,这似乎过于复杂。你能在香草词法分析器中做到这一点吗?
0 投票
1 回答
570 浏览

bison - 用于回显列表的 Yacc 递归方法?

我正在努力理解 yacc 递归。所以我创建了一种最小的语言,我想简单地回显给它的数字列表。我正在使用 JISON。这是吉森:

我需要什么操作来回显以空格分隔的数字列表?

0 投票
1 回答
60 浏览

parsing - 仅在特定条件下匹配换行符

我正在编写类似于 javascript 的语言解析器,其中包含分号插入 ex:

乃至

是相同的。

现在,我的词法分析器仅在它出现在与分号不同的标记之后才匹配换行符(\n )。这在 1 和 2 等基本情况下很好,但我如何处理第三种情况?即在表达式中间出现新行。我不能每次都匹配新行,因为它会污染我的解析器(在任何地方插入带有换行符的替代项),而且我也根本无法匹配它们,因为它是语句终止符。基本上,如果那里有换行符或分号,我最好在解析语句结束时以某种方式检查。

0 投票
1 回答
1058 浏览

javascript - json格式的jison开始条件

尽管在文档和论坛中搜索了很长时间,但我仍然无法在 node.js 中使用 JSON 格式获得 Jison启动条件的正确语法

但不幸的是,没有人不提供完整的工作样本。

我试图排除两个标签之间的任何文本。在 lex 中会使用开始条件。Jison 文档说它应该可以工作。尽管如此,由于 Jison 错误消息不是很直观,我很乐意找到一个工作示例来继续前进。

有人有解决方案吗?

我当前的样本失败了

/node_modules/jison/node_modules/jison-lex/regexp-lexer.js:42 startConditions[conditions[k]].rules.push(i);

0 投票
1 回答
831 浏览

bison - 如何在 JISON 中定义字符串

我刚刚开始编写 DSL 并想使用 JISON ( http://zaach.github.io/jison )。我正在尝试学习语法,但在用双引号指定字符串时遇到了问题。

我认为可行的是:

... 也许:

第一个(基本上)根本不起作用,而第二个有点起作用;当它找到一个字符串时,输出的值包括转义的双引号。

有没有很好的资源可以帮助学习 JISON/BISON/BNF 语法定义?我一直在环顾四周,但找不到任何对我有帮助的东西;不是comp / sci专业。我只是错过了一些简单的东西或更重要的东西吗?

对于某些情况:

我正在尝试定义一个简单的 DSL 来解析简单的条件:

0 投票
1 回答
67 浏览

bison - 如何在 JISON 中获取多个规则实例

我正在与 JISON ( http://zaach.github.io/jison ) 合作,并且边走边学。我遇到了解析器停止并且在第一个匹配之后不再继续的问题;我认为。这是我的语法定义:

...和我的示例输入:

我希望在生成的“AST”中得到两个条目,但我只得到第一个。任何帮助将不胜感激。

0 投票
1 回答
235 浏览

javascript - Jison:if-else 和 for 语句 ara 组合时的语法冲突

我想用 jison 为 JavaScript 语言的一个子集制作一个解析器,但我遇到了一些问题。

起初我对非终端有这个定义stmt,它可以工作:

之后,我在中添加了以下规则stmt

这种语法模棱两可,出现冲突。所以我按照这些模式来解决悬空的 else 歧义:

它必须转换为: stmt : closed_stmt | non_closed_stmt ;

这是我语法的当前部分:

这部分仅在我评论for-statement规则时才有效。

你如何解决它?

这是我的完整代码存储库:https ://github.com/xgbuils/if-for-grammar-issue

0 投票
3 回答
288 浏览

jison - 有没有一种简单的方法可以让 Jison 计算器解析器返回符号结果?

Jison 解析器返回计算结果:

我希望它返回符号表达式:

0 投票
1 回答
260 浏览

javascript - 使用 JISON 匹配但忽略嵌套括号

我正在研究模板系统的语法。我在构建中遇到了障碍,我不太清楚如何解决这个问题。我已经简化了测试用例,以最好地强调我在做什么。

示例字符串:

  • (foo)- 作品
  • (foo())- 失败Expecting 'parenEnd', got 'parenInterior'
  • foo (foo) bar
  • foo (foo(function() { console.log('stuff'); })) bar
  • foo (foo.bar.baz("stuff")) bar

规则是在括号内,任何内容,任何字符。我不需要验证,也不需要确保它们匹配正确的格式。另一方面,据我了解,为了使解析器正常工作,我确实需要跟踪打开和关闭()否则词法分析器无法知道一个括号语句从哪里开始,另一个在哪里结束,例如(foo()) (bar). 为了跟踪这一点,我使用了一个paren开始条件,每当在 paren 语句中遇到一个括号时,它就会增加一个值,并在它是一个接近的括号时将其删除。

问题是它只是不工作。罪魁祸首是它似乎从来没有达到我的<paren>")"规则,但我却很好地遵守了<paren>"("规则。它们在语法上看起来相同,为什么一个有效而另一个无效?

语法