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];}
;
我需要解析一个 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];}
;