package ga050426;

import ga050426.PAddresses.addressKinds;

import java.util.StringTokenizer;
import java.util.regex.*;


public class Parser {
	
	public static void parse(ULEntries srcline, String input, int srcLineNum)
	throws IllegalInstructionException{
		String regex;
		try {
			// Directives:
			regex = Grammar.BEGdir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			regex = Grammar.ENDdir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			regex = Grammar.DCdir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			regex = Grammar.DSdir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			regex = Grammar.EQUdir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.TXTsegDir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			
			regex = Grammar.BSSsegDir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			regex = Grammar.DATsegDir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			regex = Grammar.DEFdir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			regex = Grammar.USEdir;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			// instruction:
			
			// oneByteInstructions:
			regex = Grammar.NOPins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label, input);
			}
			regex = Grammar.CLAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.CLCins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.CLXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			regex = Grammar.CMCins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.INCins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			regex = Grammar.DECins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.INXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.DEXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.TAXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			regex = Grammar.INIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.INAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.OTIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.OTAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.PSHins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.POPins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.SHLins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.SHRins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.MSAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.MASins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.LDAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			
			regex = Grammar.LDXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.RETins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			regex = Grammar.HLTins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLine(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLine(srcline, Grammar.label , input);
			}
			
			
			//twoByteInstructions:
			regex = Grammar.LDIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.LDDins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.LDRins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.STAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.STXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ADDins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ADXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ADIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ADCins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.SUBins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.SBXins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.SBIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.SBCins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.CMPins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.CPIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ANAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ANIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ORAins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.ORIins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.BRRins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.BZEins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.BNZins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.BPZins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.BNGins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.BCCins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.BCSins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}
			
			regex = Grammar.JSRins;
			if (Pattern.compile(regex).matcher(input).matches()){
				//System.out.println(" Bez labele ");
				Parser.pParseLineWithArg(srcline, "", input);
			}
			if (Pattern.compile(Grammar.label + Grammar.space + regex).matcher(input).matches()){
				//System.out.println(" Sa labelom ");
				Parser.pParseLineWithArg(srcline, Grammar.label, input);
			}

			throw new IllegalInstructionException(input
					+ Exceptions.WRONGCODE
					+ Segments.currentSegmentName + "!");
		
		} catch (CorrectInstructionException cie) {
			// / Nothing to do, just controlling structure
			
		} // Try...
		
		
	}
	
	
	public static void pParseLineWithArg(ULEntries srcline, String label, String input)
	throws CorrectInstructionException, IllegalInstructionException{
		StringTokenizer st = new StringTokenizer(input, " :\t;");
		String token=st.nextToken();
		if(label.equals(Grammar.label)){
			srcline.labelled=true;
			srcline.labField=token;
			srcline.mnemonic=st.nextToken();
		}
		else{
			srcline.labelled=false;
			srcline.labField="";
			srcline.mnemonic=token;
		}
		token=st.nextToken();
		if (Pattern.compile(Grammar.dec).matcher(token).matches() ||
			Pattern.compile(Grammar.minusDec).matcher(token).matches() ||
			Pattern.compile(Grammar.hexNum).matcher(token).matches() ||
			Pattern.compile(Grammar.minusHexNum).matcher(token).matches()
		)
		{
			srcline.address.kind=addressKinds.numeric;
			srcline.address.value = Integer.decode(token).shortValue();
			if( srcline.address.value>511 || srcline.address.value<-511)
				throw new IllegalInstructionException(Exceptions.TOBIGDATA);
		}
		else if(Pattern.compile(Grammar.star).matcher(token).matches()){
			srcline.address.kind=addressKinds.star;
			srcline.address.value=(short)Asm.lc;
		}
		else if(Pattern.compile(Grammar.simbol).matcher(token).matches()){
			srcline.address.kind=addressKinds.alphameric;
			srcline.address.name=token;
			srcline.address.value=-1;
		}
		else{
			srcline.address.kind=addressKinds.absent;
			srcline.address.value=0;
		}
		throw new CorrectInstructionException(); 
	}
	
	public static void pParseLine(ULEntries srcline, String label, String input)
	throws CorrectInstructionException{
		
		StringTokenizer st = new StringTokenizer(input, " :\t;");
		String token=st.nextToken();
		if(label.equals(Grammar.label)){
			srcline.labelled=true;
			srcline.labField=token;
			srcline.mnemonic=st.nextToken();
		}
		else{
			srcline.labelled=false;
			srcline.labField="";
			srcline.mnemonic=token;
		}
		srcline.address = new PAddresses(addressKinds.absent,(short)0,"");
		throw new CorrectInstructionException();
	}
}
