0

我想为表达式编写一个解析器,它有

  • 文字,例如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_accessmethod_call但我觉得到目前为止我已经尝试了所有可能的组合但没有成功。有人可以帮我想出一个语法吗?

4

0 回答 0