токен [атрибута] должен быть изменен с [глобальные атрибуты] на [атрибуты] без пространства имен - PullRequest
0 голосов
/ 20 ноября 2018

Этот вопрос касается образца грамматики 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;

вправо

ошибка

...