public final ControlFlow.lvalue_return lvalue(String funcName) throws RecognitionException {
		ControlFlow.lvalue_return retval = new ControlFlow.lvalue_return();
		retval.start = input.LT(1);

		CommonTree id=null;
		TreeRuleReturnScope r1 =null;

		try {
			// C:\\eclipse-workspaces\\workspace1\\Compiler\\src\\edu\\calpoly\\mwerner\\compiler\\ControlFlow.g:464:2: ( ^( DOT r1= ldot[funcName] id= ID ) |id= ID )
			int alt12=2;
			int LA12_0 = input.LA(1);
			if ( (LA12_0==DOT) ) {
				alt12=1;
			}
			else if ( (LA12_0==ID) ) {
				alt12=2;
			}

			else {
				NoViableAltException nvae =
					new NoViableAltException("", 12, 0, input);
				throw nvae;
			}

			switch (alt12) {
				case 1 :
					// C:\\eclipse-workspaces\\workspace1\\Compiler\\src\\edu\\calpoly\\mwerner\\compiler\\ControlFlow.g:464:4: ^( DOT r1= ldot[funcName] id= ID )
					{
					match(input,DOT,FOLLOW_DOT_in_lvalue540); 
					match(input, Token.DOWN, null); 
					pushFollow(FOLLOW_ldot_in_lvalue544);
					r1=ldot(funcName);
					state._fsp--;

					id=(CommonTree)match(input,ID,FOLLOW_ID_in_lvalue549); 
					match(input, Token.UP, null); 


								retval.var = (id!=null?id.getText():null);
								retval.reg = (r1!=null?((ControlFlow.ldot_return)r1).reg:0);
								retval.tp = (r1!=null?((ControlFlow.ldot_return)r1).tp:null);
							
					}
					break;
				case 2 :
					// C:\\eclipse-workspaces\\workspace1\\Compiler\\src\\edu\\calpoly\\mwerner\\compiler\\ControlFlow.g:470:4: id= ID
					{
					id=(CommonTree)match(input,ID,FOLLOW_ID_in_lvalue561); 

								retval.var = (id!=null?id.getText():null);
							
					}
					break;

			}
		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}