我正在用 Bison 为一种具有以下结构的语言编写解析器,其中包括:
- 自发货:[
identifier
arguments
] - 调度:[
expression
。identifier
arguments
] - 字符串切片:
expression
[expression
,expression
] - 类似于 Python。
arguments
是一个以逗号分隔的表达式列表,也可以为空。以上所有内容本身也是表达方式。我的问题是我不确定如何解析两者[method [other_method]]
,[someString[idx1, idx2].toInt]
或者是否可以使用 LALR(1) 解析器来完成。
更准确地说,让我们看下面的例子:(用方法的结果[a[b]]
调用方法)。当它达到状态时。(前瞻是第二个),它不知道是减少(已经减少到),因为可能会出现类似的东西(它本身可以减少到并继续上面的第二个构造)还是保留它(并转移它),因为后面会出现一个列表(例如在这种情况下)。a
b
[a
[b]]
[
a
identifier
expression
a[b,c]
expression
identifier
arguments
[b]
这种移位/减少冲突是由于我表达这种语法的方式造成的,还是不可能用 LALR(1) 解析器解析所有这些结构?
而且,一个更普遍的问题是,如何证明一种语言可以/不能被特定类型的解析器解析?