Jison Actions检查类型?

时间:2014-06-25 16:58:18

标签: parsing grammar jison

检查我是否正确行事。我认为我对BNF语法有一个相当牢固的把握,但是不太了解这些行为应该如何运作。下面的WORD标记是一个字符串。标签列表应该是一个标签数组。其他规则应根据类型做不同的事情。如果它是标签对象,它应该成为名为tags的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的语法,这看起来过于复杂。你能用香草词法分析器吗?

0 个答案:

没有答案