我试图通过我的访客类中的所有OP属性迭代。
这是我的语法:
where: expression ( op=( AND | OR ) expressions)* EOF;
我要分析的字符串是:
string str = "Name = 'John Doe' AND Age = 20 OR Age = 30";
对于我的访客课,我有一个简单的替代方法:
public override object VisitWhere([NotNull] WhereContext context)
{
string operator = context.op.Text;
return base.VisitWhere(context);
}
解析字符串后,运算符变量返回"或" OP属性的最后一次出现。我如何获得'和'?
如果规则中多次出现规则或令牌,则将在关联上下文中表示为数组。在您的情况下,您应该有一个数组context.op[]
。这样的数组或简单的op
属性只是访问子列表的便利手段。如果您想完全访问规则中所述的所有内容,请查看该上下文的孩子们。