我想为表达式编写一个解析器,它有
- 文字,例如
5
- 绝对键路径,以 开头
$d
,然后使用 访问字段.
,例如$d.field1.field2
- 方法调用表达式,例如
5.toString()
或$d.field1.toLowerCase()
我想出了以下语法:
rules: {
expression: $ => choice(
$.int_literal,
$.absolute_keypath,
$.method_call
),
int_literal: $ =>
/[0-9]+/,
absolute_keypath: $ =>
choice($.keypath_root, $.field_access),
keypath_root: $ =>
'$d',
field_access: $ => seq(
choice($.keypath_root, $.field_access),
'.',
$.identifier,
),
method_call: $ => seq(
$.expression,
'.',
$.identifier,
'(',
')'
),
identifier: $ =>
/[a-zA-Z_*][a-zA-Z0-9_*]*/
}
我的问题是我没有设法提出可以解析上述示例的解决方案。我认为它应该可以通过在 and 之间设置优先级和关联性来解决field_access
,method_call
但我觉得到目前为止我已经尝试了所有可能的组合但没有成功。有人可以帮我想出一个语法吗?