0

检查我是否做对了。我认为我对 BNF 语法有相当牢固的掌握,但不太了解这些操作应该如何工作。下面的 WORD 标记是一个字符串。标签列表应该是一个标签数组。其他规则应该根据类型做不同的事情。如果它是标签对象,它应该成为称为标签的 JSON 对象的成员。如果它是一个字符串,它应该是一个名为 title 的属性。这是前进的正确方式吗?

headerline
  : STAR SPACE WORD headerline
    {$$ = {state: $3, rest: $4}}
  | WORD headerline
    /* Looking for something like if typeof $2 === 'object' add word to title else concat string */
    {$$ = $1 + $2}
  | SPACE headerline
    {$$ = $1 + $2}
  | taglist
    {$$ = {tags: $1}}
  | WORD
    {$$ = $1}
  ;

示例文本:

* TODO Use docker for setup :dev:shell:

旁注和其他问题:

  • 最初何时在规则中使用return $1vs非常令人困惑。$$ = $1
  • 对于 outdents/indents,我只看到了 CoffeeScript 的语法,这似乎过于复杂。你能在香草词法分析器中做到这一点吗?
4

0 回答 0