Этот вопрос касается образца грамматики C # проекта Irony.
Оригинальная грамматика находится здесь: CSharpGrammar.cs .
Это мой измененный синтаксис C #, ноНетерминал [attribute] должен быть изменен с [global attribute] на [attribute] без пространства имен.
Как это сделать?
this.Root = compilation_unit;
compilation_unit.Rule = extern_alias_directives_opt
+ using_directives_opt
+ global_attributes_opt
+ namespace_member_declarations;
var global_attribute_target = new NonTerminal("global_attribute_target");
global_attribute_target.Rule = ToTerm("field") | "event" | "method" | "param" | "property" | "return" | "type";
global_attributes_opt.Rule = MakeStarRule(global_attributes_opt, null, global_attribute_section);
global_attribute_section.Rule = PreferShiftHere()+ "[" + global_attribute_target + colon + attribute_list + comma_opt + "]";
attribute_target_specifier_opt.Rule = Empty | attribute_target + colon;
attribute_target.Rule = ToTerm("field") | "event" | "method" | "param" | "property" | "return" | "type";
attribute_arguments_par_opt.Rule = Empty | Lpar + attribute_arguments_opt + Rpar;
attribute_arguments_opt.Rule = MakeStarRule(attribute_arguments_opt, comma, attr_arg);
attr_arg.Rule = identifier + "=" + expression | expression;
вправо
ошибка