我正在覆盖一些侦听器方法。我有几个对应以下语法的对象:
object : BEGIN o1+ END ;
o1 : ( Token1 | (name | Token2 ) );
以下是EnterObject()覆盖方法的代码:
if (context.o1(1).name() != null)
{
object.Field = context.o1(1).name().GetChild(0).GetText();
}
else
{
object.Field = context.o1(1).Token2().GetText();
}
虽然我有些疑惑,但它确实有效。是否有更有效的方法可以检查EnterObject()中的EnterName()?
答案 0 :(得分:0)
我相信您可以使用context.o1(1).GetText()
代替更长的表达。
我还建议您在方法中添加一个属性,使用此代码来声明对o1
后代的依赖(因为这些后代隐式定义了GetText()
调用的结果)。 / p>
[RuleDependency(
typeof(YourParserType),
YourParserType.RULE_o1,
0,
Dependents.Descendants)]
您可以在应用程序或库初始化代码中调用以下内容来验证此属性的所有用法。
Assembly assembly = typeof(YourListenerClass).Assembly;
RuleDependencyChecker.CheckDependencies(assembly);