问题标签 [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.
bnf - 如何为布尔搜索运算符编写明确的近利语法
上下文
我正在攀登Nearley学习曲线并尝试为搜索查询解析器编写语法。
目标
我想编写能够解析包含布尔运算符(例如AND
,,OR
)的查询字符串的语法NOT
。让我们将AND
这个问题用作一个简单的案例。
例如,语法应该将这些示例字符串识别为有效:
- 裤子
- 裤子和袜子
- 千斤顶
尝试
我天真的尝试看起来像这样:
问题
上面的语法尝试是模棱两可的,因为它.:+
会匹配任何字符串。我真正想要的是第一个条件匹配任何不包含AND
在其中的字符串。一旦出现“AND”,我只想输入第二个条件。
问题
我怎样才能检测到这两种不同的情况而不会出现语法不明确的情况?
我担心我错过了一些基本的东西;我可以想象大量的用例,我们希望任意文本被已知的操作符分割。
parsing - lex INDENT 和 DEDENT 传递给 Earley 的高效方法?
继续这个 GitHub 问题:
我需要匹配 indent 或 dedent,我正在使用Earley。Earley 没有对缩进的内置支持,但我希望能够在我的语言中使用缩进而不是大括号。
示例输入:
这将被解析theresSomeIndentRequiredHere
为 的一部分foo
,但noMoreindentMeansNoMoreFoo
不会被解析为foo
.
我怎样才能在不损失大量速度的情况下做到这一点?
grammar - (E)BNF 如何匹配直到下一个非终结规则?
我正在尝试使用nearley为RIS 格式的内容编写语法
文件示例:
文件*.ris
总是以 tag 开始,以 tagTY
结束ER
。在两者之间可以有许多其他标签,如KW
(关键字)。
规范说单个KW
语句可以跨越多行。
所以这:
相当于:
我正在努力想出一个这样的语法:
关键字以开头,
KW
后跟-
以下之一:
- 直到行尾的字母
- 字母直到行尾和任何其他行直到下一个关键字
无论我尝试什么,最终都会“吞下”所有其他语句,例如,第一个多行关键字捕获它之后的所有其他内容。
你会怎么写这个规则?我不一定对几乎特定的答案感兴趣。任何能触发我“啊哈”时刻的事情都可以!
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