检查我是否做对了。我认为我对 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 $1
vs非常令人困惑。$$ = $1
- 对于 outdents/indents,我只看到了 CoffeeScript 的语法,这似乎过于复杂。你能在香草词法分析器中做到这一点吗?