Bison 在语法文件中出现零次或一次

Bison zero or one occurrences in grammar file

我需要解析一个 JSON 类对象 {"f": 1, "i": 2, "g": 5, ...} 但与常规 JSON 对象不同的是,输入在对象中可以出现零次或一次...

所以,这是错误的对象 {"f": 1, "f": 1, "i": 2, ...},因为它有键 "f twice"。

而且,这个对象很好 {"i": 2} 因为它只有键 "i" 并且不会出现超过一次。

这是我试过的。我知道它不起作用,但我不知道如何设置它是正确的。

RuleMemberList
    : RuleMember
        {{$$ = {}; $$[[0]] = [1];}}
    | RuleMemberList ',' RuleMember
        {$$ = ; [[0]] = [1];}
    ;

RuleMember
    : I ':' RuleString
          {$$ = [, ];}
    | G ':' RuleString
          {$$ = [, ];}
    | F ':' RuleFinder
          {$$ = [, ];}
    | A ':' RuleAction
          {$$ = [, ];}
    | T ':' RuleTarget
          {$$ = [, ];}
    | P ':' RuleNumber
          {$$ = [, ];}
    | C ':' RuleChance
          {$$ = [, ];}
    | L ':' RuleLayers
          {$$ = [, ];}
    | R ':' RuleString
          {$$ = [, ];}
    | E ':' RuleEvents
          {$$ = [, ];}
    | B ':' RuleBinds
          {$$ = [, ];}
    ;

我能否以某种方式将其定义为出现零次或一次?

向地图添加元素时检查重复项。类似于:

| RuleMemberList ',' RuleMember
    { $$ = ;
      if ([0] in )
        error("duplicate key ", [0], " in map");
      else
        [[0]] = [1];}
;