All Downloads are FREE. Search and download functionalities are using the official Maven repository.

r.inchworm.inchworm.0.8.0.source-code.InchwormAsmParser Maven / Gradle / Ivy

The newest version!
// $ANTLR 3.5.2 /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g 2015-12-15 02:31:33

	package org.factcenter.inchworm.asm;

    import java.math.BigInteger;
	import java.util.HashMap;
	import org.factcenter.inchworm.*;
	import org.factcenter.inchworm.ops.*;
	import static org.factcenter.inchworm.Constants.*;
	import static org.factcenter.inchworm.Constants.NamedReg.*;
	import static org.factcenter.inchworm.ops.OpDefaults.*;
	import static org.factcenter.inchworm.VMState.*;
	import static org.factcenter.inchworm.asm.Assembler.*;



import org.antlr.runtime.*;
import java.util.Stack;
import java.util.List;
import java.util.ArrayList;

import org.antlr.runtime.tree.*;


@SuppressWarnings("all")
public class InchwormAsmParser extends Parser {
	public static final String[] tokenNames = new String[] {
		"", "", "", "", "ADD", "AND", "BINARY_LITERAL", 
		"BIN_DIGITS", "CALL", "CARRY", "CODE", "COMMENT", "CONST", "COUNTERS", 
		"CTRL", "CTR_FLAG", "CTR_PREFIX", "CURRENT_POS", "C_ADD", "C_AND", "C_DIV", 
		"C_MOD", "C_MUL", "C_NOT", "C_OR", "C_SHL", "C_SHR", "C_SUB", "C_UNARY_MINUS", 
		"C_XOR", "DATA", "DECIMAL_LITERAL", "DEC_DIGITS", "DIV", "EOI", "ESCAPE", 
		"FLAGS", "FRAMESIZE", "FREEREGS", "HALT", "HEADER", "HERE", "HEX_DIGITS", 
		"HEX_LITERAL", "ID", "IN", "INSTRUCTION", "INSTRUCTIONDEF", "IP", "LOAD", 
		"LOADREG", "LOCAL_PREFIX", "LOCAL_REG", "MUL", "MUX", "NEXT", "NOP", "NUM", 
		"OP", "OPTION", "OR", "OUT", "OUT1", "OUT2", "OVERFLOW", "PERCENT", "RAM", 
		"RAMLOADSIZE", "RAMPTRSIZE", "RAMWORDSIZE", "REG", "REGPTRSIZE", "REG_PREFIX", 
		"RETURN", "ROL", "ROMPTRSIZE", "SEC_CODE", "SEC_CONST", "SEC_DATA", "SEC_END", 
		"SEC_HEADER", "SEC_RAM", "SIGN", "STACKPTRSIZE", "STAR", "STORE", "STOREREG", 
		"STRING", "SUB", "SYMBOL", "WORDSIZE", "WS", "XOR", "XORI", "ZERO", "'&'", 
		"'('", "')'", "'+'", "','", "'-'", "'/'", "':'", "'<'", "'<<'", "'='", 
		"'>>'", "'['", "']'", "'^'", "'db'", "'|'", "'~'"
	};
	public static final int EOF=-1;
	public static final int T__95=95;
	public static final int T__96=96;
	public static final int T__97=97;
	public static final int T__98=98;
	public static final int T__99=99;
	public static final int T__100=100;
	public static final int T__101=101;
	public static final int T__102=102;
	public static final int T__103=103;
	public static final int T__104=104;
	public static final int T__105=105;
	public static final int T__106=106;
	public static final int T__107=107;
	public static final int T__108=108;
	public static final int T__109=109;
	public static final int T__110=110;
	public static final int T__111=111;
	public static final int T__112=112;
	public static final int ADD=4;
	public static final int AND=5;
	public static final int BINARY_LITERAL=6;
	public static final int BIN_DIGITS=7;
	public static final int CALL=8;
	public static final int CARRY=9;
	public static final int CODE=10;
	public static final int COMMENT=11;
	public static final int CONST=12;
	public static final int COUNTERS=13;
	public static final int CTRL=14;
	public static final int CTR_FLAG=15;
	public static final int CTR_PREFIX=16;
	public static final int CURRENT_POS=17;
	public static final int C_ADD=18;
	public static final int C_AND=19;
	public static final int C_DIV=20;
	public static final int C_MOD=21;
	public static final int C_MUL=22;
	public static final int C_NOT=23;
	public static final int C_OR=24;
	public static final int C_SHL=25;
	public static final int C_SHR=26;
	public static final int C_SUB=27;
	public static final int C_UNARY_MINUS=28;
	public static final int C_XOR=29;
	public static final int DATA=30;
	public static final int DECIMAL_LITERAL=31;
	public static final int DEC_DIGITS=32;
	public static final int DIV=33;
	public static final int EOI=34;
	public static final int ESCAPE=35;
	public static final int FLAGS=36;
	public static final int FRAMESIZE=37;
	public static final int FREEREGS=38;
	public static final int HALT=39;
	public static final int HEADER=40;
	public static final int HERE=41;
	public static final int HEX_DIGITS=42;
	public static final int HEX_LITERAL=43;
	public static final int ID=44;
	public static final int IN=45;
	public static final int INSTRUCTION=46;
	public static final int INSTRUCTIONDEF=47;
	public static final int IP=48;
	public static final int LOAD=49;
	public static final int LOADREG=50;
	public static final int LOCAL_PREFIX=51;
	public static final int LOCAL_REG=52;
	public static final int MUL=53;
	public static final int MUX=54;
	public static final int NEXT=55;
	public static final int NOP=56;
	public static final int NUM=57;
	public static final int OP=58;
	public static final int OPTION=59;
	public static final int OR=60;
	public static final int OUT=61;
	public static final int OUT1=62;
	public static final int OUT2=63;
	public static final int OVERFLOW=64;
	public static final int PERCENT=65;
	public static final int RAM=66;
	public static final int RAMLOADSIZE=67;
	public static final int RAMPTRSIZE=68;
	public static final int RAMWORDSIZE=69;
	public static final int REG=70;
	public static final int REGPTRSIZE=71;
	public static final int REG_PREFIX=72;
	public static final int RETURN=73;
	public static final int ROL=74;
	public static final int ROMPTRSIZE=75;
	public static final int SEC_CODE=76;
	public static final int SEC_CONST=77;
	public static final int SEC_DATA=78;
	public static final int SEC_END=79;
	public static final int SEC_HEADER=80;
	public static final int SEC_RAM=81;
	public static final int SIGN=82;
	public static final int STACKPTRSIZE=83;
	public static final int STAR=84;
	public static final int STORE=85;
	public static final int STOREREG=86;
	public static final int STRING=87;
	public static final int SUB=88;
	public static final int SYMBOL=89;
	public static final int WORDSIZE=90;
	public static final int WS=91;
	public static final int XOR=92;
	public static final int XORI=93;
	public static final int ZERO=94;

	// delegates
	public Parser[] getDelegates() {
		return new Parser[] {};
	}

	// delegators


	public InchwormAsmParser(TokenStream input) {
		this(input, new RecognizerSharedState());
	}
	public InchwormAsmParser(TokenStream input, RecognizerSharedState state) {
		super(input, state);
	}

	protected TreeAdaptor adaptor = new CommonTreeAdaptor();

	public void setTreeAdaptor(TreeAdaptor adaptor) {
		this.adaptor = adaptor;
	}
	public TreeAdaptor getTreeAdaptor() {
		return adaptor;
	}
	@Override public String[] getTokenNames() { return InchwormAsmParser.tokenNames; }
	@Override public String getGrammarFileName() { return "/home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g"; }


	  /**
	   * Symbol Table
	   */
		HashMap symbols;
		
	  	ArrayList opInfo = new ArrayList();
	  	ArrayList ops = new ArrayList();
		
		int nextInstruction = 0; // Counter to keep track of instructions for label definitions

		VMState params;
		
		/**
		 * Initialize VM State. Call this before starting to parse.
		 */
		void initState(VMState params,  HashMap symbols) {
		  this.symbols = symbols;
		  this.params = params;
		  nextInstruction = 0;
		  opInfo.clear();
		}
		
		VMState getVMState() {
		  return params;
		}
		
		
	  @Override
	  public Object recoverFromMismatchedSet(IntStream input, RecognitionException e, BitSet follow) 
	      throws RecognitionException {
	    throw e;
	  }


	  static class SyntaxError extends RecognitionException {
	    String errorMessage;
	    
	    SyntaxError(String errorMessage, IntStream input) {
	      super(input);
	      this.errorMessage = String.format("%s", errorMessage);
	    }
	  }
	  
	 /**
	  * Override the displayRecognitionError to deal with custom errors.
	  */
	  @Override 
	  public void displayRecognitionError(String[] tokenNames, RecognitionException e) {
	        if (e instanceof SyntaxError) {
	          SyntaxError se = (SyntaxError) e;
	          emitErrorMessage(se.errorMessage);
	        } else {
	          super.displayRecognitionError(tokenNames, e);
	        }
	    }


	public static class c_xor_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_xor"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:279:1: c_xor : '^' ;
	public final InchwormAsmParser.c_xor_return c_xor() throws RecognitionException {
		InchwormAsmParser.c_xor_return retval = new InchwormAsmParser.c_xor_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal1=null;

		Object char_literal1_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:279:7: ( '^' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:279:9: '^'
			{
			root_0 = (Object)adaptor.nil();


			char_literal1=(Token)match(input,109,FOLLOW_109_in_c_xor1035); 
			char_literal1_tree = (Object)adaptor.create(char_literal1);
			adaptor.addChild(root_0, char_literal1_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_xor"


	public static class c_and_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_and"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:280:1: c_and : '&' ;
	public final InchwormAsmParser.c_and_return c_and() throws RecognitionException {
		InchwormAsmParser.c_and_return retval = new InchwormAsmParser.c_and_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal2=null;

		Object char_literal2_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:280:7: ( '&' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:280:9: '&'
			{
			root_0 = (Object)adaptor.nil();


			char_literal2=(Token)match(input,95,FOLLOW_95_in_c_and1042); 
			char_literal2_tree = (Object)adaptor.create(char_literal2);
			adaptor.addChild(root_0, char_literal2_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_and"


	public static class c_or_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_or"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:281:1: c_or : '|' ;
	public final InchwormAsmParser.c_or_return c_or() throws RecognitionException {
		InchwormAsmParser.c_or_return retval = new InchwormAsmParser.c_or_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal3=null;

		Object char_literal3_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:281:6: ( '|' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:281:8: '|'
			{
			root_0 = (Object)adaptor.nil();


			char_literal3=(Token)match(input,111,FOLLOW_111_in_c_or1049); 
			char_literal3_tree = (Object)adaptor.create(char_literal3);
			adaptor.addChild(root_0, char_literal3_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_or"


	public static class c_shl_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_shl"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:282:1: c_shl : '<<' ;
	public final InchwormAsmParser.c_shl_return c_shl() throws RecognitionException {
		InchwormAsmParser.c_shl_return retval = new InchwormAsmParser.c_shl_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token string_literal4=null;

		Object string_literal4_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:282:7: ( '<<' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:282:9: '<<'
			{
			root_0 = (Object)adaptor.nil();


			string_literal4=(Token)match(input,104,FOLLOW_104_in_c_shl1056); 
			string_literal4_tree = (Object)adaptor.create(string_literal4);
			adaptor.addChild(root_0, string_literal4_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_shl"


	public static class c_shr_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_shr"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:283:1: c_shr : '>>' ;
	public final InchwormAsmParser.c_shr_return c_shr() throws RecognitionException {
		InchwormAsmParser.c_shr_return retval = new InchwormAsmParser.c_shr_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token string_literal5=null;

		Object string_literal5_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:283:7: ( '>>' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:283:9: '>>'
			{
			root_0 = (Object)adaptor.nil();


			string_literal5=(Token)match(input,106,FOLLOW_106_in_c_shr1063); 
			string_literal5_tree = (Object)adaptor.create(string_literal5);
			adaptor.addChild(root_0, string_literal5_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_shr"


	public static class c_add_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_add"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:284:1: c_add : '+' ;
	public final InchwormAsmParser.c_add_return c_add() throws RecognitionException {
		InchwormAsmParser.c_add_return retval = new InchwormAsmParser.c_add_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal6=null;

		Object char_literal6_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:284:7: ( '+' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:284:9: '+'
			{
			root_0 = (Object)adaptor.nil();


			char_literal6=(Token)match(input,98,FOLLOW_98_in_c_add1070); 
			char_literal6_tree = (Object)adaptor.create(char_literal6);
			adaptor.addChild(root_0, char_literal6_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_add"


	public static class c_sub_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_sub"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:285:1: c_sub : '-' ;
	public final InchwormAsmParser.c_sub_return c_sub() throws RecognitionException {
		InchwormAsmParser.c_sub_return retval = new InchwormAsmParser.c_sub_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal7=null;

		Object char_literal7_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:285:7: ( '-' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:285:9: '-'
			{
			root_0 = (Object)adaptor.nil();


			char_literal7=(Token)match(input,100,FOLLOW_100_in_c_sub1077); 
			char_literal7_tree = (Object)adaptor.create(char_literal7);
			adaptor.addChild(root_0, char_literal7_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_sub"


	public static class c_mul_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_mul"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:286:1: c_mul : STAR ;
	public final InchwormAsmParser.c_mul_return c_mul() throws RecognitionException {
		InchwormAsmParser.c_mul_return retval = new InchwormAsmParser.c_mul_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token STAR8=null;

		Object STAR8_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:286:7: ( STAR )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:286:9: STAR
			{
			root_0 = (Object)adaptor.nil();


			STAR8=(Token)match(input,STAR,FOLLOW_STAR_in_c_mul1084); 
			STAR8_tree = (Object)adaptor.create(STAR8);
			adaptor.addChild(root_0, STAR8_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_mul"


	public static class c_div_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_div"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:287:1: c_div : '/' ;
	public final InchwormAsmParser.c_div_return c_div() throws RecognitionException {
		InchwormAsmParser.c_div_return retval = new InchwormAsmParser.c_div_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal9=null;

		Object char_literal9_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:287:7: ( '/' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:287:9: '/'
			{
			root_0 = (Object)adaptor.nil();


			char_literal9=(Token)match(input,101,FOLLOW_101_in_c_div1091); 
			char_literal9_tree = (Object)adaptor.create(char_literal9);
			adaptor.addChild(root_0, char_literal9_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_div"


	public static class c_mod_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_mod"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:288:1: c_mod : PERCENT ;
	public final InchwormAsmParser.c_mod_return c_mod() throws RecognitionException {
		InchwormAsmParser.c_mod_return retval = new InchwormAsmParser.c_mod_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token PERCENT10=null;

		Object PERCENT10_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:288:7: ( PERCENT )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:288:9: PERCENT
			{
			root_0 = (Object)adaptor.nil();


			PERCENT10=(Token)match(input,PERCENT,FOLLOW_PERCENT_in_c_mod1098); 
			PERCENT10_tree = (Object)adaptor.create(PERCENT10);
			adaptor.addChild(root_0, PERCENT10_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_mod"


	public static class c_not_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "c_not"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:289:1: c_not : '~' ;
	public final InchwormAsmParser.c_not_return c_not() throws RecognitionException {
		InchwormAsmParser.c_not_return retval = new InchwormAsmParser.c_not_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal11=null;

		Object char_literal11_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:289:7: ( '~' )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:289:9: '~'
			{
			root_0 = (Object)adaptor.nil();


			char_literal11=(Token)match(input,112,FOLLOW_112_in_c_not1105); 
			char_literal11_tree = (Object)adaptor.create(char_literal11);
			adaptor.addChild(root_0, char_literal11_tree);

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "c_not"


	public static class program_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "program"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:1: program : ( header_section )? ( const_section )? ( data_section )? ( code_section )? ( ram_section )? ( SEC_END )? ;
	public final InchwormAsmParser.program_return program() throws RecognitionException {
		InchwormAsmParser.program_return retval = new InchwormAsmParser.program_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEC_END17=null;
		ParserRuleReturnScope header_section12 =null;
		ParserRuleReturnScope const_section13 =null;
		ParserRuleReturnScope data_section14 =null;
		ParserRuleReturnScope code_section15 =null;
		ParserRuleReturnScope ram_section16 =null;

		Object SEC_END17_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:9: ( ( header_section )? ( const_section )? ( data_section )? ( code_section )? ( ram_section )? ( SEC_END )? )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:11: ( header_section )? ( const_section )? ( data_section )? ( code_section )? ( ram_section )? ( SEC_END )?
			{
			root_0 = (Object)adaptor.nil();


			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:11: ( header_section )?
			int alt1=2;
			int LA1_0 = input.LA(1);
			if ( (LA1_0==COUNTERS||LA1_0==FRAMESIZE||LA1_0==INSTRUCTIONDEF||(LA1_0 >= RAMLOADSIZE && LA1_0 <= RAMWORDSIZE)||LA1_0==REGPTRSIZE||LA1_0==ROMPTRSIZE||LA1_0==SEC_HEADER||LA1_0==STACKPTRSIZE||LA1_0==WORDSIZE) ) {
				alt1=1;
			}
			switch (alt1) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:11: header_section
					{
					pushFollow(FOLLOW_header_section_in_program1355);
					header_section12=header_section();
					state._fsp--;

					adaptor.addChild(root_0, header_section12.getTree());

					}
					break;

			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:27: ( const_section )?
			int alt2=2;
			int LA2_0 = input.LA(1);
			if ( (LA2_0==SEC_CONST) ) {
				alt2=1;
			}
			switch (alt2) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:27: const_section
					{
					pushFollow(FOLLOW_const_section_in_program1358);
					const_section13=const_section();
					state._fsp--;

					adaptor.addChild(root_0, const_section13.getTree());

					}
					break;

			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:42: ( data_section )?
			int alt3=2;
			int LA3_0 = input.LA(1);
			if ( (LA3_0==SEC_DATA) ) {
				alt3=1;
			}
			switch (alt3) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:42: data_section
					{
					pushFollow(FOLLOW_data_section_in_program1361);
					data_section14=data_section();
					state._fsp--;

					adaptor.addChild(root_0, data_section14.getTree());

					}
					break;

			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:56: ( code_section )?
			int alt4=2;
			int LA4_0 = input.LA(1);
			if ( (LA4_0==SEC_CODE) ) {
				alt4=1;
			}
			switch (alt4) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:56: code_section
					{
					pushFollow(FOLLOW_code_section_in_program1364);
					code_section15=code_section();
					state._fsp--;

					adaptor.addChild(root_0, code_section15.getTree());

					}
					break;

			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:70: ( ram_section )?
			int alt5=2;
			int LA5_0 = input.LA(1);
			if ( (LA5_0==SEC_RAM) ) {
				alt5=1;
			}
			switch (alt5) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:70: ram_section
					{
					pushFollow(FOLLOW_ram_section_in_program1367);
					ram_section16=ram_section();
					state._fsp--;

					adaptor.addChild(root_0, ram_section16.getTree());

					}
					break;

			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:83: ( SEC_END )?
			int alt6=2;
			int LA6_0 = input.LA(1);
			if ( (LA6_0==SEC_END) ) {
				alt6=1;
			}
			switch (alt6) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:354:83: SEC_END
					{
					SEC_END17=(Token)match(input,SEC_END,FOLLOW_SEC_END_in_program1370); 
					SEC_END17_tree = (Object)adaptor.create(SEC_END17);
					adaptor.addChild(root_0, SEC_END17_tree);

					}
					break;

			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "program"


	public static class header_section_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "header_section"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:357:1: header_section : ( ( SEC_HEADER )? ) (opts= header_option )* ins= instruction_def -> ^( HEADER $opts $ins) ;
	public final InchwormAsmParser.header_section_return header_section() throws RecognitionException {
		InchwormAsmParser.header_section_return retval = new InchwormAsmParser.header_section_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEC_HEADER18=null;
		ParserRuleReturnScope opts =null;
		ParserRuleReturnScope ins =null;

		Object SEC_HEADER18_tree=null;
		RewriteRuleTokenStream stream_SEC_HEADER=new RewriteRuleTokenStream(adaptor,"token SEC_HEADER");
		RewriteRuleSubtreeStream stream_instruction_def=new RewriteRuleSubtreeStream(adaptor,"rule instruction_def");
		RewriteRuleSubtreeStream stream_header_option=new RewriteRuleSubtreeStream(adaptor,"rule header_option");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:2: ( ( ( SEC_HEADER )? ) (opts= header_option )* ins= instruction_def -> ^( HEADER $opts $ins) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:4: ( ( SEC_HEADER )? ) (opts= header_option )* ins= instruction_def
			{
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:4: ( ( SEC_HEADER )? )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:5: ( SEC_HEADER )?
			{
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:5: ( SEC_HEADER )?
			int alt7=2;
			int LA7_0 = input.LA(1);
			if ( (LA7_0==SEC_HEADER) ) {
				alt7=1;
			}
			switch (alt7) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:5: SEC_HEADER
					{
					SEC_HEADER18=(Token)match(input,SEC_HEADER,FOLLOW_SEC_HEADER_in_header_section1383);  
					stream_SEC_HEADER.add(SEC_HEADER18);

					}
					break;

			}

			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:22: (opts= header_option )*
			loop8:
			while (true) {
				int alt8=2;
				int LA8_0 = input.LA(1);
				if ( (LA8_0==COUNTERS||LA8_0==FRAMESIZE||(LA8_0 >= RAMLOADSIZE && LA8_0 <= RAMWORDSIZE)||LA8_0==REGPTRSIZE||LA8_0==ROMPTRSIZE||LA8_0==STACKPTRSIZE||LA8_0==WORDSIZE) ) {
					alt8=1;
				}

				switch (alt8) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:22: opts= header_option
					{
					pushFollow(FOLLOW_header_option_in_header_section1389);
					opts=header_option();
					state._fsp--;

					stream_header_option.add(opts.getTree());
					}
					break;

				default :
					break loop8;
				}
			}

			pushFollow(FOLLOW_instruction_def_in_header_section1394);
			ins=instruction_def();
			state._fsp--;

			stream_instruction_def.add(ins.getTree());
			// AST REWRITE
			// elements: ins, opts
			// token labels: 
			// rule labels: opts, retval, ins
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_opts=new RewriteRuleSubtreeStream(adaptor,"rule opts",opts!=null?opts.getTree():null);
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);
			RewriteRuleSubtreeStream stream_ins=new RewriteRuleSubtreeStream(adaptor,"rule ins",ins!=null?ins.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 358:58: -> ^( HEADER $opts $ins)
			{
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:358:61: ^( HEADER $opts $ins)
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(HEADER, "HEADER"), root_1);
				adaptor.addChild(root_1, stream_opts.nextTree());
				adaptor.addChild(root_1, stream_ins.nextTree());
				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "header_section"


	public static class instruction_def_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "instruction_def"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:362:1: instruction_def : INSTRUCTIONDEF ( ( ':' )? ) ( opdesc )+ -> ^( INSTRUCTIONDEF ( opdesc )+ ) ;
	public final InchwormAsmParser.instruction_def_return instruction_def() throws RecognitionException {
		InchwormAsmParser.instruction_def_return retval = new InchwormAsmParser.instruction_def_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token INSTRUCTIONDEF19=null;
		Token char_literal20=null;
		ParserRuleReturnScope opdesc21 =null;

		Object INSTRUCTIONDEF19_tree=null;
		Object char_literal20_tree=null;
		RewriteRuleTokenStream stream_INSTRUCTIONDEF=new RewriteRuleTokenStream(adaptor,"token INSTRUCTIONDEF");
		RewriteRuleTokenStream stream_102=new RewriteRuleTokenStream(adaptor,"token 102");
		RewriteRuleSubtreeStream stream_opdesc=new RewriteRuleSubtreeStream(adaptor,"rule opdesc");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:2: ( INSTRUCTIONDEF ( ( ':' )? ) ( opdesc )+ -> ^( INSTRUCTIONDEF ( opdesc )+ ) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:4: INSTRUCTIONDEF ( ( ':' )? ) ( opdesc )+
			{
			INSTRUCTIONDEF19=(Token)match(input,INSTRUCTIONDEF,FOLLOW_INSTRUCTIONDEF_in_instruction_def1419);  
			stream_INSTRUCTIONDEF.add(INSTRUCTIONDEF19);

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:19: ( ( ':' )? )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:20: ( ':' )?
			{
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:20: ( ':' )?
			int alt9=2;
			int LA9_0 = input.LA(1);
			if ( (LA9_0==102) ) {
				alt9=1;
			}
			switch (alt9) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:20: ':'
					{
					char_literal20=(Token)match(input,102,FOLLOW_102_in_instruction_def1422);  
					stream_102.add(char_literal20);

					}
					break;

			}

			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:26: ( opdesc )+
			int cnt10=0;
			loop10:
			while (true) {
				int alt10=2;
				int LA10_0 = input.LA(1);
				if ( ((LA10_0 >= ADD && LA10_0 <= AND)||LA10_0==CALL||LA10_0==DIV||LA10_0==HALT||LA10_0==IN||(LA10_0 >= LOAD && LA10_0 <= LOADREG)||(LA10_0 >= MUL && LA10_0 <= NEXT)||(LA10_0 >= OR && LA10_0 <= OUT)||(LA10_0 >= RETURN && LA10_0 <= ROL)||(LA10_0 >= STAR && LA10_0 <= STOREREG)||LA10_0==SUB||(LA10_0 >= XOR && LA10_0 <= ZERO)) ) {
					alt10=1;
				}

				switch (alt10) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:26: opdesc
					{
					pushFollow(FOLLOW_opdesc_in_instruction_def1426);
					opdesc21=opdesc();
					state._fsp--;

					stream_opdesc.add(opdesc21.getTree());
					}
					break;

				default :
					if ( cnt10 >= 1 ) break loop10;
					EarlyExitException eee = new EarlyExitException(10, input);
					throw eee;
				}
				cnt10++;
			}

			 params.setOpDescs(ops); 
			// AST REWRITE
			// elements: opdesc, INSTRUCTIONDEF
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 363:62: -> ^( INSTRUCTIONDEF ( opdesc )+ )
			{
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:363:65: ^( INSTRUCTIONDEF ( opdesc )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot(stream_INSTRUCTIONDEF.nextNode(), root_1);
				if ( !(stream_opdesc.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_opdesc.hasNext() ) {
					adaptor.addChild(root_1, stream_opdesc.nextTree());
				}
				stream_opdesc.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "instruction_def"


	public static class opdesc_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "opdesc"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:366:1: opdesc : ( ( STAR )? opname ':' freq -> ^( OP opname freq ( STAR )? ) | ( STAR )? opname -> ^( OP opname NUM[\"1\"] ( STAR )? ) );
	public final InchwormAsmParser.opdesc_return opdesc() throws RecognitionException {
		InchwormAsmParser.opdesc_return retval = new InchwormAsmParser.opdesc_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token STAR22=null;
		Token char_literal24=null;
		Token STAR26=null;
		ParserRuleReturnScope opname23 =null;
		ParserRuleReturnScope freq25 =null;
		ParserRuleReturnScope opname27 =null;

		Object STAR22_tree=null;
		Object char_literal24_tree=null;
		Object STAR26_tree=null;
		RewriteRuleTokenStream stream_102=new RewriteRuleTokenStream(adaptor,"token 102");
		RewriteRuleTokenStream stream_STAR=new RewriteRuleTokenStream(adaptor,"token STAR");
		RewriteRuleSubtreeStream stream_freq=new RewriteRuleSubtreeStream(adaptor,"rule freq");
		RewriteRuleSubtreeStream stream_opname=new RewriteRuleSubtreeStream(adaptor,"rule opname");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:367:3: ( ( STAR )? opname ':' freq -> ^( OP opname freq ( STAR )? ) | ( STAR )? opname -> ^( OP opname NUM[\"1\"] ( STAR )? ) )
			int alt13=2;
			int LA13_0 = input.LA(1);
			if ( (LA13_0==STAR) ) {
				int LA13_1 = input.LA(2);
				if ( ((LA13_1 >= ADD && LA13_1 <= AND)||LA13_1==CALL||LA13_1==DIV||LA13_1==HALT||LA13_1==IN||(LA13_1 >= LOAD && LA13_1 <= LOADREG)||(LA13_1 >= MUL && LA13_1 <= NEXT)||(LA13_1 >= OR && LA13_1 <= OUT)||(LA13_1 >= RETURN && LA13_1 <= ROL)||(LA13_1 >= STORE && LA13_1 <= STOREREG)||LA13_1==SUB||(LA13_1 >= XOR && LA13_1 <= ZERO)) ) {
					int LA13_2 = input.LA(3);
					if ( (LA13_2==102) ) {
						alt13=1;
					}
					else if ( (LA13_2==EOF||(LA13_2 >= ADD && LA13_2 <= AND)||LA13_2==CALL||LA13_2==DIV||LA13_2==HALT||LA13_2==IN||(LA13_2 >= LOAD && LA13_2 <= LOADREG)||(LA13_2 >= MUL && LA13_2 <= NEXT)||(LA13_2 >= OR && LA13_2 <= OUT)||(LA13_2 >= RETURN && LA13_2 <= ROL)||(LA13_2 >= SEC_CODE && LA13_2 <= SEC_END)||LA13_2==SEC_RAM||(LA13_2 >= STAR && LA13_2 <= STOREREG)||LA13_2==SUB||(LA13_2 >= XOR && LA13_2 <= ZERO)) ) {
						alt13=2;
					}

					else {
						int nvaeMark = input.mark();
						try {
							for (int nvaeConsume = 0; nvaeConsume < 3 - 1; nvaeConsume++) {
								input.consume();
							}
							NoViableAltException nvae =
								new NoViableAltException("", 13, 2, input);
							throw nvae;
						} finally {
							input.rewind(nvaeMark);
						}
					}

				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 13, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( ((LA13_0 >= ADD && LA13_0 <= AND)||LA13_0==CALL||LA13_0==DIV||LA13_0==HALT||LA13_0==IN||(LA13_0 >= LOAD && LA13_0 <= LOADREG)||(LA13_0 >= MUL && LA13_0 <= NEXT)||(LA13_0 >= OR && LA13_0 <= OUT)||(LA13_0 >= RETURN && LA13_0 <= ROL)||(LA13_0 >= STORE && LA13_0 <= STOREREG)||LA13_0==SUB||(LA13_0 >= XOR && LA13_0 <= ZERO)) ) {
				int LA13_2 = input.LA(2);
				if ( (LA13_2==102) ) {
					alt13=1;
				}
				else if ( (LA13_2==EOF||(LA13_2 >= ADD && LA13_2 <= AND)||LA13_2==CALL||LA13_2==DIV||LA13_2==HALT||LA13_2==IN||(LA13_2 >= LOAD && LA13_2 <= LOADREG)||(LA13_2 >= MUL && LA13_2 <= NEXT)||(LA13_2 >= OR && LA13_2 <= OUT)||(LA13_2 >= RETURN && LA13_2 <= ROL)||(LA13_2 >= SEC_CODE && LA13_2 <= SEC_END)||LA13_2==SEC_RAM||(LA13_2 >= STAR && LA13_2 <= STOREREG)||LA13_2==SUB||(LA13_2 >= XOR && LA13_2 <= ZERO)) ) {
					alt13=2;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 13, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}

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

			switch (alt13) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:367:5: ( STAR )? opname ':' freq
					{
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:367:5: ( STAR )?
					int alt11=2;
					int LA11_0 = input.LA(1);
					if ( (LA11_0==STAR) ) {
						alt11=1;
					}
					switch (alt11) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:367:5: STAR
							{
							STAR22=(Token)match(input,STAR,FOLLOW_STAR_in_opdesc1451);  
							stream_STAR.add(STAR22);

							}
							break;

					}

					pushFollow(FOLLOW_opname_in_opdesc1454);
					opname23=opname();
					state._fsp--;

					stream_opname.add(opname23.getTree());
					char_literal24=(Token)match(input,102,FOLLOW_102_in_opdesc1456);  
					stream_102.add(char_literal24);

					pushFollow(FOLLOW_freq_in_opdesc1458);
					freq25=freq();
					state._fsp--;

					stream_freq.add(freq25.getTree());
					ops.add(new OpDesc(getDefaultDesc(Op.getEnum((opname23!=null?input.toString(opname23.start,opname23.stop):null))), Integer.parseInt((freq25!=null?input.toString(freq25.start,freq25.stop):null), 16)));
					      opInfo.add(new ExtraOpInfo(STAR22 != null));
					// AST REWRITE
					// elements: opname, STAR, freq
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 369:52: -> ^( OP opname freq ( STAR )? )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:369:55: ^( OP opname freq ( STAR )? )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OP, "OP"), root_1);
						adaptor.addChild(root_1, stream_opname.nextTree());
						adaptor.addChild(root_1, stream_freq.nextTree());
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:369:72: ( STAR )?
						if ( stream_STAR.hasNext() ) {
							adaptor.addChild(root_1, stream_STAR.nextNode());
						}
						stream_STAR.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:370:4: ( STAR )? opname
					{
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:370:4: ( STAR )?
					int alt12=2;
					int LA12_0 = input.LA(1);
					if ( (LA12_0==STAR) ) {
						alt12=1;
					}
					switch (alt12) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:370:4: STAR
							{
							STAR26=(Token)match(input,STAR,FOLLOW_STAR_in_opdesc1484);  
							stream_STAR.add(STAR26);

							}
							break;

					}

					pushFollow(FOLLOW_opname_in_opdesc1487);
					opname27=opname();
					state._fsp--;

					stream_opname.add(opname27.getTree());
					ops.add(getDefaultDesc(Op.getEnum((opname27!=null?input.toString(opname27.start,opname27.stop):null))));
						    opInfo.add(new ExtraOpInfo(STAR26 != null));
					// AST REWRITE
					// elements: opname, STAR
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 372:51: -> ^( OP opname NUM[\"1\"] ( STAR )? )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:372:54: ^( OP opname NUM[\"1\"] ( STAR )? )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OP, "OP"), root_1);
						adaptor.addChild(root_1, stream_opname.nextTree());
						adaptor.addChild(root_1, (Object)adaptor.create(NUM, "1"));
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:372:75: ( STAR )?
						if ( stream_STAR.hasNext() ) {
							adaptor.addChild(root_1, stream_STAR.nextNode());
						}
						stream_STAR.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "opdesc"


	public static class opname_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "opname"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:375:1: opname : ( ZERO | XORI | XOR | OR | ADD | SUB | ROL | AND | MUL | DIV | LOAD | STORE | LOADREG | STOREREG | OUT | IN | HALT | MUX | CALL | RETURN | NEXT );
	public final InchwormAsmParser.opname_return opname() throws RecognitionException {
		InchwormAsmParser.opname_return retval = new InchwormAsmParser.opname_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set28=null;

		Object set28_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:375:9: ( ZERO | XORI | XOR | OR | ADD | SUB | ROL | AND | MUL | DIV | LOAD | STORE | LOADREG | STOREREG | OUT | IN | HALT | MUX | CALL | RETURN | NEXT )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:
			{
			root_0 = (Object)adaptor.nil();


			set28=input.LT(1);
			if ( (input.LA(1) >= ADD && input.LA(1) <= AND)||input.LA(1)==CALL||input.LA(1)==DIV||input.LA(1)==HALT||input.LA(1)==IN||(input.LA(1) >= LOAD && input.LA(1) <= LOADREG)||(input.LA(1) >= MUL && input.LA(1) <= NEXT)||(input.LA(1) >= OR && input.LA(1) <= OUT)||(input.LA(1) >= RETURN && input.LA(1) <= ROL)||(input.LA(1) >= STORE && input.LA(1) <= STOREREG)||input.LA(1)==SUB||(input.LA(1) >= XOR && input.LA(1) <= ZERO) ) {
				input.consume();
				adaptor.addChild(root_0, (Object)adaptor.create(set28));
				state.errorRecovery=false;
			}
			else {
				MismatchedSetException mse = new MismatchedSetException(null,input);
				throw mse;
			}
			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "opname"


	public static class freq_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "freq"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:379:1: freq : num ;
	public final InchwormAsmParser.freq_return freq() throws RecognitionException {
		InchwormAsmParser.freq_return retval = new InchwormAsmParser.freq_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope num29 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:379:6: ( num )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:379:8: num
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_num_in_freq1619);
			num29=num();
			state._fsp--;

			adaptor.addChild(root_0, num29.getTree());

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "freq"


	public static class header_option_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "header_option"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:382:1: header_option : ( WORDSIZE ( ':' )? num -> ^( OPTION WORDSIZE num ) | RAMWORDSIZE ( ':' )? num -> ^( OPTION RAMWORDSIZE num ) | REGPTRSIZE ( ':' )? num -> ^( OPTION REGPTRSIZE num ) | ROMPTRSIZE ( ':' )? num -> ^( OPTION ROMPTRSIZE num ) | RAMPTRSIZE ( ':' )? num -> ^( OPTION RAMPTRSIZE num ) | RAMLOADSIZE ( ':' )? num -> ^( OPTION RAMLOADSIZE num ) | STACKPTRSIZE ( ':' )? num -> ^( OPTION STACKPTRSIZE num ) | FRAMESIZE ( ':' )? num -> ^( OPTION FRAMESIZE num ) | COUNTERS ( ':' )? ( countermodulus )+ -> ^( OPTION COUNTERS ( countermodulus )+ ) );
	public final InchwormAsmParser.header_option_return header_option() throws RecognitionException {
		InchwormAsmParser.header_option_return retval = new InchwormAsmParser.header_option_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token WORDSIZE30=null;
		Token char_literal31=null;
		Token RAMWORDSIZE33=null;
		Token char_literal34=null;
		Token REGPTRSIZE36=null;
		Token char_literal37=null;
		Token ROMPTRSIZE39=null;
		Token char_literal40=null;
		Token RAMPTRSIZE42=null;
		Token char_literal43=null;
		Token RAMLOADSIZE45=null;
		Token char_literal46=null;
		Token STACKPTRSIZE48=null;
		Token char_literal49=null;
		Token FRAMESIZE51=null;
		Token char_literal52=null;
		Token COUNTERS54=null;
		Token char_literal55=null;
		ParserRuleReturnScope num32 =null;
		ParserRuleReturnScope num35 =null;
		ParserRuleReturnScope num38 =null;
		ParserRuleReturnScope num41 =null;
		ParserRuleReturnScope num44 =null;
		ParserRuleReturnScope num47 =null;
		ParserRuleReturnScope num50 =null;
		ParserRuleReturnScope num53 =null;
		ParserRuleReturnScope countermodulus56 =null;

		Object WORDSIZE30_tree=null;
		Object char_literal31_tree=null;
		Object RAMWORDSIZE33_tree=null;
		Object char_literal34_tree=null;
		Object REGPTRSIZE36_tree=null;
		Object char_literal37_tree=null;
		Object ROMPTRSIZE39_tree=null;
		Object char_literal40_tree=null;
		Object RAMPTRSIZE42_tree=null;
		Object char_literal43_tree=null;
		Object RAMLOADSIZE45_tree=null;
		Object char_literal46_tree=null;
		Object STACKPTRSIZE48_tree=null;
		Object char_literal49_tree=null;
		Object FRAMESIZE51_tree=null;
		Object char_literal52_tree=null;
		Object COUNTERS54_tree=null;
		Object char_literal55_tree=null;
		RewriteRuleTokenStream stream_102=new RewriteRuleTokenStream(adaptor,"token 102");
		RewriteRuleTokenStream stream_REGPTRSIZE=new RewriteRuleTokenStream(adaptor,"token REGPTRSIZE");
		RewriteRuleTokenStream stream_RAMPTRSIZE=new RewriteRuleTokenStream(adaptor,"token RAMPTRSIZE");
		RewriteRuleTokenStream stream_RAMLOADSIZE=new RewriteRuleTokenStream(adaptor,"token RAMLOADSIZE");
		RewriteRuleTokenStream stream_RAMWORDSIZE=new RewriteRuleTokenStream(adaptor,"token RAMWORDSIZE");
		RewriteRuleTokenStream stream_STACKPTRSIZE=new RewriteRuleTokenStream(adaptor,"token STACKPTRSIZE");
		RewriteRuleTokenStream stream_FRAMESIZE=new RewriteRuleTokenStream(adaptor,"token FRAMESIZE");
		RewriteRuleTokenStream stream_ROMPTRSIZE=new RewriteRuleTokenStream(adaptor,"token ROMPTRSIZE");
		RewriteRuleTokenStream stream_WORDSIZE=new RewriteRuleTokenStream(adaptor,"token WORDSIZE");
		RewriteRuleTokenStream stream_COUNTERS=new RewriteRuleTokenStream(adaptor,"token COUNTERS");
		RewriteRuleSubtreeStream stream_num=new RewriteRuleSubtreeStream(adaptor,"rule num");
		RewriteRuleSubtreeStream stream_countermodulus=new RewriteRuleSubtreeStream(adaptor,"rule countermodulus");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:383:2: ( WORDSIZE ( ':' )? num -> ^( OPTION WORDSIZE num ) | RAMWORDSIZE ( ':' )? num -> ^( OPTION RAMWORDSIZE num ) | REGPTRSIZE ( ':' )? num -> ^( OPTION REGPTRSIZE num ) | ROMPTRSIZE ( ':' )? num -> ^( OPTION ROMPTRSIZE num ) | RAMPTRSIZE ( ':' )? num -> ^( OPTION RAMPTRSIZE num ) | RAMLOADSIZE ( ':' )? num -> ^( OPTION RAMLOADSIZE num ) | STACKPTRSIZE ( ':' )? num -> ^( OPTION STACKPTRSIZE num ) | FRAMESIZE ( ':' )? num -> ^( OPTION FRAMESIZE num ) | COUNTERS ( ':' )? ( countermodulus )+ -> ^( OPTION COUNTERS ( countermodulus )+ ) )
			int alt24=9;
			switch ( input.LA(1) ) {
			case WORDSIZE:
				{
				alt24=1;
				}
				break;
			case RAMWORDSIZE:
				{
				alt24=2;
				}
				break;
			case REGPTRSIZE:
				{
				alt24=3;
				}
				break;
			case ROMPTRSIZE:
				{
				alt24=4;
				}
				break;
			case RAMPTRSIZE:
				{
				alt24=5;
				}
				break;
			case RAMLOADSIZE:
				{
				alt24=6;
				}
				break;
			case STACKPTRSIZE:
				{
				alt24=7;
				}
				break;
			case FRAMESIZE:
				{
				alt24=8;
				}
				break;
			case COUNTERS:
				{
				alt24=9;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 24, 0, input);
				throw nvae;
			}
			switch (alt24) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:383:4: WORDSIZE ( ':' )? num
					{
					WORDSIZE30=(Token)match(input,WORDSIZE,FOLLOW_WORDSIZE_in_header_option1633);  
					stream_WORDSIZE.add(WORDSIZE30);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:383:13: ( ':' )?
					int alt14=2;
					int LA14_0 = input.LA(1);
					if ( (LA14_0==102) ) {
						alt14=1;
					}
					switch (alt14) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:383:13: ':'
							{
							char_literal31=(Token)match(input,102,FOLLOW_102_in_header_option1635);  
							stream_102.add(char_literal31);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1638);
					num32=num();
					state._fsp--;

					stream_num.add(num32.getTree());
					params.setWordSize(Integer.parseInt((num32!=null?input.toString(num32.start,num32.stop):null), 16));
					// AST REWRITE
					// elements: WORDSIZE, num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 383:77: -> ^( OPTION WORDSIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:383:80: ^( OPTION WORDSIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_WORDSIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:384:4: RAMWORDSIZE ( ':' )? num
					{
					RAMWORDSIZE33=(Token)match(input,RAMWORDSIZE,FOLLOW_RAMWORDSIZE_in_header_option1655);  
					stream_RAMWORDSIZE.add(RAMWORDSIZE33);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:384:16: ( ':' )?
					int alt15=2;
					int LA15_0 = input.LA(1);
					if ( (LA15_0==102) ) {
						alt15=1;
					}
					switch (alt15) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:384:16: ':'
							{
							char_literal34=(Token)match(input,102,FOLLOW_102_in_header_option1657);  
							stream_102.add(char_literal34);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1660);
					num35=num();
					state._fsp--;

					stream_num.add(num35.getTree());
					params.setRamWordSize(Integer.parseInt((num35!=null?input.toString(num35.start,num35.stop):null), 16));
					// AST REWRITE
					// elements: num, RAMWORDSIZE
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 384:83: -> ^( OPTION RAMWORDSIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:384:86: ^( OPTION RAMWORDSIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_RAMWORDSIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:385:4: REGPTRSIZE ( ':' )? num
					{
					REGPTRSIZE36=(Token)match(input,REGPTRSIZE,FOLLOW_REGPTRSIZE_in_header_option1677);  
					stream_REGPTRSIZE.add(REGPTRSIZE36);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:385:15: ( ':' )?
					int alt16=2;
					int LA16_0 = input.LA(1);
					if ( (LA16_0==102) ) {
						alt16=1;
					}
					switch (alt16) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:385:15: ':'
							{
							char_literal37=(Token)match(input,102,FOLLOW_102_in_header_option1679);  
							stream_102.add(char_literal37);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1682);
					num38=num();
					state._fsp--;

					stream_num.add(num38.getTree());
					params.setRegPtrSize(Integer.parseInt((num38!=null?input.toString(num38.start,num38.stop):null), 16));
					// AST REWRITE
					// elements: num, REGPTRSIZE
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 385:81: -> ^( OPTION REGPTRSIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:385:84: ^( OPTION REGPTRSIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_REGPTRSIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 4 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:386:4: ROMPTRSIZE ( ':' )? num
					{
					ROMPTRSIZE39=(Token)match(input,ROMPTRSIZE,FOLLOW_ROMPTRSIZE_in_header_option1699);  
					stream_ROMPTRSIZE.add(ROMPTRSIZE39);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:386:15: ( ':' )?
					int alt17=2;
					int LA17_0 = input.LA(1);
					if ( (LA17_0==102) ) {
						alt17=1;
					}
					switch (alt17) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:386:15: ':'
							{
							char_literal40=(Token)match(input,102,FOLLOW_102_in_header_option1701);  
							stream_102.add(char_literal40);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1704);
					num41=num();
					state._fsp--;

					stream_num.add(num41.getTree());
					params.setRomPtrSize(Integer.parseInt((num41!=null?input.toString(num41.start,num41.stop):null), 16));
					// AST REWRITE
					// elements: ROMPTRSIZE, num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 386:81: -> ^( OPTION ROMPTRSIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:386:84: ^( OPTION ROMPTRSIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_ROMPTRSIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 5 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:387:4: RAMPTRSIZE ( ':' )? num
					{
					RAMPTRSIZE42=(Token)match(input,RAMPTRSIZE,FOLLOW_RAMPTRSIZE_in_header_option1721);  
					stream_RAMPTRSIZE.add(RAMPTRSIZE42);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:387:15: ( ':' )?
					int alt18=2;
					int LA18_0 = input.LA(1);
					if ( (LA18_0==102) ) {
						alt18=1;
					}
					switch (alt18) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:387:15: ':'
							{
							char_literal43=(Token)match(input,102,FOLLOW_102_in_header_option1723);  
							stream_102.add(char_literal43);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1726);
					num44=num();
					state._fsp--;

					stream_num.add(num44.getTree());
					params.setRamPtrSize(Integer.parseInt((num44!=null?input.toString(num44.start,num44.stop):null), 16));
					// AST REWRITE
					// elements: RAMPTRSIZE, num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 387:81: -> ^( OPTION RAMPTRSIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:387:84: ^( OPTION RAMPTRSIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_RAMPTRSIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 6 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:388:4: RAMLOADSIZE ( ':' )? num
					{
					RAMLOADSIZE45=(Token)match(input,RAMLOADSIZE,FOLLOW_RAMLOADSIZE_in_header_option1743);  
					stream_RAMLOADSIZE.add(RAMLOADSIZE45);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:388:16: ( ':' )?
					int alt19=2;
					int LA19_0 = input.LA(1);
					if ( (LA19_0==102) ) {
						alt19=1;
					}
					switch (alt19) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:388:16: ':'
							{
							char_literal46=(Token)match(input,102,FOLLOW_102_in_header_option1745);  
							stream_102.add(char_literal46);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1748);
					num47=num();
					state._fsp--;

					stream_num.add(num47.getTree());

						        params.setRamLoadSize(Integer.parseInt((num47!=null?input.toString(num47.start,num47.stop):null), 16));
						        if (Integer.bitCount(params.getRamLoadSize()) != 1)
						            throw new SyntaxError("Ram loadsize must be a power of 2!", this.input);
						        if (params.getRamSize() % params.getRamLoadSize() != 0)
					                throw new SyntaxError("Ram loadsize must divide ram size!", this.input);
						    
					// AST REWRITE
					// elements: RAMLOADSIZE, num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 394:8: -> ^( OPTION RAMLOADSIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:394:11: ^( OPTION RAMLOADSIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_RAMLOADSIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 7 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:395:4: STACKPTRSIZE ( ':' )? num
					{
					STACKPTRSIZE48=(Token)match(input,STACKPTRSIZE,FOLLOW_STACKPTRSIZE_in_header_option1765);  
					stream_STACKPTRSIZE.add(STACKPTRSIZE48);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:395:17: ( ':' )?
					int alt20=2;
					int LA20_0 = input.LA(1);
					if ( (LA20_0==102) ) {
						alt20=1;
					}
					switch (alt20) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:395:17: ':'
							{
							char_literal49=(Token)match(input,102,FOLLOW_102_in_header_option1767);  
							stream_102.add(char_literal49);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1770);
					num50=num();
					state._fsp--;

					stream_num.add(num50.getTree());
					params.setStackPtrSize(Integer.parseInt((num50!=null?input.toString(num50.start,num50.stop):null), 16));
					// AST REWRITE
					// elements: num, STACKPTRSIZE
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 395:85: -> ^( OPTION STACKPTRSIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:395:88: ^( OPTION STACKPTRSIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_STACKPTRSIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 8 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:396:4: FRAMESIZE ( ':' )? num
					{
					FRAMESIZE51=(Token)match(input,FRAMESIZE,FOLLOW_FRAMESIZE_in_header_option1787);  
					stream_FRAMESIZE.add(FRAMESIZE51);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:396:14: ( ':' )?
					int alt21=2;
					int LA21_0 = input.LA(1);
					if ( (LA21_0==102) ) {
						alt21=1;
					}
					switch (alt21) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:396:14: ':'
							{
							char_literal52=(Token)match(input,102,FOLLOW_102_in_header_option1789);  
							stream_102.add(char_literal52);

							}
							break;

					}

					pushFollow(FOLLOW_num_in_header_option1792);
					num53=num();
					state._fsp--;

					stream_num.add(num53.getTree());
					params.setFrameSize(Integer.parseInt((num53!=null?input.toString(num53.start,num53.stop):null), 16));
					// AST REWRITE
					// elements: num, FRAMESIZE
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 396:79: -> ^( OPTION FRAMESIZE num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:396:82: ^( OPTION FRAMESIZE num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_FRAMESIZE.nextNode());
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 9 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:397:4: COUNTERS ( ':' )? ( countermodulus )+
					{
					COUNTERS54=(Token)match(input,COUNTERS,FOLLOW_COUNTERS_in_header_option1809);  
					stream_COUNTERS.add(COUNTERS54);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:397:13: ( ':' )?
					int alt22=2;
					int LA22_0 = input.LA(1);
					if ( (LA22_0==102) ) {
						alt22=1;
					}
					switch (alt22) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:397:13: ':'
							{
							char_literal55=(Token)match(input,102,FOLLOW_102_in_header_option1811);  
							stream_102.add(char_literal55);

							}
							break;

					}

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:397:18: ( countermodulus )+
					int cnt23=0;
					loop23:
					while (true) {
						int alt23=2;
						int LA23_0 = input.LA(1);
						if ( (LA23_0==BINARY_LITERAL||LA23_0==DECIMAL_LITERAL||LA23_0==HEX_LITERAL) ) {
							alt23=1;
						}

						switch (alt23) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:397:18: countermodulus
							{
							pushFollow(FOLLOW_countermodulus_in_header_option1814);
							countermodulus56=countermodulus();
							state._fsp--;

							stream_countermodulus.add(countermodulus56.getTree());
							}
							break;

						default :
							if ( cnt23 >= 1 ) break loop23;
							EarlyExitException eee = new EarlyExitException(23, input);
							throw eee;
						}
						cnt23++;
					}

					// AST REWRITE
					// elements: countermodulus, COUNTERS
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 397:34: -> ^( OPTION COUNTERS ( countermodulus )+ )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:397:37: ^( OPTION COUNTERS ( countermodulus )+ )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(OPTION, "OPTION"), root_1);
						adaptor.addChild(root_1, stream_COUNTERS.nextNode());
						if ( !(stream_countermodulus.hasNext()) ) {
							throw new RewriteEarlyExitException();
						}
						while ( stream_countermodulus.hasNext() ) {
							adaptor.addChild(root_1, stream_countermodulus.nextTree());
						}
						stream_countermodulus.reset();

						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "header_option"


	public static class countermodulus_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "countermodulus"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:400:1: countermodulus : num ( ( ',' )? ) ;
	public final InchwormAsmParser.countermodulus_return countermodulus() throws RecognitionException {
		InchwormAsmParser.countermodulus_return retval = new InchwormAsmParser.countermodulus_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal58=null;
		ParserRuleReturnScope num57 =null;

		Object char_literal58_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:401:3: ( num ( ( ',' )? ) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:401:5: num ( ( ',' )? )
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_num_in_countermodulus1840);
			num57=num();
			state._fsp--;

			adaptor.addChild(root_0, num57.getTree());

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:401:9: ( ( ',' )? )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:401:10: ( ',' )?
			{
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:401:10: ( ',' )?
			int alt25=2;
			int LA25_0 = input.LA(1);
			if ( (LA25_0==99) ) {
				alt25=1;
			}
			switch (alt25) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:401:10: ','
					{
					char_literal58=(Token)match(input,99,FOLLOW_99_in_countermodulus1843); 
					char_literal58_tree = (Object)adaptor.create(char_literal58);
					adaptor.addChild(root_0, char_literal58_tree);

					}
					break;

			}

			}

			params.addCounter(Integer.parseInt((num57!=null?input.toString(num57.start,num57.stop):null), 16));
			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "countermodulus"


	public static class const_section_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_section"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:404:1: const_section : SEC_CONST ( const_def )* -> ^( CONST ( const_def )* ) ;
	public final InchwormAsmParser.const_section_return const_section() throws RecognitionException {
		InchwormAsmParser.const_section_return retval = new InchwormAsmParser.const_section_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEC_CONST59=null;
		ParserRuleReturnScope const_def60 =null;

		Object SEC_CONST59_tree=null;
		RewriteRuleTokenStream stream_SEC_CONST=new RewriteRuleTokenStream(adaptor,"token SEC_CONST");
		RewriteRuleSubtreeStream stream_const_def=new RewriteRuleSubtreeStream(adaptor,"rule const_def");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:405:2: ( SEC_CONST ( const_def )* -> ^( CONST ( const_def )* ) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:405:5: SEC_CONST ( const_def )*
			{
			SEC_CONST59=(Token)match(input,SEC_CONST,FOLLOW_SEC_CONST_in_const_section1862);  
			stream_SEC_CONST.add(SEC_CONST59);

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:405:15: ( const_def )*
			loop26:
			while (true) {
				int alt26=2;
				int LA26_0 = input.LA(1);
				if ( (LA26_0==CARRY||(LA26_0 >= CTRL && LA26_0 <= CTR_FLAG)||LA26_0==FLAGS||LA26_0==FREEREGS||(LA26_0 >= ID && LA26_0 <= IN)||LA26_0==IP||LA26_0==LOCAL_REG||LA26_0==NOP||(LA26_0 >= OUT1 && LA26_0 <= OVERFLOW)||LA26_0==SIGN||LA26_0==ZERO) ) {
					alt26=1;
				}

				switch (alt26) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:405:15: const_def
					{
					pushFollow(FOLLOW_const_def_in_const_section1864);
					const_def60=const_def();
					state._fsp--;

					stream_const_def.add(const_def60.getTree());
					}
					break;

				default :
					break loop26;
				}
			}

			// AST REWRITE
			// elements: const_def
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 405:26: -> ^( CONST ( const_def )* )
			{
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:405:29: ^( CONST ( const_def )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CONST, "CONST"), root_1);
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:405:37: ( const_def )*
				while ( stream_const_def.hasNext() ) {
					adaptor.addChild(root_1, stream_const_def.nextTree());
				}
				stream_const_def.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_section"


	public static class const_def_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_def"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:408:1: const_def : ( reserved_label ( '=' | 'db' ) ! const_expr | ID ( '=' | 'db' ) ! const_expr -> ^( ID const_expr ) );
	public final InchwormAsmParser.const_def_return const_def() throws RecognitionException {
		InchwormAsmParser.const_def_return retval = new InchwormAsmParser.const_def_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set62=null;
		Token ID64=null;
		Token char_literal65=null;
		Token string_literal66=null;
		ParserRuleReturnScope reserved_label61 =null;
		ParserRuleReturnScope const_expr63 =null;
		ParserRuleReturnScope const_expr67 =null;

		Object set62_tree=null;
		Object ID64_tree=null;
		Object char_literal65_tree=null;
		Object string_literal66_tree=null;
		RewriteRuleTokenStream stream_110=new RewriteRuleTokenStream(adaptor,"token 110");
		RewriteRuleTokenStream stream_105=new RewriteRuleTokenStream(adaptor,"token 105");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleSubtreeStream stream_const_expr=new RewriteRuleSubtreeStream(adaptor,"rule const_expr");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:409:3: ( reserved_label ( '=' | 'db' ) ! const_expr | ID ( '=' | 'db' ) ! const_expr -> ^( ID const_expr ) )
			int alt28=2;
			int LA28_0 = input.LA(1);
			if ( (LA28_0==CARRY||(LA28_0 >= CTRL && LA28_0 <= CTR_FLAG)||LA28_0==FLAGS||LA28_0==FREEREGS||LA28_0==IN||LA28_0==IP||LA28_0==LOCAL_REG||LA28_0==NOP||(LA28_0 >= OUT1 && LA28_0 <= OVERFLOW)||LA28_0==SIGN||LA28_0==ZERO) ) {
				alt28=1;
			}
			else if ( (LA28_0==ID) ) {
				alt28=2;
			}

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

			switch (alt28) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:409:5: reserved_label ( '=' | 'db' ) ! const_expr
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reserved_label_in_const_def1886);
					reserved_label61=reserved_label();
					state._fsp--;

					adaptor.addChild(root_0, reserved_label61.getTree());

					set62=input.LT(1);
					if ( input.LA(1)==105||input.LA(1)==110 ) {
						input.consume();
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_const_expr_in_const_def1895);
					const_expr63=const_expr();
					state._fsp--;

					adaptor.addChild(root_0, const_expr63.getTree());

					 
					      if (true) 
					        throw new SyntaxError("Attempt to redefine reserved label: " + (reserved_label61!=null?input.toString(reserved_label61.start,reserved_label61.stop):null), this.input); 
					    
					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:413:4: ID ( '=' | 'db' ) ! const_expr
					{
					ID64=(Token)match(input,ID,FOLLOW_ID_in_const_def1902);  
					stream_ID.add(ID64);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:413:7: ( '=' | 'db' )
					int alt27=2;
					int LA27_0 = input.LA(1);
					if ( (LA27_0==105) ) {
						alt27=1;
					}
					else if ( (LA27_0==110) ) {
						alt27=2;
					}

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

					switch (alt27) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:413:8: '='
							{
							char_literal65=(Token)match(input,105,FOLLOW_105_in_const_def1905);  
							stream_105.add(char_literal65);

							}
							break;
						case 2 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:413:12: 'db'
							{
							string_literal66=(Token)match(input,110,FOLLOW_110_in_const_def1907);  
							stream_110.add(string_literal66);

							}
							break;

					}

					pushFollow(FOLLOW_const_expr_in_const_def1911);
					const_expr67=const_expr();
					state._fsp--;

					stream_const_expr.add(const_expr67.getTree());
					// AST REWRITE
					// elements: ID, const_expr
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 413:30: -> ^( ID const_expr )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:413:33: ^( ID const_expr )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot(stream_ID.nextNode(), root_1);
						adaptor.addChild(root_1, stream_const_expr.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_def"


	public static class data_section_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "data_section"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:416:1: data_section : SEC_DATA ( data_def )* -> ^( DATA ( data_def )* ) ;
	public final InchwormAsmParser.data_section_return data_section() throws RecognitionException {
		InchwormAsmParser.data_section_return retval = new InchwormAsmParser.data_section_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEC_DATA68=null;
		ParserRuleReturnScope data_def69 =null;

		Object SEC_DATA68_tree=null;
		RewriteRuleTokenStream stream_SEC_DATA=new RewriteRuleTokenStream(adaptor,"token SEC_DATA");
		RewriteRuleSubtreeStream stream_data_def=new RewriteRuleSubtreeStream(adaptor,"rule data_def");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:417:3: ( SEC_DATA ( data_def )* -> ^( DATA ( data_def )* ) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:417:5: SEC_DATA ( data_def )*
			{
			SEC_DATA68=(Token)match(input,SEC_DATA,FOLLOW_SEC_DATA_in_data_section1931);  
			stream_SEC_DATA.add(SEC_DATA68);

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:417:14: ( data_def )*
			loop29:
			while (true) {
				int alt29=2;
				int LA29_0 = input.LA(1);
				if ( (LA29_0==BINARY_LITERAL||LA29_0==CARRY||(LA29_0 >= CTRL && LA29_0 <= CTR_FLAG)||LA29_0==CURRENT_POS||LA29_0==DECIMAL_LITERAL||LA29_0==FLAGS||LA29_0==FREEREGS||(LA29_0 >= HEX_LITERAL && LA29_0 <= IN)||LA29_0==IP||LA29_0==LOCAL_REG||LA29_0==NOP||(LA29_0 >= OUT1 && LA29_0 <= PERCENT)||LA29_0==REG_PREFIX||LA29_0==SIGN||LA29_0==STRING||LA29_0==ZERO||LA29_0==96||LA29_0==100) ) {
					alt29=1;
				}

				switch (alt29) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:417:14: data_def
					{
					pushFollow(FOLLOW_data_def_in_data_section1933);
					data_def69=data_def();
					state._fsp--;

					stream_data_def.add(data_def69.getTree());
					}
					break;

				default :
					break loop29;
				}
			}

			// AST REWRITE
			// elements: data_def
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 417:24: -> ^( DATA ( data_def )* )
			{
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:417:27: ^( DATA ( data_def )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(DATA, "DATA"), root_1);
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:417:34: ( data_def )*
				while ( stream_data_def.hasNext() ) {
					adaptor.addChild(root_1, stream_data_def.nextTree());
				}
				stream_data_def.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "data_section"


	public static class data_def_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "data_def"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:421:1: data_def : ( reserved_label ':' | ID ':' -> ID | current_pos_ref | reg ( ':' | '=' | 'db' ) -> reg | STRING ( ( ',' )? ) -> STRING | '-' num ( ( ',' )? ) -> ^( C_UNARY_MINUS num ) | num ( ( ',' )? ) -> num | '(' const_expr ')' ( ( ',' )? ) -> const_expr );
	public final InchwormAsmParser.data_def_return data_def() throws RecognitionException {
		InchwormAsmParser.data_def_return retval = new InchwormAsmParser.data_def_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal71=null;
		Token ID72=null;
		Token char_literal73=null;
		Token char_literal76=null;
		Token char_literal77=null;
		Token string_literal78=null;
		Token STRING79=null;
		Token char_literal80=null;
		Token char_literal81=null;
		Token char_literal83=null;
		Token char_literal85=null;
		Token char_literal86=null;
		Token char_literal88=null;
		Token char_literal89=null;
		ParserRuleReturnScope reserved_label70 =null;
		ParserRuleReturnScope current_pos_ref74 =null;
		ParserRuleReturnScope reg75 =null;
		ParserRuleReturnScope num82 =null;
		ParserRuleReturnScope num84 =null;
		ParserRuleReturnScope const_expr87 =null;

		Object char_literal71_tree=null;
		Object ID72_tree=null;
		Object char_literal73_tree=null;
		Object char_literal76_tree=null;
		Object char_literal77_tree=null;
		Object string_literal78_tree=null;
		Object STRING79_tree=null;
		Object char_literal80_tree=null;
		Object char_literal81_tree=null;
		Object char_literal83_tree=null;
		Object char_literal85_tree=null;
		Object char_literal86_tree=null;
		Object char_literal88_tree=null;
		Object char_literal89_tree=null;
		RewriteRuleTokenStream stream_110=new RewriteRuleTokenStream(adaptor,"token 110");
		RewriteRuleTokenStream stream_99=new RewriteRuleTokenStream(adaptor,"token 99");
		RewriteRuleTokenStream stream_100=new RewriteRuleTokenStream(adaptor,"token 100");
		RewriteRuleTokenStream stream_102=new RewriteRuleTokenStream(adaptor,"token 102");
		RewriteRuleTokenStream stream_105=new RewriteRuleTokenStream(adaptor,"token 105");
		RewriteRuleTokenStream stream_STRING=new RewriteRuleTokenStream(adaptor,"token STRING");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleTokenStream stream_96=new RewriteRuleTokenStream(adaptor,"token 96");
		RewriteRuleTokenStream stream_97=new RewriteRuleTokenStream(adaptor,"token 97");
		RewriteRuleSubtreeStream stream_reg=new RewriteRuleSubtreeStream(adaptor,"rule reg");
		RewriteRuleSubtreeStream stream_num=new RewriteRuleSubtreeStream(adaptor,"rule num");
		RewriteRuleSubtreeStream stream_const_expr=new RewriteRuleSubtreeStream(adaptor,"rule const_expr");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:422:3: ( reserved_label ':' | ID ':' -> ID | current_pos_ref | reg ( ':' | '=' | 'db' ) -> reg | STRING ( ( ',' )? ) -> STRING | '-' num ( ( ',' )? ) -> ^( C_UNARY_MINUS num ) | num ( ( ',' )? ) -> num | '(' const_expr ')' ( ( ',' )? ) -> const_expr )
			int alt35=8;
			switch ( input.LA(1) ) {
			case CARRY:
			case CTRL:
			case CTR_FLAG:
			case FLAGS:
			case FREEREGS:
			case IN:
			case IP:
			case LOCAL_REG:
			case NOP:
			case OUT1:
			case OUT2:
			case OVERFLOW:
			case SIGN:
			case ZERO:
				{
				alt35=1;
				}
				break;
			case ID:
				{
				alt35=2;
				}
				break;
			case CURRENT_POS:
				{
				alt35=3;
				}
				break;
			case PERCENT:
			case REG_PREFIX:
				{
				alt35=4;
				}
				break;
			case STRING:
				{
				alt35=5;
				}
				break;
			case 100:
				{
				alt35=6;
				}
				break;
			case BINARY_LITERAL:
			case DECIMAL_LITERAL:
			case HEX_LITERAL:
				{
				alt35=7;
				}
				break;
			case 96:
				{
				alt35=8;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 35, 0, input);
				throw nvae;
			}
			switch (alt35) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:422:5: reserved_label ':'
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reserved_label_in_data_def1962);
					reserved_label70=reserved_label();
					state._fsp--;

					adaptor.addChild(root_0, reserved_label70.getTree());

					char_literal71=(Token)match(input,102,FOLLOW_102_in_data_def1964); 
					char_literal71_tree = (Object)adaptor.create(char_literal71);
					adaptor.addChild(root_0, char_literal71_tree);

					 
					      if (true) 
					        throw new SyntaxError("Attempt to redefine reserved label: " + (reserved_label70!=null?input.toString(reserved_label70.start,reserved_label70.stop):null), this.input); 
					    
					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:426:5: ID ':'
					{
					ID72=(Token)match(input,ID,FOLLOW_ID_in_data_def1972);  
					stream_ID.add(ID72);

					char_literal73=(Token)match(input,102,FOLLOW_102_in_data_def1974);  
					stream_102.add(char_literal73);

					// AST REWRITE
					// elements: ID
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 426:29: -> ID
					{
						adaptor.addChild(root_0, stream_ID.nextNode());
					}


					retval.tree = root_0;

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:427:5: current_pos_ref
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_current_pos_ref_in_data_def2006);
					current_pos_ref74=current_pos_ref();
					state._fsp--;

					adaptor.addChild(root_0, current_pos_ref74.getTree());

					}
					break;
				case 4 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:428:5: reg ( ':' | '=' | 'db' )
					{
					pushFollow(FOLLOW_reg_in_data_def2031);
					reg75=reg();
					state._fsp--;

					stream_reg.add(reg75.getTree());
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:428:10: ( ':' | '=' | 'db' )
					int alt30=3;
					switch ( input.LA(1) ) {
					case 102:
						{
						alt30=1;
						}
						break;
					case 105:
						{
						alt30=2;
						}
						break;
					case 110:
						{
						alt30=3;
						}
						break;
					default:
						NoViableAltException nvae =
							new NoViableAltException("", 30, 0, input);
						throw nvae;
					}
					switch (alt30) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:428:11: ':'
							{
							char_literal76=(Token)match(input,102,FOLLOW_102_in_data_def2035);  
							stream_102.add(char_literal76);

							}
							break;
						case 2 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:428:17: '='
							{
							char_literal77=(Token)match(input,105,FOLLOW_105_in_data_def2039);  
							stream_105.add(char_literal77);

							}
							break;
						case 3 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:428:23: 'db'
							{
							string_literal78=(Token)match(input,110,FOLLOW_110_in_data_def2043);  
							stream_110.add(string_literal78);

							}
							break;

					}

					// AST REWRITE
					// elements: reg
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 428:29: -> reg
					{
						adaptor.addChild(root_0, stream_reg.nextTree());
					}


					retval.tree = root_0;

					}
					break;
				case 5 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:429:5: STRING ( ( ',' )? )
					{
					STRING79=(Token)match(input,STRING,FOLLOW_STRING_in_data_def2058);  
					stream_STRING.add(STRING79);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:429:12: ( ( ',' )? )
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:429:13: ( ',' )?
					{
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:429:13: ( ',' )?
					int alt31=2;
					int LA31_0 = input.LA(1);
					if ( (LA31_0==99) ) {
						alt31=1;
					}
					switch (alt31) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:429:13: ','
							{
							char_literal80=(Token)match(input,99,FOLLOW_99_in_data_def2061);  
							stream_99.add(char_literal80);

							}
							break;

					}

					}

					// AST REWRITE
					// elements: STRING
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 429:29: -> STRING
					{
						adaptor.addChild(root_0, stream_STRING.nextNode());
					}


					retval.tree = root_0;

					}
					break;
				case 6 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:430:5: '-' num ( ( ',' )? )
					{
					char_literal81=(Token)match(input,100,FOLLOW_100_in_data_def2084);  
					stream_100.add(char_literal81);

					pushFollow(FOLLOW_num_in_data_def2086);
					num82=num();
					state._fsp--;

					stream_num.add(num82.getTree());
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:430:13: ( ( ',' )? )
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:430:14: ( ',' )?
					{
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:430:14: ( ',' )?
					int alt32=2;
					int LA32_0 = input.LA(1);
					if ( (LA32_0==99) ) {
						alt32=1;
					}
					switch (alt32) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:430:14: ','
							{
							char_literal83=(Token)match(input,99,FOLLOW_99_in_data_def2089);  
							stream_99.add(char_literal83);

							}
							break;

					}

					}

					// AST REWRITE
					// elements: num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 430:29: -> ^( C_UNARY_MINUS num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:430:32: ^( C_UNARY_MINUS num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(C_UNARY_MINUS, "C_UNARY_MINUS"), root_1);
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 7 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:431:5: num ( ( ',' )? )
					{
					pushFollow(FOLLOW_num_in_data_def2115);
					num84=num();
					state._fsp--;

					stream_num.add(num84.getTree());
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:431:9: ( ( ',' )? )
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:431:10: ( ',' )?
					{
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:431:10: ( ',' )?
					int alt33=2;
					int LA33_0 = input.LA(1);
					if ( (LA33_0==99) ) {
						alt33=1;
					}
					switch (alt33) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:431:10: ','
							{
							char_literal85=(Token)match(input,99,FOLLOW_99_in_data_def2118);  
							stream_99.add(char_literal85);

							}
							break;

					}

					}

					// AST REWRITE
					// elements: num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 431:29: -> num
					{
						adaptor.addChild(root_0, stream_num.nextTree());
					}


					retval.tree = root_0;

					}
					break;
				case 8 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:432:5: '(' const_expr ')' ( ( ',' )? )
					{
					char_literal86=(Token)match(input,96,FOLLOW_96_in_data_def2145);  
					stream_96.add(char_literal86);

					pushFollow(FOLLOW_const_expr_in_data_def2147);
					const_expr87=const_expr();
					state._fsp--;

					stream_const_expr.add(const_expr87.getTree());
					char_literal88=(Token)match(input,97,FOLLOW_97_in_data_def2149);  
					stream_97.add(char_literal88);

					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:432:24: ( ( ',' )? )
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:432:25: ( ',' )?
					{
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:432:25: ( ',' )?
					int alt34=2;
					int LA34_0 = input.LA(1);
					if ( (LA34_0==99) ) {
						alt34=1;
					}
					switch (alt34) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:432:25: ','
							{
							char_literal89=(Token)match(input,99,FOLLOW_99_in_data_def2152);  
							stream_99.add(char_literal89);

							}
							break;

					}

					}

					// AST REWRITE
					// elements: const_expr
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 432:32: -> const_expr
					{
						adaptor.addChild(root_0, stream_const_expr.nextTree());
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "data_def"


	public static class ram_section_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "ram_section"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:435:1: ram_section : SEC_RAM ( ram_def )* -> ^( RAM ( ram_def )* ) ;
	public final InchwormAsmParser.ram_section_return ram_section() throws RecognitionException {
		InchwormAsmParser.ram_section_return retval = new InchwormAsmParser.ram_section_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEC_RAM90=null;
		ParserRuleReturnScope ram_def91 =null;

		Object SEC_RAM90_tree=null;
		RewriteRuleTokenStream stream_SEC_RAM=new RewriteRuleTokenStream(adaptor,"token SEC_RAM");
		RewriteRuleSubtreeStream stream_ram_def=new RewriteRuleSubtreeStream(adaptor,"rule ram_def");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:436:3: ( SEC_RAM ( ram_def )* -> ^( RAM ( ram_def )* ) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:436:5: SEC_RAM ( ram_def )*
			{
			SEC_RAM90=(Token)match(input,SEC_RAM,FOLLOW_SEC_RAM_in_ram_section2176);  
			stream_SEC_RAM.add(SEC_RAM90);

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:436:13: ( ram_def )*
			loop36:
			while (true) {
				int alt36=2;
				int LA36_0 = input.LA(1);
				if ( (LA36_0==BINARY_LITERAL||LA36_0==CARRY||(LA36_0 >= CTRL && LA36_0 <= CTR_FLAG)||LA36_0==DECIMAL_LITERAL||LA36_0==FLAGS||LA36_0==FREEREGS||(LA36_0 >= HEX_LITERAL && LA36_0 <= IN)||LA36_0==IP||LA36_0==LOCAL_REG||LA36_0==NOP||(LA36_0 >= OUT1 && LA36_0 <= OVERFLOW)||LA36_0==SIGN||LA36_0==ZERO) ) {
					alt36=1;
				}

				switch (alt36) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:436:13: ram_def
					{
					pushFollow(FOLLOW_ram_def_in_ram_section2178);
					ram_def91=ram_def();
					state._fsp--;

					stream_ram_def.add(ram_def91.getTree());
					}
					break;

				default :
					break loop36;
				}
			}

			// AST REWRITE
			// elements: ram_def
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 436:22: -> ^( RAM ( ram_def )* )
			{
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:436:25: ^( RAM ( ram_def )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(RAM, "RAM"), root_1);
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:436:31: ( ram_def )*
				while ( stream_ram_def.hasNext() ) {
					adaptor.addChild(root_1, stream_ram_def.nextTree());
				}
				stream_ram_def.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "ram_section"


	public static class ram_def_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "ram_def"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:440:1: ram_def : ( reserved_label ':' | ID ':' -> ID | num ( ( ',' )? ) -> num );
	public final InchwormAsmParser.ram_def_return ram_def() throws RecognitionException {
		InchwormAsmParser.ram_def_return retval = new InchwormAsmParser.ram_def_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal93=null;
		Token ID94=null;
		Token char_literal95=null;
		Token char_literal97=null;
		ParserRuleReturnScope reserved_label92 =null;
		ParserRuleReturnScope num96 =null;

		Object char_literal93_tree=null;
		Object ID94_tree=null;
		Object char_literal95_tree=null;
		Object char_literal97_tree=null;
		RewriteRuleTokenStream stream_99=new RewriteRuleTokenStream(adaptor,"token 99");
		RewriteRuleTokenStream stream_102=new RewriteRuleTokenStream(adaptor,"token 102");
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");
		RewriteRuleSubtreeStream stream_num=new RewriteRuleSubtreeStream(adaptor,"rule num");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:441:3: ( reserved_label ':' | ID ':' -> ID | num ( ( ',' )? ) -> num )
			int alt38=3;
			switch ( input.LA(1) ) {
			case CARRY:
			case CTRL:
			case CTR_FLAG:
			case FLAGS:
			case FREEREGS:
			case IN:
			case IP:
			case LOCAL_REG:
			case NOP:
			case OUT1:
			case OUT2:
			case OVERFLOW:
			case SIGN:
			case ZERO:
				{
				alt38=1;
				}
				break;
			case ID:
				{
				alt38=2;
				}
				break;
			case BINARY_LITERAL:
			case DECIMAL_LITERAL:
			case HEX_LITERAL:
				{
				alt38=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 38, 0, input);
				throw nvae;
			}
			switch (alt38) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:441:5: reserved_label ':'
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reserved_label_in_ram_def2207);
					reserved_label92=reserved_label();
					state._fsp--;

					adaptor.addChild(root_0, reserved_label92.getTree());

					char_literal93=(Token)match(input,102,FOLLOW_102_in_ram_def2209); 
					char_literal93_tree = (Object)adaptor.create(char_literal93);
					adaptor.addChild(root_0, char_literal93_tree);

					 
					      if (true) 
					        throw new SyntaxError("Attempt to redefine reserved label: " + (reserved_label92!=null?input.toString(reserved_label92.start,reserved_label92.stop):null), this.input); 
					    
					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:445:5: ID ':'
					{
					ID94=(Token)match(input,ID,FOLLOW_ID_in_ram_def2217);  
					stream_ID.add(ID94);

					char_literal95=(Token)match(input,102,FOLLOW_102_in_ram_def2219);  
					stream_102.add(char_literal95);

					// AST REWRITE
					// elements: ID
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 445:29: -> ID
					{
						adaptor.addChild(root_0, stream_ID.nextNode());
					}


					retval.tree = root_0;

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:448:5: num ( ( ',' )? )
					{
					pushFollow(FOLLOW_num_in_ram_def2254);
					num96=num();
					state._fsp--;

					stream_num.add(num96.getTree());
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:448:9: ( ( ',' )? )
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:448:10: ( ',' )?
					{
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:448:10: ( ',' )?
					int alt37=2;
					int LA37_0 = input.LA(1);
					if ( (LA37_0==99) ) {
						alt37=1;
					}
					switch (alt37) {
						case 1 :
							// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:448:10: ','
							{
							char_literal97=(Token)match(input,99,FOLLOW_99_in_ram_def2257);  
							stream_99.add(char_literal97);

							}
							break;

					}

					}

					// AST REWRITE
					// elements: num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 448:29: -> num
					{
						adaptor.addChild(root_0, stream_num.nextTree());
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "ram_def"


	public static class code_section_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "code_section"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:452:1: code_section : SEC_CODE ( codeop )* -> ^( CODE ( codeop )* ) ;
	public final InchwormAsmParser.code_section_return code_section() throws RecognitionException {
		InchwormAsmParser.code_section_return retval = new InchwormAsmParser.code_section_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token SEC_CODE98=null;
		ParserRuleReturnScope codeop99 =null;

		Object SEC_CODE98_tree=null;
		RewriteRuleTokenStream stream_SEC_CODE=new RewriteRuleTokenStream(adaptor,"token SEC_CODE");
		RewriteRuleSubtreeStream stream_codeop=new RewriteRuleSubtreeStream(adaptor,"rule codeop");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:453:2: ( SEC_CODE ( codeop )* -> ^( CODE ( codeop )* ) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:453:4: SEC_CODE ( codeop )*
			{
			SEC_CODE98=(Token)match(input,SEC_CODE,FOLLOW_SEC_CODE_in_code_section2292);  
			stream_SEC_CODE.add(SEC_CODE98);

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:453:13: ( codeop )*
			loop39:
			while (true) {
				int alt39=2;
				int LA39_0 = input.LA(1);
				if ( ((LA39_0 >= ADD && LA39_0 <= AND)||(LA39_0 >= CALL && LA39_0 <= CARRY)||(LA39_0 >= CTRL && LA39_0 <= CTR_FLAG)||LA39_0==DIV||LA39_0==FLAGS||(LA39_0 >= FREEREGS && LA39_0 <= HALT)||(LA39_0 >= ID && LA39_0 <= IN)||(LA39_0 >= IP && LA39_0 <= LOADREG)||(LA39_0 >= LOCAL_REG && LA39_0 <= NOP)||(LA39_0 >= OR && LA39_0 <= OVERFLOW)||(LA39_0 >= RETURN && LA39_0 <= ROL)||LA39_0==SIGN||(LA39_0 >= STORE && LA39_0 <= STOREREG)||LA39_0==SUB||(LA39_0 >= XOR && LA39_0 <= ZERO)) ) {
					alt39=1;
				}

				switch (alt39) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:453:13: codeop
					{
					pushFollow(FOLLOW_codeop_in_code_section2294);
					codeop99=codeop();
					state._fsp--;

					stream_codeop.add(codeop99.getTree());
					}
					break;

				default :
					break loop39;
				}
			}

			// AST REWRITE
			// elements: codeop
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 453:21: -> ^( CODE ( codeop )* )
			{
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:453:24: ^( CODE ( codeop )* )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(CODE, "CODE"), root_1);
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:453:31: ( codeop )*
				while ( stream_codeop.hasNext() ) {
					adaptor.addChild(root_1, stream_codeop.nextTree());
				}
				stream_codeop.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "code_section"


	public static class codeop_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "codeop"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:456:1: codeop : ( label_def | instruction );
	public final InchwormAsmParser.codeop_return codeop() throws RecognitionException {
		InchwormAsmParser.codeop_return retval = new InchwormAsmParser.codeop_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope label_def100 =null;
		ParserRuleReturnScope instruction101 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:456:8: ( label_def | instruction )
			int alt40=2;
			switch ( input.LA(1) ) {
			case CARRY:
			case CTRL:
			case CTR_FLAG:
			case FLAGS:
			case FREEREGS:
			case ID:
			case IP:
			case LOCAL_REG:
			case NOP:
			case OUT1:
			case OUT2:
			case OVERFLOW:
			case SIGN:
				{
				alt40=1;
				}
				break;
			case IN:
				{
				int LA40_2 = input.LA(2);
				if ( (LA40_2==102) ) {
					alt40=1;
				}
				else if ( (LA40_2==EOF||(LA40_2 >= ADD && LA40_2 <= AND)||LA40_2==CALL||(LA40_2 >= DIV && LA40_2 <= EOI)||LA40_2==HALT||LA40_2==IN||(LA40_2 >= LOAD && LA40_2 <= LOADREG)||(LA40_2 >= MUL && LA40_2 <= NEXT)||(LA40_2 >= OR && LA40_2 <= OUT)||(LA40_2 >= RETURN && LA40_2 <= ROL)||(LA40_2 >= STORE && LA40_2 <= STOREREG)||LA40_2==SUB||(LA40_2 >= XOR && LA40_2 <= ZERO)) ) {
					alt40=2;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 40, 2, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ZERO:
				{
				int LA40_3 = input.LA(2);
				if ( (LA40_3==102) ) {
					alt40=1;
				}
				else if ( (LA40_3==NOP||LA40_3==PERCENT||LA40_3==REG_PREFIX) ) {
					alt40=2;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 40, 3, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

				}
				break;
			case ADD:
			case AND:
			case CALL:
			case DIV:
			case HALT:
			case LOAD:
			case LOADREG:
			case MUL:
			case MUX:
			case NEXT:
			case OR:
			case OUT:
			case RETURN:
			case ROL:
			case STORE:
			case STOREREG:
			case SUB:
			case XOR:
			case XORI:
				{
				alt40=2;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 40, 0, input);
				throw nvae;
			}
			switch (alt40) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:456:10: label_def
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_label_def_in_codeop2314);
					label_def100=label_def();
					state._fsp--;

					adaptor.addChild(root_0, label_def100.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:456:22: instruction
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_instruction_in_codeop2318);
					instruction101=instruction();
					state._fsp--;

					adaptor.addChild(root_0, instruction101.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "codeop"


	public static class immediate_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "immediate"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:459:1: immediate : const_expr ;
	public final InchwormAsmParser.immediate_return immediate() throws RecognitionException {
		InchwormAsmParser.immediate_return retval = new InchwormAsmParser.immediate_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope const_expr102 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:460:2: ( const_expr )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:460:4: const_expr
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_const_expr_in_immediate2329);
			const_expr102=const_expr();
			state._fsp--;

			adaptor.addChild(root_0, const_expr102.getTree());

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "immediate"


	public static class const_expr_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_expr"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:463:1: const_expr : const_prec5 ;
	public final InchwormAsmParser.const_expr_return const_expr() throws RecognitionException {
		InchwormAsmParser.const_expr_return retval = new InchwormAsmParser.const_expr_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope const_prec5103 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:464:2: ( const_prec5 )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:464:4: const_prec5
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_const_prec5_in_const_expr2340);
			const_prec5103=const_prec5();
			state._fsp--;

			adaptor.addChild(root_0, const_prec5103.getTree());

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_expr"


	public static class const_prec5_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec5"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:467:1: const_prec5 : l= const_prec4 ( const_prec5_op ^r= const_prec4 )* ;
	public final InchwormAsmParser.const_prec5_return const_prec5() throws RecognitionException {
		InchwormAsmParser.const_prec5_return retval = new InchwormAsmParser.const_prec5_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope l =null;
		ParserRuleReturnScope r =null;
		ParserRuleReturnScope const_prec5_op104 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:468:3: (l= const_prec4 ( const_prec5_op ^r= const_prec4 )* )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:468:5: l= const_prec4 ( const_prec5_op ^r= const_prec4 )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_const_prec4_in_const_prec52354);
			l=const_prec4();
			state._fsp--;

			adaptor.addChild(root_0, l.getTree());

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:468:19: ( const_prec5_op ^r= const_prec4 )*
			loop41:
			while (true) {
				int alt41=2;
				int LA41_0 = input.LA(1);
				if ( (LA41_0==111) ) {
					alt41=1;
				}

				switch (alt41) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:468:20: const_prec5_op ^r= const_prec4
					{
					pushFollow(FOLLOW_const_prec5_op_in_const_prec52357);
					const_prec5_op104=const_prec5_op();
					state._fsp--;

					root_0 = (Object)adaptor.becomeRoot(const_prec5_op104.getTree(), root_0);
					pushFollow(FOLLOW_const_prec4_in_const_prec52362);
					r=const_prec4();
					state._fsp--;

					adaptor.addChild(root_0, r.getTree());

					}
					break;

				default :
					break loop41;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec5"


	public static class const_prec4_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec4"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:472:1: const_prec4 : l= const_prec3 ( const_prec4_op ^r= const_prec3 )* ;
	public final InchwormAsmParser.const_prec4_return const_prec4() throws RecognitionException {
		InchwormAsmParser.const_prec4_return retval = new InchwormAsmParser.const_prec4_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope l =null;
		ParserRuleReturnScope r =null;
		ParserRuleReturnScope const_prec4_op105 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:473:3: (l= const_prec3 ( const_prec4_op ^r= const_prec3 )* )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:473:5: l= const_prec3 ( const_prec4_op ^r= const_prec3 )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_const_prec3_in_const_prec42382);
			l=const_prec3();
			state._fsp--;

			adaptor.addChild(root_0, l.getTree());

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:473:19: ( const_prec4_op ^r= const_prec3 )*
			loop42:
			while (true) {
				int alt42=2;
				int LA42_0 = input.LA(1);
				if ( (LA42_0==95||LA42_0==109) ) {
					alt42=1;
				}

				switch (alt42) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:473:20: const_prec4_op ^r= const_prec3
					{
					pushFollow(FOLLOW_const_prec4_op_in_const_prec42385);
					const_prec4_op105=const_prec4_op();
					state._fsp--;

					root_0 = (Object)adaptor.becomeRoot(const_prec4_op105.getTree(), root_0);
					pushFollow(FOLLOW_const_prec3_in_const_prec42390);
					r=const_prec3();
					state._fsp--;

					adaptor.addChild(root_0, r.getTree());

					}
					break;

				default :
					break loop42;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec4"


	public static class const_prec3_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec3"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:477:1: const_prec3 : l= const_prec2 ( const_prec3_op ^r= const_prec2 )* ;
	public final InchwormAsmParser.const_prec3_return const_prec3() throws RecognitionException {
		InchwormAsmParser.const_prec3_return retval = new InchwormAsmParser.const_prec3_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope l =null;
		ParserRuleReturnScope r =null;
		ParserRuleReturnScope const_prec3_op106 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:478:3: (l= const_prec2 ( const_prec3_op ^r= const_prec2 )* )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:478:5: l= const_prec2 ( const_prec3_op ^r= const_prec2 )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_const_prec2_in_const_prec32409);
			l=const_prec2();
			state._fsp--;

			adaptor.addChild(root_0, l.getTree());

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:478:19: ( const_prec3_op ^r= const_prec2 )*
			loop43:
			while (true) {
				int alt43=2;
				int LA43_0 = input.LA(1);
				if ( (LA43_0==104||LA43_0==106) ) {
					alt43=1;
				}

				switch (alt43) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:478:20: const_prec3_op ^r= const_prec2
					{
					pushFollow(FOLLOW_const_prec3_op_in_const_prec32412);
					const_prec3_op106=const_prec3_op();
					state._fsp--;

					root_0 = (Object)adaptor.becomeRoot(const_prec3_op106.getTree(), root_0);
					pushFollow(FOLLOW_const_prec2_in_const_prec32417);
					r=const_prec2();
					state._fsp--;

					adaptor.addChild(root_0, r.getTree());

					}
					break;

				default :
					break loop43;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec3"


	public static class const_prec2_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec2"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:482:1: const_prec2 : l= const_prec1 ( const_prec2_op ^r= const_prec1 )* ;
	public final InchwormAsmParser.const_prec2_return const_prec2() throws RecognitionException {
		InchwormAsmParser.const_prec2_return retval = new InchwormAsmParser.const_prec2_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope l =null;
		ParserRuleReturnScope r =null;
		ParserRuleReturnScope const_prec2_op107 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:483:3: (l= const_prec1 ( const_prec2_op ^r= const_prec1 )* )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:483:5: l= const_prec1 ( const_prec2_op ^r= const_prec1 )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_const_prec1_in_const_prec22436);
			l=const_prec1();
			state._fsp--;

			adaptor.addChild(root_0, l.getTree());

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:483:19: ( const_prec2_op ^r= const_prec1 )*
			loop44:
			while (true) {
				int alt44=2;
				int LA44_0 = input.LA(1);
				if ( (LA44_0==98||LA44_0==100) ) {
					alt44=1;
				}

				switch (alt44) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:483:20: const_prec2_op ^r= const_prec1
					{
					pushFollow(FOLLOW_const_prec2_op_in_const_prec22439);
					const_prec2_op107=const_prec2_op();
					state._fsp--;

					root_0 = (Object)adaptor.becomeRoot(const_prec2_op107.getTree(), root_0);
					pushFollow(FOLLOW_const_prec1_in_const_prec22444);
					r=const_prec1();
					state._fsp--;

					adaptor.addChild(root_0, r.getTree());

					}
					break;

				default :
					break loop44;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec2"


	public static class const_prec1_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec1"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:487:1: const_prec1 : l= const_prec0 ( const_prec1_op ^r= const_prec0 )* ;
	public final InchwormAsmParser.const_prec1_return const_prec1() throws RecognitionException {
		InchwormAsmParser.const_prec1_return retval = new InchwormAsmParser.const_prec1_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope l =null;
		ParserRuleReturnScope r =null;
		ParserRuleReturnScope const_prec1_op108 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:488:3: (l= const_prec0 ( const_prec1_op ^r= const_prec0 )* )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:488:5: l= const_prec0 ( const_prec1_op ^r= const_prec0 )*
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_const_prec0_in_const_prec12463);
			l=const_prec0();
			state._fsp--;

			adaptor.addChild(root_0, l.getTree());

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:488:19: ( const_prec1_op ^r= const_prec0 )*
			loop45:
			while (true) {
				int alt45=2;
				int LA45_0 = input.LA(1);
				if ( (LA45_0==PERCENT||LA45_0==STAR||LA45_0==101) ) {
					alt45=1;
				}

				switch (alt45) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:488:20: const_prec1_op ^r= const_prec0
					{
					pushFollow(FOLLOW_const_prec1_op_in_const_prec12466);
					const_prec1_op108=const_prec1_op();
					state._fsp--;

					root_0 = (Object)adaptor.becomeRoot(const_prec1_op108.getTree(), root_0);
					pushFollow(FOLLOW_const_prec0_in_const_prec12471);
					r=const_prec0();
					state._fsp--;

					adaptor.addChild(root_0, r.getTree());

					}
					break;

				default :
					break loop45;
				}
			}

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec1"


	public static class const_prec0_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec0"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:492:1: const_prec0 : ( const_unary_op ^ const_atom | const_atom );
	public final InchwormAsmParser.const_prec0_return const_prec0() throws RecognitionException {
		InchwormAsmParser.const_prec0_return retval = new InchwormAsmParser.const_prec0_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope const_unary_op109 =null;
		ParserRuleReturnScope const_atom110 =null;
		ParserRuleReturnScope const_atom111 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:493:3: ( const_unary_op ^ const_atom | const_atom )
			int alt46=2;
			int LA46_0 = input.LA(1);
			if ( (LA46_0==100||LA46_0==112) ) {
				alt46=1;
			}
			else if ( (LA46_0==BINARY_LITERAL||LA46_0==CARRY||(LA46_0 >= CTRL && LA46_0 <= CTR_FLAG)||LA46_0==CURRENT_POS||LA46_0==DECIMAL_LITERAL||LA46_0==FLAGS||LA46_0==FREEREGS||(LA46_0 >= HEX_LITERAL && LA46_0 <= IN)||LA46_0==IP||LA46_0==LOCAL_REG||LA46_0==NOP||(LA46_0 >= OUT1 && LA46_0 <= OVERFLOW)||LA46_0==SIGN||LA46_0==ZERO||LA46_0==96) ) {
				alt46=2;
			}

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

			switch (alt46) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:493:5: const_unary_op ^ const_atom
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_const_unary_op_in_const_prec02488);
					const_unary_op109=const_unary_op();
					state._fsp--;

					root_0 = (Object)adaptor.becomeRoot(const_unary_op109.getTree(), root_0);
					pushFollow(FOLLOW_const_atom_in_const_prec02491);
					const_atom110=const_atom();
					state._fsp--;

					adaptor.addChild(root_0, const_atom110.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:494:5: const_atom
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_const_atom_in_const_prec02499);
					const_atom111=const_atom();
					state._fsp--;

					adaptor.addChild(root_0, const_atom111.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec0"


	public static class const_atom_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_atom"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:497:1: const_atom : ( num | symbol_ref | '(' const_expr ')' -> const_expr );
	public final InchwormAsmParser.const_atom_return const_atom() throws RecognitionException {
		InchwormAsmParser.const_atom_return retval = new InchwormAsmParser.const_atom_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal114=null;
		Token char_literal116=null;
		ParserRuleReturnScope num112 =null;
		ParserRuleReturnScope symbol_ref113 =null;
		ParserRuleReturnScope const_expr115 =null;

		Object char_literal114_tree=null;
		Object char_literal116_tree=null;
		RewriteRuleTokenStream stream_96=new RewriteRuleTokenStream(adaptor,"token 96");
		RewriteRuleTokenStream stream_97=new RewriteRuleTokenStream(adaptor,"token 97");
		RewriteRuleSubtreeStream stream_const_expr=new RewriteRuleSubtreeStream(adaptor,"rule const_expr");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:498:3: ( num | symbol_ref | '(' const_expr ')' -> const_expr )
			int alt47=3;
			switch ( input.LA(1) ) {
			case BINARY_LITERAL:
			case DECIMAL_LITERAL:
			case HEX_LITERAL:
				{
				alt47=1;
				}
				break;
			case CARRY:
			case CTRL:
			case CTR_FLAG:
			case CURRENT_POS:
			case FLAGS:
			case FREEREGS:
			case ID:
			case IN:
			case IP:
			case LOCAL_REG:
			case NOP:
			case OUT1:
			case OUT2:
			case OVERFLOW:
			case SIGN:
			case ZERO:
				{
				alt47=2;
				}
				break;
			case 96:
				{
				alt47=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 47, 0, input);
				throw nvae;
			}
			switch (alt47) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:498:5: num
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_num_in_const_atom2513);
					num112=num();
					state._fsp--;

					adaptor.addChild(root_0, num112.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:498:11: symbol_ref
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_symbol_ref_in_const_atom2517);
					symbol_ref113=symbol_ref();
					state._fsp--;

					adaptor.addChild(root_0, symbol_ref113.getTree());

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:498:24: '(' const_expr ')'
					{
					char_literal114=(Token)match(input,96,FOLLOW_96_in_const_atom2521);  
					stream_96.add(char_literal114);

					pushFollow(FOLLOW_const_expr_in_const_atom2523);
					const_expr115=const_expr();
					state._fsp--;

					stream_const_expr.add(const_expr115.getTree());
					char_literal116=(Token)match(input,97,FOLLOW_97_in_const_atom2525);  
					stream_97.add(char_literal116);

					// AST REWRITE
					// elements: const_expr
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 498:43: -> const_expr
					{
						adaptor.addChild(root_0, stream_const_expr.nextTree());
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_atom"


	public static class const_unary_op_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_unary_op"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:501:1: const_unary_op : ( c_not -> C_NOT | c_sub -> C_UNARY_MINUS );
	public final InchwormAsmParser.const_unary_op_return const_unary_op() throws RecognitionException {
		InchwormAsmParser.const_unary_op_return retval = new InchwormAsmParser.const_unary_op_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope c_not117 =null;
		ParserRuleReturnScope c_sub118 =null;

		RewriteRuleSubtreeStream stream_c_sub=new RewriteRuleSubtreeStream(adaptor,"rule c_sub");
		RewriteRuleSubtreeStream stream_c_not=new RewriteRuleSubtreeStream(adaptor,"rule c_not");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:502:3: ( c_not -> C_NOT | c_sub -> C_UNARY_MINUS )
			int alt48=2;
			int LA48_0 = input.LA(1);
			if ( (LA48_0==112) ) {
				alt48=1;
			}
			else if ( (LA48_0==100) ) {
				alt48=2;
			}

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

			switch (alt48) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:502:5: c_not
					{
					pushFollow(FOLLOW_c_not_in_const_unary_op2545);
					c_not117=c_not();
					state._fsp--;

					stream_c_not.add(c_not117.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 502:12: -> C_NOT
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_NOT, "C_NOT"));
					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:503:5: c_sub
					{
					pushFollow(FOLLOW_c_sub_in_const_unary_op2556);
					c_sub118=c_sub();
					state._fsp--;

					stream_c_sub.add(c_sub118.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 503:12: -> C_UNARY_MINUS
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_UNARY_MINUS, "C_UNARY_MINUS"));
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_unary_op"


	public static class const_prec1_op_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec1_op"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:506:1: const_prec1_op : ( c_mul -> C_MUL | c_div -> C_DIV | c_mod -> C_MOD );
	public final InchwormAsmParser.const_prec1_op_return const_prec1_op() throws RecognitionException {
		InchwormAsmParser.const_prec1_op_return retval = new InchwormAsmParser.const_prec1_op_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope c_mul119 =null;
		ParserRuleReturnScope c_div120 =null;
		ParserRuleReturnScope c_mod121 =null;

		RewriteRuleSubtreeStream stream_c_mul=new RewriteRuleSubtreeStream(adaptor,"rule c_mul");
		RewriteRuleSubtreeStream stream_c_mod=new RewriteRuleSubtreeStream(adaptor,"rule c_mod");
		RewriteRuleSubtreeStream stream_c_div=new RewriteRuleSubtreeStream(adaptor,"rule c_div");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:507:3: ( c_mul -> C_MUL | c_div -> C_DIV | c_mod -> C_MOD )
			int alt49=3;
			switch ( input.LA(1) ) {
			case STAR:
				{
				alt49=1;
				}
				break;
			case 101:
				{
				alt49=2;
				}
				break;
			case PERCENT:
				{
				alt49=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 49, 0, input);
				throw nvae;
			}
			switch (alt49) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:507:5: c_mul
					{
					pushFollow(FOLLOW_c_mul_in_const_prec1_op2575);
					c_mul119=c_mul();
					state._fsp--;

					stream_c_mul.add(c_mul119.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 507:12: -> C_MUL
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_MUL, "C_MUL"));
					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:508:5: c_div
					{
					pushFollow(FOLLOW_c_div_in_const_prec1_op2586);
					c_div120=c_div();
					state._fsp--;

					stream_c_div.add(c_div120.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 508:12: -> C_DIV
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_DIV, "C_DIV"));
					}


					retval.tree = root_0;

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:509:5: c_mod
					{
					pushFollow(FOLLOW_c_mod_in_const_prec1_op2597);
					c_mod121=c_mod();
					state._fsp--;

					stream_c_mod.add(c_mod121.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 509:12: -> C_MOD
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_MOD, "C_MOD"));
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec1_op"


	public static class const_prec2_op_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec2_op"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:512:1: const_prec2_op : ( c_add -> C_ADD | c_sub -> C_SUB );
	public final InchwormAsmParser.const_prec2_op_return const_prec2_op() throws RecognitionException {
		InchwormAsmParser.const_prec2_op_return retval = new InchwormAsmParser.const_prec2_op_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope c_add122 =null;
		ParserRuleReturnScope c_sub123 =null;

		RewriteRuleSubtreeStream stream_c_sub=new RewriteRuleSubtreeStream(adaptor,"rule c_sub");
		RewriteRuleSubtreeStream stream_c_add=new RewriteRuleSubtreeStream(adaptor,"rule c_add");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:513:3: ( c_add -> C_ADD | c_sub -> C_SUB )
			int alt50=2;
			int LA50_0 = input.LA(1);
			if ( (LA50_0==98) ) {
				alt50=1;
			}
			else if ( (LA50_0==100) ) {
				alt50=2;
			}

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

			switch (alt50) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:513:5: c_add
					{
					pushFollow(FOLLOW_c_add_in_const_prec2_op2618);
					c_add122=c_add();
					state._fsp--;

					stream_c_add.add(c_add122.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 513:12: -> C_ADD
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_ADD, "C_ADD"));
					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:514:5: c_sub
					{
					pushFollow(FOLLOW_c_sub_in_const_prec2_op2629);
					c_sub123=c_sub();
					state._fsp--;

					stream_c_sub.add(c_sub123.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 514:12: -> C_SUB
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_SUB, "C_SUB"));
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec2_op"


	public static class const_prec3_op_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec3_op"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:517:1: const_prec3_op : ( c_shl -> C_SHL | c_shr -> C_SHR );
	public final InchwormAsmParser.const_prec3_op_return const_prec3_op() throws RecognitionException {
		InchwormAsmParser.const_prec3_op_return retval = new InchwormAsmParser.const_prec3_op_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope c_shl124 =null;
		ParserRuleReturnScope c_shr125 =null;

		RewriteRuleSubtreeStream stream_c_shr=new RewriteRuleSubtreeStream(adaptor,"rule c_shr");
		RewriteRuleSubtreeStream stream_c_shl=new RewriteRuleSubtreeStream(adaptor,"rule c_shl");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:518:3: ( c_shl -> C_SHL | c_shr -> C_SHR )
			int alt51=2;
			int LA51_0 = input.LA(1);
			if ( (LA51_0==104) ) {
				alt51=1;
			}
			else if ( (LA51_0==106) ) {
				alt51=2;
			}

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

			switch (alt51) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:518:5: c_shl
					{
					pushFollow(FOLLOW_c_shl_in_const_prec3_op2647);
					c_shl124=c_shl();
					state._fsp--;

					stream_c_shl.add(c_shl124.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 518:12: -> C_SHL
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_SHL, "C_SHL"));
					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:519:5: c_shr
					{
					pushFollow(FOLLOW_c_shr_in_const_prec3_op2658);
					c_shr125=c_shr();
					state._fsp--;

					stream_c_shr.add(c_shr125.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 519:12: -> C_SHR
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_SHR, "C_SHR"));
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec3_op"


	public static class const_prec4_op_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec4_op"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:522:1: const_prec4_op : ( c_and -> C_AND | c_xor -> C_XOR );
	public final InchwormAsmParser.const_prec4_op_return const_prec4_op() throws RecognitionException {
		InchwormAsmParser.const_prec4_op_return retval = new InchwormAsmParser.const_prec4_op_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope c_and126 =null;
		ParserRuleReturnScope c_xor127 =null;

		RewriteRuleSubtreeStream stream_c_and=new RewriteRuleSubtreeStream(adaptor,"rule c_and");
		RewriteRuleSubtreeStream stream_c_xor=new RewriteRuleSubtreeStream(adaptor,"rule c_xor");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:523:3: ( c_and -> C_AND | c_xor -> C_XOR )
			int alt52=2;
			int LA52_0 = input.LA(1);
			if ( (LA52_0==95) ) {
				alt52=1;
			}
			else if ( (LA52_0==109) ) {
				alt52=2;
			}

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

			switch (alt52) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:523:5: c_and
					{
					pushFollow(FOLLOW_c_and_in_const_prec4_op2676);
					c_and126=c_and();
					state._fsp--;

					stream_c_and.add(c_and126.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 523:12: -> C_AND
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_AND, "C_AND"));
					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:524:5: c_xor
					{
					pushFollow(FOLLOW_c_xor_in_const_prec4_op2687);
					c_xor127=c_xor();
					state._fsp--;

					stream_c_xor.add(c_xor127.getTree());
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 524:12: -> C_XOR
					{
						adaptor.addChild(root_0, (Object)adaptor.create(C_XOR, "C_XOR"));
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec4_op"


	public static class const_prec5_op_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "const_prec5_op"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:527:1: const_prec5_op : c_or -> C_OR ;
	public final InchwormAsmParser.const_prec5_op_return const_prec5_op() throws RecognitionException {
		InchwormAsmParser.const_prec5_op_return retval = new InchwormAsmParser.const_prec5_op_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope c_or128 =null;

		RewriteRuleSubtreeStream stream_c_or=new RewriteRuleSubtreeStream(adaptor,"rule c_or");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:528:3: ( c_or -> C_OR )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:528:5: c_or
			{
			pushFollow(FOLLOW_c_or_in_const_prec5_op2708);
			c_or128=c_or();
			state._fsp--;

			stream_c_or.add(c_or128.getTree());
			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 528:11: -> C_OR
			{
				adaptor.addChild(root_0, (Object)adaptor.create(C_OR, "C_OR"));
			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "const_prec5_op"


	public static class reserved_label_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "reserved_label"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:532:1: reserved_label : reg_symbol ;
	public final InchwormAsmParser.reserved_label_return reserved_label() throws RecognitionException {
		InchwormAsmParser.reserved_label_return retval = new InchwormAsmParser.reserved_label_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope reg_symbol129 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:533:3: ( reg_symbol )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:533:5: reg_symbol
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_reg_symbol_in_reserved_label2727);
			reg_symbol129=reg_symbol();
			state._fsp--;

			adaptor.addChild(root_0, reg_symbol129.getTree());

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "reserved_label"


	public static class label_def_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "label_def"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:536:1: label_def : ( reserved_label ':' | ID ! ':' !);
	public final InchwormAsmParser.label_def_return label_def() throws RecognitionException {
		InchwormAsmParser.label_def_return retval = new InchwormAsmParser.label_def_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token char_literal131=null;
		Token ID132=null;
		Token char_literal133=null;
		ParserRuleReturnScope reserved_label130 =null;

		Object char_literal131_tree=null;
		Object ID132_tree=null;
		Object char_literal133_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:537:3: ( reserved_label ':' | ID ! ':' !)
			int alt53=2;
			int LA53_0 = input.LA(1);
			if ( (LA53_0==CARRY||(LA53_0 >= CTRL && LA53_0 <= CTR_FLAG)||LA53_0==FLAGS||LA53_0==FREEREGS||LA53_0==IN||LA53_0==IP||LA53_0==LOCAL_REG||LA53_0==NOP||(LA53_0 >= OUT1 && LA53_0 <= OVERFLOW)||LA53_0==SIGN||LA53_0==ZERO) ) {
				alt53=1;
			}
			else if ( (LA53_0==ID) ) {
				alt53=2;
			}

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

			switch (alt53) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:537:5: reserved_label ':'
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reserved_label_in_label_def2740);
					reserved_label130=reserved_label();
					state._fsp--;

					adaptor.addChild(root_0, reserved_label130.getTree());

					char_literal131=(Token)match(input,102,FOLLOW_102_in_label_def2742); 
					char_literal131_tree = (Object)adaptor.create(char_literal131);
					adaptor.addChild(root_0, char_literal131_tree);

					 
					      if (true) 
					        throw new SyntaxError("Attempt to redefine reserved label: " + (reserved_label130!=null?input.toString(reserved_label130.start,reserved_label130.stop):null), this.input); 
					    
					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:541:4: ID ! ':' !
					{
					root_0 = (Object)adaptor.nil();


					ID132=(Token)match(input,ID,FOLLOW_ID_in_label_def2749); 
					char_literal133=(Token)match(input,102,FOLLOW_102_in_label_def2752); 
					 symbols.put((ID132!=null?ID132.getText():null), BigInteger.valueOf(nextInstruction)); 
					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "label_def"


	public static class symbol_ref_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "symbol_ref"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:544:1: symbol_ref : ( ID -> ^( SYMBOL ID ) | current_pos_ref | reg_symbol );
	public final InchwormAsmParser.symbol_ref_return symbol_ref() throws RecognitionException {
		InchwormAsmParser.symbol_ref_return retval = new InchwormAsmParser.symbol_ref_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ID134=null;
		ParserRuleReturnScope current_pos_ref135 =null;
		ParserRuleReturnScope reg_symbol136 =null;

		Object ID134_tree=null;
		RewriteRuleTokenStream stream_ID=new RewriteRuleTokenStream(adaptor,"token ID");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:545:2: ( ID -> ^( SYMBOL ID ) | current_pos_ref | reg_symbol )
			int alt54=3;
			switch ( input.LA(1) ) {
			case ID:
				{
				alt54=1;
				}
				break;
			case CURRENT_POS:
				{
				alt54=2;
				}
				break;
			case CARRY:
			case CTRL:
			case CTR_FLAG:
			case FLAGS:
			case FREEREGS:
			case IN:
			case IP:
			case LOCAL_REG:
			case NOP:
			case OUT1:
			case OUT2:
			case OVERFLOW:
			case SIGN:
			case ZERO:
				{
				alt54=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 54, 0, input);
				throw nvae;
			}
			switch (alt54) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:545:4: ID
					{
					ID134=(Token)match(input,ID,FOLLOW_ID_in_symbol_ref2766);  
					stream_ID.add(ID134);

					// AST REWRITE
					// elements: ID
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 545:7: -> ^( SYMBOL ID )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:545:10: ^( SYMBOL ID )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(SYMBOL, "SYMBOL"), root_1);
						adaptor.addChild(root_1, stream_ID.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:546:4: current_pos_ref
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_current_pos_ref_in_symbol_ref2779);
					current_pos_ref135=current_pos_ref();
					state._fsp--;

					adaptor.addChild(root_0, current_pos_ref135.getTree());

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:547:4: reg_symbol
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reg_symbol_in_symbol_ref2784);
					reg_symbol136=reg_symbol();
					state._fsp--;

					adaptor.addChild(root_0, reg_symbol136.getTree());

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "symbol_ref"


	public static class current_pos_ref_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "current_pos_ref"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:550:1: current_pos_ref : CURRENT_POS -> HERE ;
	public final InchwormAsmParser.current_pos_ref_return current_pos_ref() throws RecognitionException {
		InchwormAsmParser.current_pos_ref_return retval = new InchwormAsmParser.current_pos_ref_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token CURRENT_POS137=null;

		Object CURRENT_POS137_tree=null;
		RewriteRuleTokenStream stream_CURRENT_POS=new RewriteRuleTokenStream(adaptor,"token CURRENT_POS");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:551:2: ( CURRENT_POS -> HERE )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:551:4: CURRENT_POS
			{
			CURRENT_POS137=(Token)match(input,CURRENT_POS,FOLLOW_CURRENT_POS_in_current_pos_ref2797);  
			stream_CURRENT_POS.add(CURRENT_POS137);

			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 551:21: -> HERE
			{
				adaptor.addChild(root_0, (Object)adaptor.create(HERE, "HERE"));
			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "current_pos_ref"


	public static class instruction_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "instruction"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:554:1: instruction : ( op )+ ( EOI | EOF ) -> ^( INSTRUCTION NUM[Integer.toHexString(nextInstruction - 1)] ( op )+ ) ;
	public final InchwormAsmParser.instruction_return instruction() throws RecognitionException {
		InchwormAsmParser.instruction_return retval = new InchwormAsmParser.instruction_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token EOI139=null;
		Token EOF140=null;
		ParserRuleReturnScope op138 =null;

		Object EOI139_tree=null;
		Object EOF140_tree=null;
		RewriteRuleTokenStream stream_EOF=new RewriteRuleTokenStream(adaptor,"token EOF");
		RewriteRuleTokenStream stream_EOI=new RewriteRuleTokenStream(adaptor,"token EOI");
		RewriteRuleSubtreeStream stream_op=new RewriteRuleSubtreeStream(adaptor,"rule op");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:2: ( ( op )+ ( EOI | EOF ) -> ^( INSTRUCTION NUM[Integer.toHexString(nextInstruction - 1)] ( op )+ ) )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:4: ( op )+ ( EOI | EOF )
			{
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:4: ( op )+
			int cnt55=0;
			loop55:
			while (true) {
				int alt55=2;
				int LA55_0 = input.LA(1);
				if ( ((LA55_0 >= ADD && LA55_0 <= AND)||LA55_0==CALL||LA55_0==DIV||LA55_0==HALT||LA55_0==IN||(LA55_0 >= LOAD && LA55_0 <= LOADREG)||(LA55_0 >= MUL && LA55_0 <= NEXT)||(LA55_0 >= OR && LA55_0 <= OUT)||(LA55_0 >= RETURN && LA55_0 <= ROL)||(LA55_0 >= STORE && LA55_0 <= STOREREG)||LA55_0==SUB||(LA55_0 >= XOR && LA55_0 <= ZERO)) ) {
					alt55=1;
				}

				switch (alt55) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:4: op
					{
					pushFollow(FOLLOW_op_in_instruction2818);
					op138=op();
					state._fsp--;

					stream_op.add(op138.getTree());
					}
					break;

				default :
					if ( cnt55 >= 1 ) break loop55;
					EarlyExitException eee = new EarlyExitException(55, input);
					throw eee;
				}
				cnt55++;
			}

			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:8: ( EOI | EOF )
			int alt56=2;
			int LA56_0 = input.LA(1);
			if ( (LA56_0==EOI) ) {
				alt56=1;
			}
			else if ( (LA56_0==EOF) ) {
				alt56=2;
			}

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

			switch (alt56) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:9: EOI
					{
					EOI139=(Token)match(input,EOI,FOLLOW_EOI_in_instruction2822);  
					stream_EOI.add(EOI139);

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:13: EOF
					{
					EOF140=(Token)match(input,EOF,FOLLOW_EOF_in_instruction2824);  
					stream_EOF.add(EOF140);

					}
					break;

			}

			 ++nextInstruction; 
			// AST REWRITE
			// elements: op
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 555:41: -> ^( INSTRUCTION NUM[Integer.toHexString(nextInstruction - 1)] ( op )+ )
			{
				// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:555:44: ^( INSTRUCTION NUM[Integer.toHexString(nextInstruction - 1)] ( op )+ )
				{
				Object root_1 = (Object)adaptor.nil();
				root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(INSTRUCTION, "INSTRUCTION"), root_1);
				adaptor.addChild(root_1, (Object)adaptor.create(NUM, Integer.toHexString(nextInstruction - 1)));
				if ( !(stream_op.hasNext()) ) {
					throw new RewriteEarlyExitException();
				}
				while ( stream_op.hasNext() ) {
					adaptor.addChild(root_1, stream_op.nextTree());
				}
				stream_op.reset();

				adaptor.addChild(root_0, root_1);
				}

			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "instruction"


	public static class op_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "op"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:563:1: op : ( ZERO ^ arg1 | XORI ^ arg1i | XOR ^ arg3 | OR ^ arg3 | ADD ^ arg3 | SUB ^ arg3 | AND ^ arg3 | ROL ^ arg3 | MUL ^ arg3 | DIV ^ arg3 | LOAD ^ arg2 | STORE ^ arg2 | LOADREG ^ arg2 | STOREREG ^ arg2 | OUT | IN | HALT | MUX ^ arg4 | NEXT ^ arg2 | CALL ^ argi | RETURN );
	public final InchwormAsmParser.op_return op() throws RecognitionException {
		InchwormAsmParser.op_return retval = new InchwormAsmParser.op_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token ZERO141=null;
		Token XORI143=null;
		Token XOR145=null;
		Token OR147=null;
		Token ADD149=null;
		Token SUB151=null;
		Token AND153=null;
		Token ROL155=null;
		Token MUL157=null;
		Token DIV159=null;
		Token LOAD161=null;
		Token STORE163=null;
		Token LOADREG165=null;
		Token STOREREG167=null;
		Token OUT169=null;
		Token IN170=null;
		Token HALT171=null;
		Token MUX172=null;
		Token NEXT174=null;
		Token CALL176=null;
		Token RETURN178=null;
		ParserRuleReturnScope arg1142 =null;
		ParserRuleReturnScope arg1i144 =null;
		ParserRuleReturnScope arg3146 =null;
		ParserRuleReturnScope arg3148 =null;
		ParserRuleReturnScope arg3150 =null;
		ParserRuleReturnScope arg3152 =null;
		ParserRuleReturnScope arg3154 =null;
		ParserRuleReturnScope arg3156 =null;
		ParserRuleReturnScope arg3158 =null;
		ParserRuleReturnScope arg3160 =null;
		ParserRuleReturnScope arg2162 =null;
		ParserRuleReturnScope arg2164 =null;
		ParserRuleReturnScope arg2166 =null;
		ParserRuleReturnScope arg2168 =null;
		ParserRuleReturnScope arg4173 =null;
		ParserRuleReturnScope arg2175 =null;
		ParserRuleReturnScope argi177 =null;

		Object ZERO141_tree=null;
		Object XORI143_tree=null;
		Object XOR145_tree=null;
		Object OR147_tree=null;
		Object ADD149_tree=null;
		Object SUB151_tree=null;
		Object AND153_tree=null;
		Object ROL155_tree=null;
		Object MUL157_tree=null;
		Object DIV159_tree=null;
		Object LOAD161_tree=null;
		Object STORE163_tree=null;
		Object LOADREG165_tree=null;
		Object STOREREG167_tree=null;
		Object OUT169_tree=null;
		Object IN170_tree=null;
		Object HALT171_tree=null;
		Object MUX172_tree=null;
		Object NEXT174_tree=null;
		Object CALL176_tree=null;
		Object RETURN178_tree=null;

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:563:3: ( ZERO ^ arg1 | XORI ^ arg1i | XOR ^ arg3 | OR ^ arg3 | ADD ^ arg3 | SUB ^ arg3 | AND ^ arg3 | ROL ^ arg3 | MUL ^ arg3 | DIV ^ arg3 | LOAD ^ arg2 | STORE ^ arg2 | LOADREG ^ arg2 | STOREREG ^ arg2 | OUT | IN | HALT | MUX ^ arg4 | NEXT ^ arg2 | CALL ^ argi | RETURN )
			int alt57=21;
			switch ( input.LA(1) ) {
			case ZERO:
				{
				alt57=1;
				}
				break;
			case XORI:
				{
				alt57=2;
				}
				break;
			case XOR:
				{
				alt57=3;
				}
				break;
			case OR:
				{
				alt57=4;
				}
				break;
			case ADD:
				{
				alt57=5;
				}
				break;
			case SUB:
				{
				alt57=6;
				}
				break;
			case AND:
				{
				alt57=7;
				}
				break;
			case ROL:
				{
				alt57=8;
				}
				break;
			case MUL:
				{
				alt57=9;
				}
				break;
			case DIV:
				{
				alt57=10;
				}
				break;
			case LOAD:
				{
				alt57=11;
				}
				break;
			case STORE:
				{
				alt57=12;
				}
				break;
			case LOADREG:
				{
				alt57=13;
				}
				break;
			case STOREREG:
				{
				alt57=14;
				}
				break;
			case OUT:
				{
				alt57=15;
				}
				break;
			case IN:
				{
				alt57=16;
				}
				break;
			case HALT:
				{
				alt57=17;
				}
				break;
			case MUX:
				{
				alt57=18;
				}
				break;
			case NEXT:
				{
				alt57=19;
				}
				break;
			case CALL:
				{
				alt57=20;
				}
				break;
			case RETURN:
				{
				alt57=21;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 57, 0, input);
				throw nvae;
			}
			switch (alt57) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:563:5: ZERO ^ arg1
					{
					root_0 = (Object)adaptor.nil();


					ZERO141=(Token)match(input,ZERO,FOLLOW_ZERO_in_op2857); 
					ZERO141_tree = (Object)adaptor.create(ZERO141);
					root_0 = (Object)adaptor.becomeRoot(ZERO141_tree, root_0);

					pushFollow(FOLLOW_arg1_in_op2860);
					arg1142=arg1();
					state._fsp--;

					adaptor.addChild(root_0, arg1142.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:564:4: XORI ^ arg1i
					{
					root_0 = (Object)adaptor.nil();


					XORI143=(Token)match(input,XORI,FOLLOW_XORI_in_op2866); 
					XORI143_tree = (Object)adaptor.create(XORI143);
					root_0 = (Object)adaptor.becomeRoot(XORI143_tree, root_0);

					pushFollow(FOLLOW_arg1i_in_op2869);
					arg1i144=arg1i();
					state._fsp--;

					adaptor.addChild(root_0, arg1i144.getTree());

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:565:4: XOR ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					XOR145=(Token)match(input,XOR,FOLLOW_XOR_in_op2874); 
					XOR145_tree = (Object)adaptor.create(XOR145);
					root_0 = (Object)adaptor.becomeRoot(XOR145_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2877);
					arg3146=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3146.getTree());

					}
					break;
				case 4 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:566:4: OR ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					OR147=(Token)match(input,OR,FOLLOW_OR_in_op2882); 
					OR147_tree = (Object)adaptor.create(OR147);
					root_0 = (Object)adaptor.becomeRoot(OR147_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2885);
					arg3148=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3148.getTree());

					}
					break;
				case 5 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:567:4: ADD ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					ADD149=(Token)match(input,ADD,FOLLOW_ADD_in_op2890); 
					ADD149_tree = (Object)adaptor.create(ADD149);
					root_0 = (Object)adaptor.becomeRoot(ADD149_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2893);
					arg3150=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3150.getTree());

					}
					break;
				case 6 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:568:4: SUB ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					SUB151=(Token)match(input,SUB,FOLLOW_SUB_in_op2898); 
					SUB151_tree = (Object)adaptor.create(SUB151);
					root_0 = (Object)adaptor.becomeRoot(SUB151_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2901);
					arg3152=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3152.getTree());

					}
					break;
				case 7 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:569:4: AND ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					AND153=(Token)match(input,AND,FOLLOW_AND_in_op2906); 
					AND153_tree = (Object)adaptor.create(AND153);
					root_0 = (Object)adaptor.becomeRoot(AND153_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2909);
					arg3154=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3154.getTree());

					}
					break;
				case 8 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:570:4: ROL ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					ROL155=(Token)match(input,ROL,FOLLOW_ROL_in_op2914); 
					ROL155_tree = (Object)adaptor.create(ROL155);
					root_0 = (Object)adaptor.becomeRoot(ROL155_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2917);
					arg3156=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3156.getTree());

					}
					break;
				case 9 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:571:4: MUL ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					MUL157=(Token)match(input,MUL,FOLLOW_MUL_in_op2922); 
					MUL157_tree = (Object)adaptor.create(MUL157);
					root_0 = (Object)adaptor.becomeRoot(MUL157_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2925);
					arg3158=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3158.getTree());

					}
					break;
				case 10 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:571:16: DIV ^ arg3
					{
					root_0 = (Object)adaptor.nil();


					DIV159=(Token)match(input,DIV,FOLLOW_DIV_in_op2929); 
					DIV159_tree = (Object)adaptor.create(DIV159);
					root_0 = (Object)adaptor.becomeRoot(DIV159_tree, root_0);

					pushFollow(FOLLOW_arg3_in_op2932);
					arg3160=arg3();
					state._fsp--;

					adaptor.addChild(root_0, arg3160.getTree());

					}
					break;
				case 11 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:571:28: LOAD ^ arg2
					{
					root_0 = (Object)adaptor.nil();


					LOAD161=(Token)match(input,LOAD,FOLLOW_LOAD_in_op2936); 
					LOAD161_tree = (Object)adaptor.create(LOAD161);
					root_0 = (Object)adaptor.becomeRoot(LOAD161_tree, root_0);

					pushFollow(FOLLOW_arg2_in_op2939);
					arg2162=arg2();
					state._fsp--;

					adaptor.addChild(root_0, arg2162.getTree());

					}
					break;
				case 12 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:571:41: STORE ^ arg2
					{
					root_0 = (Object)adaptor.nil();


					STORE163=(Token)match(input,STORE,FOLLOW_STORE_in_op2943); 
					STORE163_tree = (Object)adaptor.create(STORE163);
					root_0 = (Object)adaptor.becomeRoot(STORE163_tree, root_0);

					pushFollow(FOLLOW_arg2_in_op2946);
					arg2164=arg2();
					state._fsp--;

					adaptor.addChild(root_0, arg2164.getTree());

					}
					break;
				case 13 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:571:55: LOADREG ^ arg2
					{
					root_0 = (Object)adaptor.nil();


					LOADREG165=(Token)match(input,LOADREG,FOLLOW_LOADREG_in_op2950); 
					LOADREG165_tree = (Object)adaptor.create(LOADREG165);
					root_0 = (Object)adaptor.becomeRoot(LOADREG165_tree, root_0);

					pushFollow(FOLLOW_arg2_in_op2953);
					arg2166=arg2();
					state._fsp--;

					adaptor.addChild(root_0, arg2166.getTree());

					}
					break;
				case 14 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:571:71: STOREREG ^ arg2
					{
					root_0 = (Object)adaptor.nil();


					STOREREG167=(Token)match(input,STOREREG,FOLLOW_STOREREG_in_op2957); 
					STOREREG167_tree = (Object)adaptor.create(STOREREG167);
					root_0 = (Object)adaptor.becomeRoot(STOREREG167_tree, root_0);

					pushFollow(FOLLOW_arg2_in_op2960);
					arg2168=arg2();
					state._fsp--;

					adaptor.addChild(root_0, arg2168.getTree());

					}
					break;
				case 15 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:572:4: OUT
					{
					root_0 = (Object)adaptor.nil();


					OUT169=(Token)match(input,OUT,FOLLOW_OUT_in_op2965); 
					OUT169_tree = (Object)adaptor.create(OUT169);
					adaptor.addChild(root_0, OUT169_tree);

					}
					break;
				case 16 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:572:10: IN
					{
					root_0 = (Object)adaptor.nil();


					IN170=(Token)match(input,IN,FOLLOW_IN_in_op2969); 
					IN170_tree = (Object)adaptor.create(IN170);
					adaptor.addChild(root_0, IN170_tree);

					}
					break;
				case 17 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:572:15: HALT
					{
					root_0 = (Object)adaptor.nil();


					HALT171=(Token)match(input,HALT,FOLLOW_HALT_in_op2973); 
					HALT171_tree = (Object)adaptor.create(HALT171);
					adaptor.addChild(root_0, HALT171_tree);

					}
					break;
				case 18 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:572:22: MUX ^ arg4
					{
					root_0 = (Object)adaptor.nil();


					MUX172=(Token)match(input,MUX,FOLLOW_MUX_in_op2977); 
					MUX172_tree = (Object)adaptor.create(MUX172);
					root_0 = (Object)adaptor.becomeRoot(MUX172_tree, root_0);

					pushFollow(FOLLOW_arg4_in_op2980);
					arg4173=arg4();
					state._fsp--;

					adaptor.addChild(root_0, arg4173.getTree());

					}
					break;
				case 19 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:572:34: NEXT ^ arg2
					{
					root_0 = (Object)adaptor.nil();


					NEXT174=(Token)match(input,NEXT,FOLLOW_NEXT_in_op2984); 
					NEXT174_tree = (Object)adaptor.create(NEXT174);
					root_0 = (Object)adaptor.becomeRoot(NEXT174_tree, root_0);

					pushFollow(FOLLOW_arg2_in_op2987);
					arg2175=arg2();
					state._fsp--;

					adaptor.addChild(root_0, arg2175.getTree());

					}
					break;
				case 20 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:572:47: CALL ^ argi
					{
					root_0 = (Object)adaptor.nil();


					CALL176=(Token)match(input,CALL,FOLLOW_CALL_in_op2991); 
					CALL176_tree = (Object)adaptor.create(CALL176);
					root_0 = (Object)adaptor.becomeRoot(CALL176_tree, root_0);

					pushFollow(FOLLOW_argi_in_op2994);
					argi177=argi();
					state._fsp--;

					adaptor.addChild(root_0, argi177.getTree());

					}
					break;
				case 21 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:572:60: RETURN
					{
					root_0 = (Object)adaptor.nil();


					RETURN178=(Token)match(input,RETURN,FOLLOW_RETURN_in_op2998); 
					RETURN178_tree = (Object)adaptor.create(RETURN178);
					adaptor.addChild(root_0, RETURN178_tree);

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "op"


	public static class argi_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "argi"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:578:1: argi : immediate ;
	public final InchwormAsmParser.argi_return argi() throws RecognitionException {
		InchwormAsmParser.argi_return retval = new InchwormAsmParser.argi_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		ParserRuleReturnScope immediate179 =null;


		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:578:6: ( immediate )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:578:8: immediate
			{
			root_0 = (Object)adaptor.nil();


			pushFollow(FOLLOW_immediate_in_argi3011);
			immediate179=immediate();
			state._fsp--;

			adaptor.addChild(root_0, immediate179.getTree());

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "argi"


	public static class arg1_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "arg1"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:581:1: arg1 : ( reg | NOP -> ^( REG NOP ) );
	public final InchwormAsmParser.arg1_return arg1() throws RecognitionException {
		InchwormAsmParser.arg1_return retval = new InchwormAsmParser.arg1_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token NOP181=null;
		ParserRuleReturnScope reg180 =null;

		Object NOP181_tree=null;
		RewriteRuleTokenStream stream_NOP=new RewriteRuleTokenStream(adaptor,"token NOP");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:581:6: ( reg | NOP -> ^( REG NOP ) )
			int alt58=2;
			int LA58_0 = input.LA(1);
			if ( (LA58_0==PERCENT||LA58_0==REG_PREFIX) ) {
				alt58=1;
			}
			else if ( (LA58_0==NOP) ) {
				alt58=2;
			}

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

			switch (alt58) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:581:8: reg
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reg_in_arg13022);
					reg180=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg180.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:582:4: NOP
					{
					NOP181=(Token)match(input,NOP,FOLLOW_NOP_in_arg13027);  
					stream_NOP.add(NOP181);

					// AST REWRITE
					// elements: NOP
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 582:9: -> ^( REG NOP )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:582:12: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "arg1"


	public static class arg1i_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "arg1i"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:585:1: arg1i : ( reg ( ',' | '<' ) ! immediate | NOP -> ^( REG NOP ) ^( NUM[\"0\"] ) );
	public final InchwormAsmParser.arg1i_return arg1i() throws RecognitionException {
		InchwormAsmParser.arg1i_return retval = new InchwormAsmParser.arg1i_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set183=null;
		Token NOP185=null;
		ParserRuleReturnScope reg182 =null;
		ParserRuleReturnScope immediate184 =null;

		Object set183_tree=null;
		Object NOP185_tree=null;
		RewriteRuleTokenStream stream_NOP=new RewriteRuleTokenStream(adaptor,"token NOP");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:585:7: ( reg ( ',' | '<' ) ! immediate | NOP -> ^( REG NOP ) ^( NUM[\"0\"] ) )
			int alt59=2;
			int LA59_0 = input.LA(1);
			if ( (LA59_0==PERCENT||LA59_0==REG_PREFIX) ) {
				alt59=1;
			}
			else if ( (LA59_0==NOP) ) {
				alt59=2;
			}

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

			switch (alt59) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:585:9: reg ( ',' | '<' ) ! immediate
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reg_in_arg1i3048);
					reg182=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg182.getTree());

					set183=input.LT(1);
					if ( input.LA(1)==99||input.LA(1)==103 ) {
						input.consume();
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_immediate_in_arg1i3057);
					immediate184=immediate();
					state._fsp--;

					adaptor.addChild(root_0, immediate184.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:586:4: NOP
					{
					NOP185=(Token)match(input,NOP,FOLLOW_NOP_in_arg1i3062);  
					stream_NOP.add(NOP185);

					// AST REWRITE
					// elements: NOP
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 586:9: -> ^( REG NOP ) ^( NUM[\"0\"] )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:586:12: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:586:23: ^( NUM[\"0\"] )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(NUM, "0"), root_1);
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "arg1i"


	public static class arg2_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "arg2"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:589:1: arg2 : ( reg ( ',' | '<' ) ! reg | NOP -> ^( REG NOP ) ^( REG NOP ) );
	public final InchwormAsmParser.arg2_return arg2() throws RecognitionException {
		InchwormAsmParser.arg2_return retval = new InchwormAsmParser.arg2_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set187=null;
		Token NOP189=null;
		ParserRuleReturnScope reg186 =null;
		ParserRuleReturnScope reg188 =null;

		Object set187_tree=null;
		Object NOP189_tree=null;
		RewriteRuleTokenStream stream_NOP=new RewriteRuleTokenStream(adaptor,"token NOP");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:589:6: ( reg ( ',' | '<' ) ! reg | NOP -> ^( REG NOP ) ^( REG NOP ) )
			int alt60=2;
			int LA60_0 = input.LA(1);
			if ( (LA60_0==PERCENT||LA60_0==REG_PREFIX) ) {
				alt60=1;
			}
			else if ( (LA60_0==NOP) ) {
				alt60=2;
			}

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

			switch (alt60) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:589:8: reg ( ',' | '<' ) ! reg
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reg_in_arg23088);
					reg186=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg186.getTree());

					set187=input.LT(1);
					if ( input.LA(1)==99||input.LA(1)==103 ) {
						input.consume();
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_reg_in_arg23097);
					reg188=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg188.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:590:4: NOP
					{
					NOP189=(Token)match(input,NOP,FOLLOW_NOP_in_arg23102);  
					stream_NOP.add(NOP189);

					// AST REWRITE
					// elements: NOP, NOP
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 590:9: -> ^( REG NOP ) ^( REG NOP )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:590:12: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:590:23: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "arg2"


	public static class arg3_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "arg3"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:593:1: arg3 : ( reg ( ',' | '<' ) ! reg ',' ! reg | NOP -> ^( REG NOP ) ^( REG NOP ) ^( REG NOP ) );
	public final InchwormAsmParser.arg3_return arg3() throws RecognitionException {
		InchwormAsmParser.arg3_return retval = new InchwormAsmParser.arg3_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set191=null;
		Token char_literal193=null;
		Token NOP195=null;
		ParserRuleReturnScope reg190 =null;
		ParserRuleReturnScope reg192 =null;
		ParserRuleReturnScope reg194 =null;

		Object set191_tree=null;
		Object char_literal193_tree=null;
		Object NOP195_tree=null;
		RewriteRuleTokenStream stream_NOP=new RewriteRuleTokenStream(adaptor,"token NOP");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:593:6: ( reg ( ',' | '<' ) ! reg ',' ! reg | NOP -> ^( REG NOP ) ^( REG NOP ) ^( REG NOP ) )
			int alt61=2;
			int LA61_0 = input.LA(1);
			if ( (LA61_0==PERCENT||LA61_0==REG_PREFIX) ) {
				alt61=1;
			}
			else if ( (LA61_0==NOP) ) {
				alt61=2;
			}

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

			switch (alt61) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:593:8: reg ( ',' | '<' ) ! reg ',' ! reg
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reg_in_arg33129);
					reg190=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg190.getTree());

					set191=input.LT(1);
					if ( input.LA(1)==99||input.LA(1)==103 ) {
						input.consume();
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_reg_in_arg33138);
					reg192=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg192.getTree());

					char_literal193=(Token)match(input,99,FOLLOW_99_in_arg33140); 
					pushFollow(FOLLOW_reg_in_arg33143);
					reg194=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg194.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:594:4: NOP
					{
					NOP195=(Token)match(input,NOP,FOLLOW_NOP_in_arg33148);  
					stream_NOP.add(NOP195);

					// AST REWRITE
					// elements: NOP, NOP, NOP
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 594:9: -> ^( REG NOP ) ^( REG NOP ) ^( REG NOP )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:594:12: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:594:23: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:594:34: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "arg3"


	public static class arg4_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "arg4"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:597:1: arg4 : ( reg ( ',' | '<' ) ! reg ',' ! reg ',' ! reg | NOP -> ^( REG NOP ) ^( REG NOP ) ^( REG NOP ) ^( REG NOP ) );
	public final InchwormAsmParser.arg4_return arg4() throws RecognitionException {
		InchwormAsmParser.arg4_return retval = new InchwormAsmParser.arg4_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token set197=null;
		Token char_literal199=null;
		Token char_literal201=null;
		Token NOP203=null;
		ParserRuleReturnScope reg196 =null;
		ParserRuleReturnScope reg198 =null;
		ParserRuleReturnScope reg200 =null;
		ParserRuleReturnScope reg202 =null;

		Object set197_tree=null;
		Object char_literal199_tree=null;
		Object char_literal201_tree=null;
		Object NOP203_tree=null;
		RewriteRuleTokenStream stream_NOP=new RewriteRuleTokenStream(adaptor,"token NOP");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:597:6: ( reg ( ',' | '<' ) ! reg ',' ! reg ',' ! reg | NOP -> ^( REG NOP ) ^( REG NOP ) ^( REG NOP ) ^( REG NOP ) )
			int alt62=2;
			int LA62_0 = input.LA(1);
			if ( (LA62_0==PERCENT||LA62_0==REG_PREFIX) ) {
				alt62=1;
			}
			else if ( (LA62_0==NOP) ) {
				alt62=2;
			}

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

			switch (alt62) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:597:8: reg ( ',' | '<' ) ! reg ',' ! reg ',' ! reg
					{
					root_0 = (Object)adaptor.nil();


					pushFollow(FOLLOW_reg_in_arg43181);
					reg196=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg196.getTree());

					set197=input.LT(1);
					if ( input.LA(1)==99||input.LA(1)==103 ) {
						input.consume();
						state.errorRecovery=false;
					}
					else {
						MismatchedSetException mse = new MismatchedSetException(null,input);
						throw mse;
					}
					pushFollow(FOLLOW_reg_in_arg43190);
					reg198=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg198.getTree());

					char_literal199=(Token)match(input,99,FOLLOW_99_in_arg43192); 
					pushFollow(FOLLOW_reg_in_arg43195);
					reg200=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg200.getTree());

					char_literal201=(Token)match(input,99,FOLLOW_99_in_arg43197); 
					pushFollow(FOLLOW_reg_in_arg43200);
					reg202=reg();
					state._fsp--;

					adaptor.addChild(root_0, reg202.getTree());

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:598:4: NOP
					{
					NOP203=(Token)match(input,NOP,FOLLOW_NOP_in_arg43205);  
					stream_NOP.add(NOP203);

					// AST REWRITE
					// elements: NOP, NOP, NOP, NOP
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 598:9: -> ^( REG NOP ) ^( REG NOP ) ^( REG NOP ) ^( REG NOP )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:598:12: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:598:23: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:598:34: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:598:45: ^( REG NOP )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_NOP.nextNode());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "arg4"


	public static class reg_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "reg"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:601:1: reg : ( REG_PREFIX num -> ^( REG num ) | REG_PREFIX '[' const_expr ']' -> ^( REG const_expr ) | PERCENT symbol_ref -> ^( REG symbol_ref ) );
	public final InchwormAsmParser.reg_return reg() throws RecognitionException {
		InchwormAsmParser.reg_return retval = new InchwormAsmParser.reg_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token REG_PREFIX204=null;
		Token REG_PREFIX206=null;
		Token char_literal207=null;
		Token char_literal209=null;
		Token PERCENT210=null;
		ParserRuleReturnScope num205 =null;
		ParserRuleReturnScope const_expr208 =null;
		ParserRuleReturnScope symbol_ref211 =null;

		Object REG_PREFIX204_tree=null;
		Object REG_PREFIX206_tree=null;
		Object char_literal207_tree=null;
		Object char_literal209_tree=null;
		Object PERCENT210_tree=null;
		RewriteRuleTokenStream stream_PERCENT=new RewriteRuleTokenStream(adaptor,"token PERCENT");
		RewriteRuleTokenStream stream_107=new RewriteRuleTokenStream(adaptor,"token 107");
		RewriteRuleTokenStream stream_108=new RewriteRuleTokenStream(adaptor,"token 108");
		RewriteRuleTokenStream stream_REG_PREFIX=new RewriteRuleTokenStream(adaptor,"token REG_PREFIX");
		RewriteRuleSubtreeStream stream_num=new RewriteRuleSubtreeStream(adaptor,"rule num");
		RewriteRuleSubtreeStream stream_const_expr=new RewriteRuleSubtreeStream(adaptor,"rule const_expr");
		RewriteRuleSubtreeStream stream_symbol_ref=new RewriteRuleSubtreeStream(adaptor,"rule symbol_ref");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:601:5: ( REG_PREFIX num -> ^( REG num ) | REG_PREFIX '[' const_expr ']' -> ^( REG const_expr ) | PERCENT symbol_ref -> ^( REG symbol_ref ) )
			int alt63=3;
			int LA63_0 = input.LA(1);
			if ( (LA63_0==REG_PREFIX) ) {
				int LA63_1 = input.LA(2);
				if ( (LA63_1==107) ) {
					alt63=2;
				}
				else if ( (LA63_1==BINARY_LITERAL||LA63_1==DECIMAL_LITERAL||LA63_1==HEX_LITERAL) ) {
					alt63=1;
				}

				else {
					int nvaeMark = input.mark();
					try {
						input.consume();
						NoViableAltException nvae =
							new NoViableAltException("", 63, 1, input);
						throw nvae;
					} finally {
						input.rewind(nvaeMark);
					}
				}

			}
			else if ( (LA63_0==PERCENT) ) {
				alt63=3;
			}

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

			switch (alt63) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:601:7: REG_PREFIX num
					{
					REG_PREFIX204=(Token)match(input,REG_PREFIX,FOLLOW_REG_PREFIX_in_reg3243);  
					stream_REG_PREFIX.add(REG_PREFIX204);

					pushFollow(FOLLOW_num_in_reg3245);
					num205=num();
					state._fsp--;

					stream_num.add(num205.getTree());
					// AST REWRITE
					// elements: num
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 601:25: -> ^( REG num )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:601:28: ^( REG num )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_num.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:602:4: REG_PREFIX '[' const_expr ']'
					{
					REG_PREFIX206=(Token)match(input,REG_PREFIX,FOLLOW_REG_PREFIX_in_reg3261);  
					stream_REG_PREFIX.add(REG_PREFIX206);

					char_literal207=(Token)match(input,107,FOLLOW_107_in_reg3263);  
					stream_107.add(char_literal207);

					pushFollow(FOLLOW_const_expr_in_reg3265);
					const_expr208=const_expr();
					state._fsp--;

					stream_const_expr.add(const_expr208.getTree());
					char_literal209=(Token)match(input,108,FOLLOW_108_in_reg3267);  
					stream_108.add(char_literal209);

					// AST REWRITE
					// elements: const_expr
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 602:35: -> ^( REG const_expr )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:602:38: ^( REG const_expr )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_const_expr.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:603:4: PERCENT symbol_ref
					{
					PERCENT210=(Token)match(input,PERCENT,FOLLOW_PERCENT_in_reg3281);  
					stream_PERCENT.add(PERCENT210);

					pushFollow(FOLLOW_symbol_ref_in_reg3283);
					symbol_ref211=symbol_ref();
					state._fsp--;

					stream_symbol_ref.add(symbol_ref211.getTree());
					// AST REWRITE
					// elements: symbol_ref
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 603:24: -> ^( REG symbol_ref )
					{
						// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:603:27: ^( REG symbol_ref )
						{
						Object root_1 = (Object)adaptor.nil();
						root_1 = (Object)adaptor.becomeRoot((Object)adaptor.create(REG, "REG"), root_1);
						adaptor.addChild(root_1, stream_symbol_ref.nextTree());
						adaptor.addChild(root_0, root_1);
						}

					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "reg"


	public static class reg_symbol_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "reg_symbol"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:606:1: reg_symbol : ( IP -> NUM[Integer.toHexString(params.getNumRegs() - R_IP.getOffset())] | OUT1 -> NUM[Integer.toHexString(params.getNumRegs() - R_OUT1.getOffset())] | OUT2 -> NUM[Integer.toHexString(params.getNumRegs() - R_OUT2.getOffset())] | IN -> NUM[Integer.toHexString(params.getNumRegs() - R_IN.getOffset())] | CTRL -> NUM[Integer.toHexString(params.getNumRegs() - R_CTRL.getOffset())] | CARRY -> NUM[Integer.toHexString(params.getNumRegs() - R_CARRY.getOffset())] | ZERO -> NUM[Integer.toHexString(params.getNumRegs() - R_ZERO.getOffset())] | SIGN -> NUM[Integer.toHexString(params.getNumRegs() - R_SIGN.getOffset())] | OVERFLOW -> NUM[Integer.toHexString(params.getNumRegs() - R_OVERFLOW.getOffset())] | FLAGS -> NUM[Integer.toHexString(params.getNumRegs() - R_FLAGS.getOffset())] | NOP -> NUM[Integer.toHexString(params.getNumRegs() - R_NOP.getOffset())] | CTR_FLAG -> NUM[Integer.toHexString(regIndex)] | LOCAL_REG -> NUM[Integer.toHexString(regIndex)] | FREEREGS -> NUM[Integer.toHexString(params.getNumRegs() - params.getFirstSpecialOffset())] );
	public final InchwormAsmParser.reg_symbol_return reg_symbol() throws RecognitionException {
		InchwormAsmParser.reg_symbol_return retval = new InchwormAsmParser.reg_symbol_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token IP212=null;
		Token OUT1213=null;
		Token OUT2214=null;
		Token IN215=null;
		Token CTRL216=null;
		Token CARRY217=null;
		Token ZERO218=null;
		Token SIGN219=null;
		Token OVERFLOW220=null;
		Token FLAGS221=null;
		Token NOP222=null;
		Token CTR_FLAG223=null;
		Token LOCAL_REG224=null;
		Token FREEREGS225=null;

		Object IP212_tree=null;
		Object OUT1213_tree=null;
		Object OUT2214_tree=null;
		Object IN215_tree=null;
		Object CTRL216_tree=null;
		Object CARRY217_tree=null;
		Object ZERO218_tree=null;
		Object SIGN219_tree=null;
		Object OVERFLOW220_tree=null;
		Object FLAGS221_tree=null;
		Object NOP222_tree=null;
		Object CTR_FLAG223_tree=null;
		Object LOCAL_REG224_tree=null;
		Object FREEREGS225_tree=null;
		RewriteRuleTokenStream stream_OUT2=new RewriteRuleTokenStream(adaptor,"token OUT2");
		RewriteRuleTokenStream stream_ZERO=new RewriteRuleTokenStream(adaptor,"token ZERO");
		RewriteRuleTokenStream stream_IN=new RewriteRuleTokenStream(adaptor,"token IN");
		RewriteRuleTokenStream stream_OUT1=new RewriteRuleTokenStream(adaptor,"token OUT1");
		RewriteRuleTokenStream stream_IP=new RewriteRuleTokenStream(adaptor,"token IP");
		RewriteRuleTokenStream stream_CTR_FLAG=new RewriteRuleTokenStream(adaptor,"token CTR_FLAG");
		RewriteRuleTokenStream stream_FREEREGS=new RewriteRuleTokenStream(adaptor,"token FREEREGS");
		RewriteRuleTokenStream stream_NOP=new RewriteRuleTokenStream(adaptor,"token NOP");
		RewriteRuleTokenStream stream_CTRL=new RewriteRuleTokenStream(adaptor,"token CTRL");
		RewriteRuleTokenStream stream_CARRY=new RewriteRuleTokenStream(adaptor,"token CARRY");
		RewriteRuleTokenStream stream_OVERFLOW=new RewriteRuleTokenStream(adaptor,"token OVERFLOW");
		RewriteRuleTokenStream stream_LOCAL_REG=new RewriteRuleTokenStream(adaptor,"token LOCAL_REG");
		RewriteRuleTokenStream stream_FLAGS=new RewriteRuleTokenStream(adaptor,"token FLAGS");
		RewriteRuleTokenStream stream_SIGN=new RewriteRuleTokenStream(adaptor,"token SIGN");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:607:2: ( IP -> NUM[Integer.toHexString(params.getNumRegs() - R_IP.getOffset())] | OUT1 -> NUM[Integer.toHexString(params.getNumRegs() - R_OUT1.getOffset())] | OUT2 -> NUM[Integer.toHexString(params.getNumRegs() - R_OUT2.getOffset())] | IN -> NUM[Integer.toHexString(params.getNumRegs() - R_IN.getOffset())] | CTRL -> NUM[Integer.toHexString(params.getNumRegs() - R_CTRL.getOffset())] | CARRY -> NUM[Integer.toHexString(params.getNumRegs() - R_CARRY.getOffset())] | ZERO -> NUM[Integer.toHexString(params.getNumRegs() - R_ZERO.getOffset())] | SIGN -> NUM[Integer.toHexString(params.getNumRegs() - R_SIGN.getOffset())] | OVERFLOW -> NUM[Integer.toHexString(params.getNumRegs() - R_OVERFLOW.getOffset())] | FLAGS -> NUM[Integer.toHexString(params.getNumRegs() - R_FLAGS.getOffset())] | NOP -> NUM[Integer.toHexString(params.getNumRegs() - R_NOP.getOffset())] | CTR_FLAG -> NUM[Integer.toHexString(regIndex)] | LOCAL_REG -> NUM[Integer.toHexString(regIndex)] | FREEREGS -> NUM[Integer.toHexString(params.getNumRegs() - params.getFirstSpecialOffset())] )
			int alt64=14;
			switch ( input.LA(1) ) {
			case IP:
				{
				alt64=1;
				}
				break;
			case OUT1:
				{
				alt64=2;
				}
				break;
			case OUT2:
				{
				alt64=3;
				}
				break;
			case IN:
				{
				alt64=4;
				}
				break;
			case CTRL:
				{
				alt64=5;
				}
				break;
			case CARRY:
				{
				alt64=6;
				}
				break;
			case ZERO:
				{
				alt64=7;
				}
				break;
			case SIGN:
				{
				alt64=8;
				}
				break;
			case OVERFLOW:
				{
				alt64=9;
				}
				break;
			case FLAGS:
				{
				alt64=10;
				}
				break;
			case NOP:
				{
				alt64=11;
				}
				break;
			case CTR_FLAG:
				{
				alt64=12;
				}
				break;
			case LOCAL_REG:
				{
				alt64=13;
				}
				break;
			case FREEREGS:
				{
				alt64=14;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 64, 0, input);
				throw nvae;
			}
			switch (alt64) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:607:4: IP
					{
					IP212=(Token)match(input,IP,FOLLOW_IP_in_reg_symbol3304);  
					stream_IP.add(IP212);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 607:9: -> NUM[Integer.toHexString(params.getNumRegs() - R_IP.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_IP.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:608:4: OUT1
					{
					OUT1213=(Token)match(input,OUT1,FOLLOW_OUT1_in_reg_symbol3316);  
					stream_OUT1.add(OUT1213);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 608:11: -> NUM[Integer.toHexString(params.getNumRegs() - R_OUT1.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_OUT1.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:609:4: OUT2
					{
					OUT2214=(Token)match(input,OUT2,FOLLOW_OUT2_in_reg_symbol3328);  
					stream_OUT2.add(OUT2214);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 609:11: -> NUM[Integer.toHexString(params.getNumRegs() - R_OUT2.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_OUT2.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 4 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:610:4: IN
					{
					IN215=(Token)match(input,IN,FOLLOW_IN_in_reg_symbol3340);  
					stream_IN.add(IN215);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 610:9: -> NUM[Integer.toHexString(params.getNumRegs() - R_IN.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_IN.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 5 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:611:6: CTRL
					{
					CTRL216=(Token)match(input,CTRL,FOLLOW_CTRL_in_reg_symbol3354);  
					stream_CTRL.add(CTRL216);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 611:13: -> NUM[Integer.toHexString(params.getNumRegs() - R_CTRL.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_CTRL.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 6 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:612:4: CARRY
					{
					CARRY217=(Token)match(input,CARRY,FOLLOW_CARRY_in_reg_symbol3366);  
					stream_CARRY.add(CARRY217);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 612:11: -> NUM[Integer.toHexString(params.getNumRegs() - R_CARRY.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_CARRY.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 7 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:613:4: ZERO
					{
					ZERO218=(Token)match(input,ZERO,FOLLOW_ZERO_in_reg_symbol3377);  
					stream_ZERO.add(ZERO218);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 613:11: -> NUM[Integer.toHexString(params.getNumRegs() - R_ZERO.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_ZERO.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 8 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:614:4: SIGN
					{
					SIGN219=(Token)match(input,SIGN,FOLLOW_SIGN_in_reg_symbol3389);  
					stream_SIGN.add(SIGN219);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 614:11: -> NUM[Integer.toHexString(params.getNumRegs() - R_SIGN.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_SIGN.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 9 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:615:4: OVERFLOW
					{
					OVERFLOW220=(Token)match(input,OVERFLOW,FOLLOW_OVERFLOW_in_reg_symbol3401);  
					stream_OVERFLOW.add(OVERFLOW220);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 615:13: -> NUM[Integer.toHexString(params.getNumRegs() - R_OVERFLOW.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_OVERFLOW.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 10 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:616:4: FLAGS
					{
					FLAGS221=(Token)match(input,FLAGS,FOLLOW_FLAGS_in_reg_symbol3411);  
					stream_FLAGS.add(FLAGS221);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 616:11: -> NUM[Integer.toHexString(params.getNumRegs() - R_FLAGS.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_FLAGS.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 11 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:617:4: NOP
					{
					NOP222=(Token)match(input,NOP,FOLLOW_NOP_in_reg_symbol3422);  
					stream_NOP.add(NOP222);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 617:9: -> NUM[Integer.toHexString(params.getNumRegs() - R_NOP.getOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - R_NOP.getOffset())));
					}


					retval.tree = root_0;

					}
					break;
				case 12 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:618:4: CTR_FLAG
					{
					CTR_FLAG223=(Token)match(input,CTR_FLAG,FOLLOW_CTR_FLAG_in_reg_symbol3433);  
					stream_CTR_FLAG.add(CTR_FLAG223);

					      
						    int modulus = Integer.parseInt((CTR_FLAG223!=null?CTR_FLAG223.getText():null), 16);
					      int regIndex = params.getCounterRegisterLocation(modulus);
					      if (regIndex < 0)
					        throw new SyntaxError("ctr"+modulus+" was used but not declared in header: ", this.input);
					    
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 623:7: -> NUM[Integer.toHexString(regIndex)]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(regIndex)));
					}


					retval.tree = root_0;

					}
					break;
				case 13 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:624:5: LOCAL_REG
					{
					LOCAL_REG224=(Token)match(input,LOCAL_REG,FOLLOW_LOCAL_REG_in_reg_symbol3446);  
					stream_LOCAL_REG.add(LOCAL_REG224);


					        int localNdx = Integer.parseInt((LOCAL_REG224!=null?LOCAL_REG224.getText():null), 16);
					        int regIndex = params.getLocalRegisterLocation(localNdx);
					        if (regIndex < 0)
					        throw new SyntaxError("local"+localNdx+" is out of the defined range. ", this.input);
					  
					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 629:5: -> NUM[Integer.toHexString(regIndex)]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(regIndex)));
					}


					retval.tree = root_0;

					}
					break;
				case 14 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:630:4: FREEREGS
					{
					FREEREGS225=(Token)match(input,FREEREGS,FOLLOW_FREEREGS_in_reg_symbol3458);  
					stream_FREEREGS.add(FREEREGS225);

					// AST REWRITE
					// elements: 
					// token labels: 
					// rule labels: retval
					// token list labels: 
					// rule list labels: 
					// wildcard labels: 
					retval.tree = root_0;
					RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

					root_0 = (Object)adaptor.nil();
					// 630:13: -> NUM[Integer.toHexString(params.getNumRegs() - params.getFirstSpecialOffset())]
					{
						adaptor.addChild(root_0, (Object)adaptor.create(NUM, Integer.toHexString(params.getNumRegs() - params.getFirstSpecialOffset())));
					}


					retval.tree = root_0;

					}
					break;

			}
			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "reg_symbol"


	public static class num_return extends ParserRuleReturnScope {
		Object tree;
		@Override
		public Object getTree() { return tree; }
	};


	// $ANTLR start "num"
	// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:633:1: num : ( HEX_LITERAL | BINARY_LITERAL | DECIMAL_LITERAL ) -> NUM[$text] ;
	public final InchwormAsmParser.num_return num() throws RecognitionException {
		InchwormAsmParser.num_return retval = new InchwormAsmParser.num_return();
		retval.start = input.LT(1);

		Object root_0 = null;

		Token HEX_LITERAL226=null;
		Token BINARY_LITERAL227=null;
		Token DECIMAL_LITERAL228=null;

		Object HEX_LITERAL226_tree=null;
		Object BINARY_LITERAL227_tree=null;
		Object DECIMAL_LITERAL228_tree=null;
		RewriteRuleTokenStream stream_HEX_LITERAL=new RewriteRuleTokenStream(adaptor,"token HEX_LITERAL");
		RewriteRuleTokenStream stream_BINARY_LITERAL=new RewriteRuleTokenStream(adaptor,"token BINARY_LITERAL");
		RewriteRuleTokenStream stream_DECIMAL_LITERAL=new RewriteRuleTokenStream(adaptor,"token DECIMAL_LITERAL");

		try {
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:633:5: ( ( HEX_LITERAL | BINARY_LITERAL | DECIMAL_LITERAL ) -> NUM[$text] )
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:633:7: ( HEX_LITERAL | BINARY_LITERAL | DECIMAL_LITERAL )
			{
			// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:633:7: ( HEX_LITERAL | BINARY_LITERAL | DECIMAL_LITERAL )
			int alt65=3;
			switch ( input.LA(1) ) {
			case HEX_LITERAL:
				{
				alt65=1;
				}
				break;
			case BINARY_LITERAL:
				{
				alt65=2;
				}
				break;
			case DECIMAL_LITERAL:
				{
				alt65=3;
				}
				break;
			default:
				NoViableAltException nvae =
					new NoViableAltException("", 65, 0, input);
				throw nvae;
			}
			switch (alt65) {
				case 1 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:633:8: HEX_LITERAL
					{
					HEX_LITERAL226=(Token)match(input,HEX_LITERAL,FOLLOW_HEX_LITERAL_in_num3475);  
					stream_HEX_LITERAL.add(HEX_LITERAL226);

					}
					break;
				case 2 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:633:22: BINARY_LITERAL
					{
					BINARY_LITERAL227=(Token)match(input,BINARY_LITERAL,FOLLOW_BINARY_LITERAL_in_num3479);  
					stream_BINARY_LITERAL.add(BINARY_LITERAL227);

					}
					break;
				case 3 :
					// /home/talm/proj/inchworm/git-migrate/inchworm/src/main/antlr/org.factcenter.inchworm/asm/InchwormAsm.g:633:39: DECIMAL_LITERAL
					{
					DECIMAL_LITERAL228=(Token)match(input,DECIMAL_LITERAL,FOLLOW_DECIMAL_LITERAL_in_num3483);  
					stream_DECIMAL_LITERAL.add(DECIMAL_LITERAL228);

					}
					break;

			}

			// AST REWRITE
			// elements: 
			// token labels: 
			// rule labels: retval
			// token list labels: 
			// rule list labels: 
			// wildcard labels: 
			retval.tree = root_0;
			RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"rule retval",retval!=null?retval.getTree():null);

			root_0 = (Object)adaptor.nil();
			// 633:56: -> NUM[$text]
			{
				adaptor.addChild(root_0, (Object)adaptor.create(NUM, input.toString(retval.start,input.LT(-1))));
			}


			retval.tree = root_0;

			}

			retval.stop = input.LT(-1);

			retval.tree = (Object)adaptor.rulePostProcessing(root_0);
			adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);

		}
		catch (RecognitionException re) {
			reportError(re);
			recover(input,re);
			retval.tree = (Object)adaptor.errorNode(input, retval.start, input.LT(-1), re);
		}
		finally {
			// do for sure before leaving
		}
		return retval;
	}
	// $ANTLR end "num"

	// Delegated rules



	public static final BitSet FOLLOW_109_in_c_xor1035 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_95_in_c_and1042 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_111_in_c_or1049 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_104_in_c_shl1056 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_106_in_c_shr1063 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_98_in_c_add1070 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_100_in_c_sub1077 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_c_mul1084 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_101_in_c_div1091 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PERCENT_in_c_mod1098 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_112_in_c_not1105 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_header_section_in_program1355 = new BitSet(new long[]{0x0000000000000002L,0x000000000002F000L});
	public static final BitSet FOLLOW_const_section_in_program1358 = new BitSet(new long[]{0x0000000000000002L,0x000000000002D000L});
	public static final BitSet FOLLOW_data_section_in_program1361 = new BitSet(new long[]{0x0000000000000002L,0x0000000000029000L});
	public static final BitSet FOLLOW_code_section_in_program1364 = new BitSet(new long[]{0x0000000000000002L,0x0000000000028000L});
	public static final BitSet FOLLOW_ram_section_in_program1367 = new BitSet(new long[]{0x0000000000000002L,0x0000000000008000L});
	public static final BitSet FOLLOW_SEC_END_in_program1370 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEC_HEADER_in_header_section1383 = new BitSet(new long[]{0x0000802000002000L,0x00000000040808B8L});
	public static final BitSet FOLLOW_header_option_in_header_section1389 = new BitSet(new long[]{0x0000802000002000L,0x00000000040808B8L});
	public static final BitSet FOLLOW_instruction_def_in_header_section1394 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_INSTRUCTIONDEF_in_instruction_def1419 = new BitSet(new long[]{0x30E6208200000130L,0x0000004071700600L});
	public static final BitSet FOLLOW_102_in_instruction_def1422 = new BitSet(new long[]{0x30E6208200000130L,0x0000000071700600L});
	public static final BitSet FOLLOW_opdesc_in_instruction_def1426 = new BitSet(new long[]{0x30E6208200000132L,0x0000000071700600L});
	public static final BitSet FOLLOW_STAR_in_opdesc1451 = new BitSet(new long[]{0x30E6208200000130L,0x0000000071600600L});
	public static final BitSet FOLLOW_opname_in_opdesc1454 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_opdesc1456 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_freq_in_opdesc1458 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STAR_in_opdesc1484 = new BitSet(new long[]{0x30E6208200000130L,0x0000000071600600L});
	public static final BitSet FOLLOW_opname_in_opdesc1487 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_num_in_freq1619 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_WORDSIZE_in_header_option1633 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1635 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1638 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RAMWORDSIZE_in_header_option1655 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1657 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1660 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REGPTRSIZE_in_header_option1677 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1679 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1682 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ROMPTRSIZE_in_header_option1699 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1701 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1704 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RAMPTRSIZE_in_header_option1721 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1723 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1726 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RAMLOADSIZE_in_header_option1743 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1745 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1748 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STACKPTRSIZE_in_header_option1765 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1767 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1770 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FRAMESIZE_in_header_option1787 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1789 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_header_option1792 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_COUNTERS_in_header_option1809 = new BitSet(new long[]{0x0000080080000040L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_header_option1811 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_countermodulus_in_header_option1814 = new BitSet(new long[]{0x0000080080000042L});
	public static final BitSet FOLLOW_num_in_countermodulus1840 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_countermodulus1843 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEC_CONST_in_const_section1862 = new BitSet(new long[]{0xC11130500000C202L,0x0000000040040001L});
	public static final BitSet FOLLOW_const_def_in_const_section1864 = new BitSet(new long[]{0xC11130500000C202L,0x0000000040040001L});
	public static final BitSet FOLLOW_reserved_label_in_const_def1886 = new BitSet(new long[]{0x0000000000000000L,0x0000420000000000L});
	public static final BitSet FOLLOW_set_in_const_def1888 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_expr_in_const_def1895 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_const_def1902 = new BitSet(new long[]{0x0000000000000000L,0x0000420000000000L});
	public static final BitSet FOLLOW_105_in_const_def1905 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_110_in_const_def1907 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_expr_in_const_def1911 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEC_DATA_in_data_section1931 = new BitSet(new long[]{0xC11138508002C242L,0x0000001140840103L});
	public static final BitSet FOLLOW_data_def_in_data_section1933 = new BitSet(new long[]{0xC11138508002C242L,0x0000001140840103L});
	public static final BitSet FOLLOW_reserved_label_in_data_def1962 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_data_def1964 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_data_def1972 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_data_def1974 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_current_pos_ref_in_data_def2006 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_in_data_def2031 = new BitSet(new long[]{0x0000000000000000L,0x0000424000000000L});
	public static final BitSet FOLLOW_102_in_data_def2035 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_105_in_data_def2039 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_110_in_data_def2043 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STRING_in_data_def2058 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_data_def2061 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_100_in_data_def2084 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_data_def2086 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_data_def2089 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_num_in_data_def2115 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_data_def2118 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_96_in_data_def2145 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_expr_in_data_def2147 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_97_in_data_def2149 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_data_def2152 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEC_RAM_in_ram_section2176 = new BitSet(new long[]{0xC11138508000C242L,0x0000000040040001L});
	public static final BitSet FOLLOW_ram_def_in_ram_section2178 = new BitSet(new long[]{0xC11138508000C242L,0x0000000040040001L});
	public static final BitSet FOLLOW_reserved_label_in_ram_def2207 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_ram_def2209 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_ram_def2217 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_ram_def2219 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_num_in_ram_def2254 = new BitSet(new long[]{0x0000000000000002L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_ram_def2257 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SEC_CODE_in_code_section2292 = new BitSet(new long[]{0xF1F730D20000C332L,0x0000000071640601L});
	public static final BitSet FOLLOW_codeop_in_code_section2294 = new BitSet(new long[]{0xF1F730D20000C332L,0x0000000071640601L});
	public static final BitSet FOLLOW_label_def_in_codeop2314 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_instruction_in_codeop2318 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_const_expr_in_immediate2329 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_const_prec5_in_const_expr2340 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_const_prec4_in_const_prec52354 = new BitSet(new long[]{0x0000000000000002L,0x0000800000000000L});
	public static final BitSet FOLLOW_const_prec5_op_in_const_prec52357 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_prec4_in_const_prec52362 = new BitSet(new long[]{0x0000000000000002L,0x0000800000000000L});
	public static final BitSet FOLLOW_const_prec3_in_const_prec42382 = new BitSet(new long[]{0x0000000000000002L,0x0000200080000000L});
	public static final BitSet FOLLOW_const_prec4_op_in_const_prec42385 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_prec3_in_const_prec42390 = new BitSet(new long[]{0x0000000000000002L,0x0000200080000000L});
	public static final BitSet FOLLOW_const_prec2_in_const_prec32409 = new BitSet(new long[]{0x0000000000000002L,0x0000050000000000L});
	public static final BitSet FOLLOW_const_prec3_op_in_const_prec32412 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_prec2_in_const_prec32417 = new BitSet(new long[]{0x0000000000000002L,0x0000050000000000L});
	public static final BitSet FOLLOW_const_prec1_in_const_prec22436 = new BitSet(new long[]{0x0000000000000002L,0x0000001400000000L});
	public static final BitSet FOLLOW_const_prec2_op_in_const_prec22439 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_prec1_in_const_prec22444 = new BitSet(new long[]{0x0000000000000002L,0x0000001400000000L});
	public static final BitSet FOLLOW_const_prec0_in_const_prec12463 = new BitSet(new long[]{0x0000000000000002L,0x0000002000100002L});
	public static final BitSet FOLLOW_const_prec1_op_in_const_prec12466 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_prec0_in_const_prec12471 = new BitSet(new long[]{0x0000000000000002L,0x0000002000100002L});
	public static final BitSet FOLLOW_const_unary_op_in_const_prec02488 = new BitSet(new long[]{0xC11138508002C240L,0x0000000140040001L});
	public static final BitSet FOLLOW_const_atom_in_const_prec02491 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_const_atom_in_const_prec02499 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_num_in_const_atom2513 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_symbol_ref_in_const_atom2517 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_96_in_const_atom2521 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_expr_in_const_atom2523 = new BitSet(new long[]{0x0000000000000000L,0x0000000200000000L});
	public static final BitSet FOLLOW_97_in_const_atom2525 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_not_in_const_unary_op2545 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_sub_in_const_unary_op2556 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_mul_in_const_prec1_op2575 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_div_in_const_prec1_op2586 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_mod_in_const_prec1_op2597 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_add_in_const_prec2_op2618 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_sub_in_const_prec2_op2629 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_shl_in_const_prec3_op2647 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_shr_in_const_prec3_op2658 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_and_in_const_prec4_op2676 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_xor_in_const_prec4_op2687 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_c_or_in_const_prec5_op2708 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_symbol_in_reserved_label2727 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reserved_label_in_label_def2740 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_label_def2742 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_label_def2749 = new BitSet(new long[]{0x0000000000000000L,0x0000004000000000L});
	public static final BitSet FOLLOW_102_in_label_def2752 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ID_in_symbol_ref2766 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_current_pos_ref_in_symbol_ref2779 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_symbol_in_symbol_ref2784 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CURRENT_POS_in_current_pos_ref2797 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_op_in_instruction2818 = new BitSet(new long[]{0x30E6208600000130L,0x0000000071600600L});
	public static final BitSet FOLLOW_EOI_in_instruction2822 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_EOF_in_instruction2824 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ZERO_in_op2857 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg1_in_op2860 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_XORI_in_op2866 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg1i_in_op2869 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_XOR_in_op2874 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2877 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OR_in_op2882 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2885 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ADD_in_op2890 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2893 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SUB_in_op2898 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2901 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_AND_in_op2906 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2909 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ROL_in_op2914 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2917 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MUL_in_op2922 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2925 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DIV_in_op2929 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg3_in_op2932 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LOAD_in_op2936 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg2_in_op2939 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STORE_in_op2943 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg2_in_op2946 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LOADREG_in_op2950 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg2_in_op2953 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_STOREREG_in_op2957 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg2_in_op2960 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OUT_in_op2965 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IN_in_op2969 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HALT_in_op2973 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_MUX_in_op2977 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg4_in_op2980 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NEXT_in_op2984 = new BitSet(new long[]{0x0100000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_arg2_in_op2987 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CALL_in_op2991 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_argi_in_op2994 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_RETURN_in_op2998 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_immediate_in_argi3011 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_in_arg13022 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOP_in_arg13027 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_in_arg1i3048 = new BitSet(new long[]{0x0000000000000000L,0x0000008800000000L});
	public static final BitSet FOLLOW_set_in_arg1i3050 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_immediate_in_arg1i3057 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOP_in_arg1i3062 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_in_arg23088 = new BitSet(new long[]{0x0000000000000000L,0x0000008800000000L});
	public static final BitSet FOLLOW_set_in_arg23090 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_reg_in_arg23097 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOP_in_arg23102 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_in_arg33129 = new BitSet(new long[]{0x0000000000000000L,0x0000008800000000L});
	public static final BitSet FOLLOW_set_in_arg33131 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_reg_in_arg33138 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_arg33140 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_reg_in_arg33143 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOP_in_arg33148 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_reg_in_arg43181 = new BitSet(new long[]{0x0000000000000000L,0x0000008800000000L});
	public static final BitSet FOLLOW_set_in_arg43183 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_reg_in_arg43190 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_arg43192 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_reg_in_arg43195 = new BitSet(new long[]{0x0000000000000000L,0x0000000800000000L});
	public static final BitSet FOLLOW_99_in_arg43197 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000102L});
	public static final BitSet FOLLOW_reg_in_arg43200 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOP_in_arg43205 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REG_PREFIX_in_reg3243 = new BitSet(new long[]{0x0000080080000040L});
	public static final BitSet FOLLOW_num_in_reg3245 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_REG_PREFIX_in_reg3261 = new BitSet(new long[]{0x0000000000000000L,0x0000080000000000L});
	public static final BitSet FOLLOW_107_in_reg3263 = new BitSet(new long[]{0xC11138508002C240L,0x0001001140040001L});
	public static final BitSet FOLLOW_const_expr_in_reg3265 = new BitSet(new long[]{0x0000000000000000L,0x0000100000000000L});
	public static final BitSet FOLLOW_108_in_reg3267 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_PERCENT_in_reg3281 = new BitSet(new long[]{0xC11130500002C200L,0x0000000040040001L});
	public static final BitSet FOLLOW_symbol_ref_in_reg3283 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IP_in_reg_symbol3304 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OUT1_in_reg_symbol3316 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OUT2_in_reg_symbol3328 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_IN_in_reg_symbol3340 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CTRL_in_reg_symbol3354 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CARRY_in_reg_symbol3366 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_ZERO_in_reg_symbol3377 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_SIGN_in_reg_symbol3389 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_OVERFLOW_in_reg_symbol3401 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FLAGS_in_reg_symbol3411 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_NOP_in_reg_symbol3422 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_CTR_FLAG_in_reg_symbol3433 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_LOCAL_REG_in_reg_symbol3446 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_FREEREGS_in_reg_symbol3458 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_HEX_LITERAL_in_num3475 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_BINARY_LITERAL_in_num3479 = new BitSet(new long[]{0x0000000000000002L});
	public static final BitSet FOLLOW_DECIMAL_LITERAL_in_num3483 = new BitSet(new long[]{0x0000000000000002L});
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy