void Primary(out OqlExpression expression) { OqlExpression result = null; OqlExpression child; if (la.kind == 1) { Get(); result = new IdentifierExpression(t.val, t.line, t.col); if (la.kind == 20) { if (IsOidIdentifier(result)) { Expect(20); Expect(3); result.UnaryOp = ""; result.Add(new IndexExpression(int.Parse(t.val), t.line, t.col)); Expect(21); } else { Get(); ParameterList(out child); result = new FunctionExpression(result.Value, t.line, t.col); result.UnaryOp = ""; result.Add(child); Expect(21); } } } else if (StartOf(5)) { Literal(out result); } else if (la.kind == 16) { Get(); result = new ParameterExpression(t.val, t.line, t.col); } else if (la.kind == 20) { Get(); RootExpr(out result); result.HasBrackets = true; Expect(21); } else { SynErr(44); } expression = result.Simplify(); }