Loyc.LLParserGenerator.StageOneParser.PrimaryExpr C# (CSharp) Method

PrimaryExpr() private method

private PrimaryExpr ( ) : LNode
return LNode
		LNode PrimaryExpr()
		{
			TT la0, la1;
			Token lp = default(Token);
			Token rp = default(Token);
			Token tok__Any = default(Token);
			Token tok__Id = default(Token);
			// Line 125: ( TT.Minus PrimaryExpr | TT.Any TT.Id (TT.In GateExpr / ) | Atom greedy(TT.Dot Atom | &{a.Range.EndIndex == LT($LI).StartIndex} (TT.LParen TT.RParen | TT.LBrack TT.RBrack))* )
			la0 = (TT) LA0;
			if (la0 == TT.Minus) {
				Skip();
				var e = PrimaryExpr();
				#line 125 "StageOneParserGrammar.ecs"
				return F.Call(S._Negate, e);
				#line default
			} else if (la0 == TT.Any) {
				#line 126 "StageOneParserGrammar.ecs"
				LNode e, id;
				#line default
				tok__Any = MatchAny();
				tok__Id = Match((int) TT.Id);
				#line 127 "StageOneParserGrammar.ecs"
				id = F.Id(tok__Id);
				#line default
				// Line 128: (TT.In GateExpr / )
				do {
					la0 = (TT) LA0;
					if (la0 == TT.In) {
						la1 = (TT) LA(1);
						if (PrimaryExpr_set0.Contains((int) la1)) {
							Skip();
							e = GateExpr();
						} else
							goto match2;
					} else
						goto match2;
					break;
				match2:
					{
						#line 129 "StageOneParserGrammar.ecs"
						e = id;
						#line default
					}
				} while (false);
				e = F.Call(_Any, id, e, tok__Any.StartIndex, e.Range.EndIndex);
				return e;
			} else {
				var a = Atom();
				// Line 135: greedy(TT.Dot Atom | &{a.Range.EndIndex == LT($LI).StartIndex} (TT.LParen TT.RParen | TT.LBrack TT.RBrack))*
				for (;;) {
					la0 = (TT) LA0;
					if (la0 == TT.Dot) {
						var op = MatchAny();
						var b = Atom();
						#line 135 "StageOneParserGrammar.ecs"
						Infix(ref a, (Symbol) op.Value, b);
						#line default
					} else if (la0 == TT.LParen) {
						if (a.Range.EndIndex == LT(0).StartIndex) {
							la1 = (TT) LA(1);
							if (la1 == TT.RParen)
								goto match2_a;
							else
								break;
						} else
							break;
					} else if (la0 == TT.LBrack) {
						if (a.Range.EndIndex == LT(0).StartIndex) {
							la1 = (TT) LA(1);
							if (la1 == TT.RBrack)
								goto match2_a;
							else
								break;
						} else
							break;
					} else
						break;
					continue;
				match2_a:
					{
						// Line 138: (TT.LParen TT.RParen | TT.LBrack TT.RBrack)
						la0 = (TT) LA0;
						if (la0 == TT.LParen) {
							lp = MatchAny();
							rp = Match((int) TT.RParen);
						} else {
							lp = Match((int) TT.LBrack);
							rp = Match((int) TT.RBrack);
						}
						#line 141 "StageOneParserGrammar.ecs"
						a = F.Call(a, ParseHostCode(lp, ParsingMode.Expressions), a.Range.StartIndex, rp.EndIndex);
						#line default
					}
				}
				#line 143 "StageOneParserGrammar.ecs"
				return a;
				#line default
			}
		}
		LNode Atom()