问题标签 [earley-parser]

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

bnf - 如何为布尔搜索运算符编写明确的近利语法

上下文

我正在攀登Nearley学习曲线并尝试为搜索查询解析器编写语法。

目标

我想编写能够解析包含布尔运算符(例如AND,,OR)的查询字符串的语法NOT。让我们将AND这个问题用作一个简单的案例。

例如,语法应该将这些示例字符串识别为有效:

  • 裤子
  • 裤子和袜子
  • 千斤顶

尝试

我天真的尝试看起来像这样:

问题

上面的语法尝试是模棱两可的,因为它.:+会匹配任何字符串。我真正想要的是第一个条件匹配任何不包含AND在其中的字符串。一旦出现“AND”,我只想输入第二个条件。

问题

我怎样才能检测到这两种不同的情况而不会出现语法不明确的情况?

我担心我错过了一些基本的东西;我可以想象大量的用例,我们希望任意文本被已知的操作符分割。

0 投票
0 回答
81 浏览

parsing - lex INDENT 和 DEDENT 传递给 Earley 的高效方法?

继续这个 GitHub 问题

我需要匹配 indent 或 dedent,我正在使用Earley。Earley 没有对缩进的内置支持,但我希望能够在我的语言中使用缩进而不是大括号。

示例输入:

这将被解析theresSomeIndentRequiredHere为 的一部分foo,但noMoreindentMeansNoMoreFoo不会被解析为foo.

我怎样才能在不损失大量速度的情况下做到这一点?

0 投票
1 回答
262 浏览

grammar - (E)BNF 如何匹配直到下一个非终结规则?

我正在尝试使用RIS 格式的内容编写语法

文件示例:

文件*.ris总是以 tag 开始,以 tagTY结束ER。在两者之间可以有许多其他标签,如KW(关键字)。

规范说单个KW语句可以跨越多行。

所以这:

相当于:

我正在努力想出一个这样的语法:

关键字以开头,KW后跟 -以下之一:

  • 直到行尾的字母
  • 字母直到行尾和任何其他行直到下一个关键字

无论我尝试什么,最终都会“吞下”所有其他语句,例如,第一个多行关键字捕获它之后的所有其他内容。

你会怎么写这个规则?我不一定对特定的答案感兴趣。任何能触发我“啊哈”时刻的事情都可以!

0 投票
0 回答
33 浏览

grammar - Earley 算法出错了

我正在尝试实现用于解析语法的 Earley 算法,但是我一定做错了什么,因为在图表中的第一个条目之后,它没有通过输入字符串的其余部分。

我的测试语法如下:
S -> aXbX | bXaX
X -> aXbX | bXaX | epsilon
S 和 X 是非终结符;a 和 b 是终端。

我想检查它是否被语法接受的字符串是:'abba'。

这是我的代码:

这是我得到的输出(对于状态 1 到 4,我应该得到 5 到 9 个条目):
S0
S' --> .S, 0, -
S --> .aXbX, 0, PREDICTOR
S --> .bXaX , 0, 预测器

S1

S2

S3

S4