上下文
我正在攀登Nearley学习曲线并尝试为搜索查询解析器编写语法。
目标
我想编写能够解析包含布尔运算符(例如AND
,,OR
)的查询字符串的语法NOT
。让我们将AND
这个问题用作一个简单的案例。
例如,语法应该将这些示例字符串识别为有效:
- 裤子
- 裤子和袜子
- 千斤顶
尝试
我天真的尝试看起来像这样:
query ->
statement
| statement "AND" statement
statement -> .:+
问题
上面的语法尝试是模棱两可的,因为它.:+
会匹配任何字符串。我真正想要的是第一个条件匹配任何不包含AND
在其中的字符串。一旦出现“AND”,我只想输入第二个条件。
问题
我怎样才能检测到这两种不同的情况而不会出现语法不明确的情况?
我担心我错过了一些基本的东西;我可以想象大量的用例,我们希望任意文本被已知的操作符分割。