[llvm-commits] CVS: llvm/projects/Stacker/lib/compiler/Lexer.cpp.cvs Lexer.l.cvs StackerParser.cpp.cvs StackerParser.h.cvs StackerParser.y.cvs Lexer.cpp StackerParser.cpp StackerParser.h

Chris Lattner lattner at cs.uiuc.edu
Tue Feb 14 23:26:19 PST 2006



Changes in directory llvm/projects/Stacker/lib/compiler:

Lexer.cpp.cvs added (r1.1)
Lexer.l.cvs added (r1.1)
StackerParser.cpp.cvs added (r1.1)
StackerParser.h.cvs added (r1.1)
StackerParser.y.cvs added (r1.1)
Lexer.cpp (r1.1) removed
StackerParser.cpp (r1.1) removed
StackerParser.h (r1.1) removed
---
Log message:

Convert over to the new way of handling lex/bison checked into cvs


---
Diffs of the changes:  (+4726 -0)

 Lexer.cpp.cvs         | 2195 ++++++++++++++++++++++++++++++++++++++++++++++++++
 Lexer.l.cvs           |  234 +++++
 StackerParser.cpp.cvs | 1909 +++++++++++++++++++++++++++++++++++++++++++
 StackerParser.h.cvs   |  203 ++++
 StackerParser.y.cvs   |  185 ++++
 5 files changed, 4726 insertions(+)


Index: llvm/projects/Stacker/lib/compiler/Lexer.cpp.cvs
diff -c /dev/null llvm/projects/Stacker/lib/compiler/Lexer.cpp.cvs:1.1
*** /dev/null	Wed Feb 15 01:26:17 2006
--- llvm/projects/Stacker/lib/compiler/Lexer.cpp.cvs	Wed Feb 15 01:26:07 2006
***************
*** 0 ****
--- 1,2195 ----
+ #define yy_create_buffer Stacker_create_buffer
+ #define yy_delete_buffer Stacker_delete_buffer
+ #define yy_scan_buffer Stacker_scan_buffer
+ #define yy_scan_string Stacker_scan_string
+ #define yy_scan_bytes Stacker_scan_bytes
+ #define yy_flex_debug Stacker_flex_debug
+ #define yy_init_buffer Stacker_init_buffer
+ #define yy_flush_buffer Stacker_flush_buffer
+ #define yy_load_buffer_state Stacker_load_buffer_state
+ #define yy_switch_to_buffer Stacker_switch_to_buffer
+ #define yyin Stackerin
+ #define yyleng Stackerleng
+ #define yylex Stackerlex
+ #define yyout Stackerout
+ #define yyrestart Stackerrestart
+ #define yytext Stackertext
+ #define yylineno Stackerlineno
+ 
+ #line 20 "Lexer.cpp"
+ /* A lexical scanner generated by flex */
+ 
+ /* Scanner skeleton version:
+  * $Header: /home/vadve/shared/PublicCVS/llvm/projects/Stacker/lib/compiler/Lexer.cpp.cvs,v 1.1 2006/02/15 07:26:07 lattner Exp $
+  */
+ 
+ #define FLEX_SCANNER
+ #define YY_FLEX_MAJOR_VERSION 2
+ #define YY_FLEX_MINOR_VERSION 5
+ 
+ #include <stdio.h>
+ #include <unistd.h>
+ 
+ 
+ /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
+ #ifdef c_plusplus
+ #ifndef __cplusplus
+ #define __cplusplus
+ #endif
+ #endif
+ 
+ 
+ #ifdef __cplusplus
+ 
+ #include <stdlib.h>
+ 
+ /* Use prototypes in function declarations. */
+ #define YY_USE_PROTOS
+ 
+ /* The "const" storage-class-modifier is valid. */
+ #define YY_USE_CONST
+ 
+ #else	/* ! __cplusplus */
+ 
+ #if __STDC__
+ 
+ #define YY_USE_PROTOS
+ #define YY_USE_CONST
+ 
+ #endif	/* __STDC__ */
+ #endif	/* ! __cplusplus */
+ 
+ #ifdef __TURBOC__
+  #pragma warn -rch
+  #pragma warn -use
+ #include <io.h>
+ #include <stdlib.h>
+ #define YY_USE_CONST
+ #define YY_USE_PROTOS
+ #endif
+ 
+ #ifdef YY_USE_CONST
+ #define yyconst const
+ #else
+ #define yyconst
+ #endif
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ #define YY_PROTO(proto) proto
+ #else
+ #define YY_PROTO(proto) ()
+ #endif
+ 
+ /* Returned upon end-of-file. */
+ #define YY_NULL 0
+ 
+ /* Promotes a possibly negative, possibly signed char to an unsigned
+  * integer for use as an array index.  If the signed char is negative,
+  * we want to instead treat it as an 8-bit unsigned char, hence the
+  * double cast.
+  */
+ #define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c)
+ 
+ /* Enter a start condition.  This macro really ought to take a parameter,
+  * but we do it the disgusting crufty way forced on us by the ()-less
+  * definition of BEGIN.
+  */
+ #define BEGIN yy_start = 1 + 2 *
+ 
+ /* Translate the current start state into a value that can be later handed
+  * to BEGIN to return to the state.  The YYSTATE alias is for lex
+  * compatibility.
+  */
+ #define YY_START ((yy_start - 1) / 2)
+ #define YYSTATE YY_START
+ 
+ /* Action number for EOF rule of a given start state. */
+ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
+ 
+ /* Special action meaning "start processing a new file". */
+ #define YY_NEW_FILE yyrestart( yyin )
+ 
+ #define YY_END_OF_BUFFER_CHAR 0
+ 
+ /* Size of default input buffer. */
+ #define YY_BUF_SIZE (16384*64)
+ 
+ typedef struct yy_buffer_state *YY_BUFFER_STATE;
+ 
+ extern int yyleng;
+ extern FILE *yyin, *yyout;
+ 
+ #define EOB_ACT_CONTINUE_SCAN 0
+ #define EOB_ACT_END_OF_FILE 1
+ #define EOB_ACT_LAST_MATCH 2
+ 
+ /* The funky do-while in the following #define is used to turn the definition
+  * int a single C statement (which needs a semi-colon terminator).  This
+  * avoids problems with code like:
+  *
+  * 	if ( condition_holds )
+  *		yyless( 5 );
+  *	else
+  *		do_something_else();
+  *
+  * Prior to using the do-while the compiler would get upset at the
+  * "else" because it interpreted the "if" statement as being all
+  * done when it reached the ';' after the yyless() call.
+  */
+ 
+ /* Return all but the first 'n' matched characters back to the input stream. */
+ 
+ #define yyless(n) \
+ 	do \
+ 		{ \
+ 		/* Undo effects of setting up yytext. */ \
+ 		*yy_cp = yy_hold_char; \
+ 		YY_RESTORE_YY_MORE_OFFSET \
+ 		yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
+ 		YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ 		} \
+ 	while ( 0 )
+ 
+ #define unput(c) yyunput( c, yytext_ptr )
+ 
+ /* The following is because we cannot portably get our hands on size_t
+  * (without autoconf's help, which isn't available because we want
+  * flex-generated scanners to compile on their own).
+  */
+ typedef unsigned int yy_size_t;
+ 
+ 
+ struct yy_buffer_state
+ 	{
+ 	FILE *yy_input_file;
+ 
+ 	char *yy_ch_buf;		/* input buffer */
+ 	char *yy_buf_pos;		/* current position in input buffer */
+ 
+ 	/* Size of input buffer in bytes, not including room for EOB
+ 	 * characters.
+ 	 */
+ 	yy_size_t yy_buf_size;
+ 
+ 	/* Number of characters read into yy_ch_buf, not including EOB
+ 	 * characters.
+ 	 */
+ 	int yy_n_chars;
+ 
+ 	/* Whether we "own" the buffer - i.e., we know we created it,
+ 	 * and can realloc() it to grow it, and should free() it to
+ 	 * delete it.
+ 	 */
+ 	int yy_is_our_buffer;
+ 
+ 	/* Whether this is an "interactive" input source; if so, and
+ 	 * if we're using stdio for input, then we want to use getc()
+ 	 * instead of fread(), to make sure we stop fetching input after
+ 	 * each newline.
+ 	 */
+ 	int yy_is_interactive;
+ 
+ 	/* Whether we're considered to be at the beginning of a line.
+ 	 * If so, '^' rules will be active on the next match, otherwise
+ 	 * not.
+ 	 */
+ 	int yy_at_bol;
+ 
+ 	/* Whether to try to fill the input buffer when we reach the
+ 	 * end of it.
+ 	 */
+ 	int yy_fill_buffer;
+ 
+ 	int yy_buffer_status;
+ #define YY_BUFFER_NEW 0
+ #define YY_BUFFER_NORMAL 1
+ 	/* When an EOF's been seen but there's still some text to process
+ 	 * then we mark the buffer as YY_EOF_PENDING, to indicate that we
+ 	 * shouldn't try reading from the input source any more.  We might
+ 	 * still have a bunch of tokens to match, though, because of
+ 	 * possible backing-up.
+ 	 *
+ 	 * When we actually see the EOF, we change the status to "new"
+ 	 * (via yyrestart()), so that the user can continue scanning by
+ 	 * just pointing yyin at a new input file.
+ 	 */
+ #define YY_BUFFER_EOF_PENDING 2
+ 	};
+ 
+ static YY_BUFFER_STATE yy_current_buffer = 0;
+ 
+ /* We provide macros for accessing buffer states in case in the
+  * future we want to put the buffer states in a more general
+  * "scanner state".
+  */
+ #define YY_CURRENT_BUFFER yy_current_buffer
+ 
+ 
+ /* yy_hold_char holds the character lost when yytext is formed. */
+ static char yy_hold_char;
+ 
+ static int yy_n_chars;		/* number of characters read into yy_ch_buf */
+ 
+ 
+ int yyleng;
+ 
+ /* Points to current character in buffer. */
+ static char *yy_c_buf_p = (char *) 0;
+ static int yy_init = 1;		/* whether we need to initialize */
+ static int yy_start = 0;	/* start state number */
+ 
+ /* Flag which is used to allow yywrap()'s to do buffer switches
+  * instead of setting up a fresh yyin.  A bit of a hack ...
+  */
+ static int yy_did_buffer_switch_on_eof;
+ 
+ void yyrestart YY_PROTO(( FILE *input_file ));
+ 
+ void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
+ void yy_load_buffer_state YY_PROTO(( void ));
+ YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
+ void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+ void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
+ void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
+ #define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+ 
+ YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
+ YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
+ YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+ 
+ static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
+ static inline void *yy_flex_realloc YY_PROTO(( void *, yy_size_t ));
+ static void yy_flex_free YY_PROTO(( void * ));
+ 
+ #define yy_new_buffer yy_create_buffer
+ 
+ #define yy_set_interactive(is_interactive) \
+ 	{ \
+ 	if ( ! yy_current_buffer ) \
+ 		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ 	yy_current_buffer->yy_is_interactive = is_interactive; \
+ 	}
+ 
+ #define yy_set_bol(at_bol) \
+ 	{ \
+ 	if ( ! yy_current_buffer ) \
+ 		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
+ 	yy_current_buffer->yy_at_bol = at_bol; \
+ 	}
+ 
+ #define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+ 
+ 
+ #define YY_USES_REJECT
+ 
+ #define yywrap() 1
+ #define YY_SKIP_YYWRAP
+ typedef unsigned char YY_CHAR;
+ FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+ typedef int yy_state_type;
+ extern int yylineno;
+ int yylineno = 1;
+ extern char *yytext;
+ #define yytext_ptr yytext
+ 
+ static yy_state_type yy_get_previous_state YY_PROTO(( void ));
+ static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
+ static int yy_get_next_buffer YY_PROTO(( void ));
+ static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+ 
+ /* Done after the current pattern has been matched and before the
+  * corresponding action - sets up yytext.
+  */
+ #define YY_DO_BEFORE_ACTION \
+ 	yytext_ptr = yy_bp; \
+ 	yyleng = (int) (yy_cp - yy_bp); \
+ 	yy_hold_char = *yy_cp; \
+ 	*yy_cp = '\0'; \
+ 	yy_c_buf_p = yy_cp;
+ 
+ #define YY_NUM_RULES 89
+ #define YY_END_OF_BUFFER 90
+ static yyconst short int yy_acclist[266] =
+     {   0,
+        90,   89,   88,   89,   89,   89,   89,   89,   25,   89,
+        21,   89,   22,   89,   26,   89,   83,   89,   83,   89,
+         3,   89,    4,   89,    9,   89,   19,   89,   11,   89,
+        87,   89,   87,   89,   87,   89,   87,   89,   87,   89,
+        87,   89,   87,   89,   87,   89,   87,   89,   87,   89,
+        87,   89,   87,   89,   87,   89,   87,   89,   87,   89,
+        87,   89,   87,   89,   87,   89,   81,   86,    1,    2,
+        32,   23,   83,   24,   84,   36,   13,   17,   75,   74,
+        73,   82,   15,   37,   78,   77,   76,   87,   87,   87,
+        72,   87,   87,   87,   87,   87,   20,   87,   87,   87,
+ 
+        87,   87,   16,   87,   12,   87,   61,   87,   14,   87,
+        10,   87,   87,   87,   87,   18,   87,   87,   87,    7,
+        87,   34,   87,   87,   87,   87,   87,   87,   87,   87,
+        87,   87,   87,   87,   87,   87,   87,   85,   29,   87,
+        33,   87,   87,   87,   40,   87,   87,   65,   87,   87,
+        87,   87,   87,   59,   87,   87,   87,   31,   87,   30,
+        87,   27,   87,   28,   87,   39,   87,    8,   87,   87,
+        87,   60,   87,   87,   87,   87,   45,   87,   87,   87,
+        87,   87,   70,   87,   87,   87,   87,   35,   87,   38,
+        87,   80,   87,   51,   87,   62,   87,   87,   68,   87,
+ 
+        87,   87,   58,   87,   79,   87,   87,   50,   87,   42,
+        87,   43,   87,   87,   87,   47,   87,   55,   87,   46,
+        87,   87,   87,   41,   87,    5,   87,   48,   87,   87,
+        49,   87,   63,   87,    6,   87,   87,   87,   53,   87,
+        87,   87,   56,   87,   87,   71,   87,   52,   87,   54,
+        87,   64,   87,   87,   57,   87,   87,   67,   87,   44,
+        87,   69,   87,   66,   87
+     } ;
+ 
+ static yyconst short int yy_accept[189] =
+     {   0,
+         1,    1,    1,    2,    3,    5,    6,    7,    8,    9,
+        11,   13,   15,   17,   19,   21,   23,   25,   27,   29,
+        31,   33,   35,   37,   39,   41,   43,   45,   47,   49,
+        51,   53,   55,   57,   59,   61,   63,   65,   67,   68,
+        68,   69,   69,   70,   70,   71,   72,   73,   74,   75,
+        76,   76,   77,   78,   79,   80,   81,   82,   83,   84,
+        85,   86,   87,   88,   89,   90,   91,   93,   94,   95,
+        96,   97,   99,  100,  101,  102,  103,  105,  107,  109,
+       111,  113,  114,  115,  116,  118,  119,  120,  122,  124,
+       125,  126,  127,  128,  129,  130,  131,  132,  133,  134,
+ 
+       135,  136,  137,  138,  139,  141,  143,  144,  145,  147,
+       148,  150,  151,  152,  153,  154,  156,  157,  158,  160,
+       162,  164,  166,  168,  170,  171,  172,  174,  175,  176,
+       177,  179,  180,  181,  182,  183,  185,  186,  187,  188,
+       190,  192,  194,  196,  198,  199,  201,  202,  203,  205,
+       207,  208,  210,  212,  214,  215,  216,  218,  220,  222,
+       223,  224,  226,  228,  230,  231,  233,  235,  237,  238,
+       239,  241,  242,  243,  245,  246,  248,  250,  252,  254,
+       255,  257,  258,  260,  262,  264,  266,  266
+     } ;
+ 
+ static yyconst int yy_ec[256] =
+     {   0,
+         1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
+         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    2,    4,    5,    6,    1,    1,    1,    1,    7,
+         8,    9,   10,    1,   11,    1,   12,   13,   14,   15,
+        14,   14,   14,   14,   14,   14,   14,   16,   17,   18,
+        19,   20,    1,    1,   21,   22,   23,   24,   25,   26,
+        27,   28,   29,   30,   31,   32,   33,   34,   35,   36,
+        37,   38,   39,   40,   41,   42,   43,   44,   30,   30,
+         1,    1,    1,    1,   45,    1,   46,   46,   47,   48,
+ 
+        46,   46,   30,   30,   30,   30,   30,   30,   30,   30,
+        30,   30,   30,   30,   49,   30,   30,   30,   30,   50,
+        30,   30,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+ 
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1
+     } ;
+ 
+ static yyconst int yy_meta[51] =
+     {   0,
+         1,    1,    2,    1,    1,    1,    1,    1,    1,    1,
+         3,    1,    4,    4,    4,    1,    1,    1,    1,    1,
+         4,    4,    4,    4,    4,    4,    3,    3,    3,    3,
+         3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
+         3,    3,    3,    3,    3,    4,    4,    4,    3,    3
+     } ;
+ 
+ static yyconst short int yy_base[193] =
+     {   0,
+         0,    0,  228,  229,  229,  208,  221,  222,  216,  211,
+        41,   46,  229,   49,   52,  229,  229,   53,  203,   33,
+        36,    0,  183,   36,   51,   54,   44,  194,   51,   58,
+        61,   70,   65,   72,   73,   82,  191,  183,  229,  212,
+       229,  213,  229,  207,  206,  229,  229,  100,  229,  104,
+         0,  229,  229,  229,  229,  229,  229,  229,  229,  229,
+       229,  229,  229,    0,  174,  188,    0,  176,   88,  171,
+       185,    0,  179,  175,  168,  180,  164,    0,    0,    0,
+         0,   93,  169,  178,  174,  164,  173,    0,    0,  173,
+       174,  156,   88,   94,  160,  162,  172,  171,  169,  149,
+ 
+       166,  159,  149,    0,    0,    0,  150,  149,  169,  158,
+       153,  141,  141,  136,  153,    0,  143,  144,    0,    0,
+         0,    0,  160,    0,  136,  142,    0,  131,  130,  138,
+       154,  128,  142,  143,  129,    0,  139,  132,  130,    0,
+       146,    0,    0,    0,  134,    0,  134,  137,    0,    0,
+       122,    0,  141,    0,  117,  116,    0,    0,  138,  129,
+       122,  121,    0,  120,  108,    0,    0,    0,   94,  108,
+         0,   91,   95,    0,   87,    0,    0,    0,    0,   81,
+         0,   53,    0,    0,    0,    0,  229,  137,  141,  145,
+       147,   64
+ 
+     } ;
+ 
+ static yyconst short int yy_def[193] =
+     {   0,
+       187,    1,  187,  187,  187,  187,  188,  189,  190,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  187,  188,
+       187,  189,  187,  190,  190,  187,  187,  187,  187,  187,
+       192,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+ 
+       191,  191,  191,  192,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,  191,  191,  191,  191,
+       191,  191,  191,  191,  191,  191,    0,  187,  187,  187,
+       187,  187
+ 
+     } ;
+ 
+ static yyconst short int yy_nxt[280] =
+     {   0,
+         4,    5,    5,    6,    7,    8,    9,    4,   10,   11,
+        12,   13,   14,   15,   15,   16,   17,   18,   19,   20,
+        21,   22,   23,   24,   25,   26,   27,   22,   28,   22,
+        22,   29,   30,   31,   32,   33,   22,   34,   35,   36,
+        22,   22,   37,   38,    4,   22,   22,   22,   22,   22,
+        47,   59,   60,   48,   48,   48,   49,   65,   50,   50,
+        50,   48,   48,   48,   48,   48,   48,  104,   77,   66,
+        52,   53,   54,   68,   74,   80,   69,  186,   82,   61,
+        62,   63,   70,   78,   71,   85,   83,   72,   75,   86,
+        81,   76,   84,   91,   73,   87,   93,   96,   51,   55,
+ 
+        56,   57,   99,   88,  185,   92,   94,   89,   97,   95,
+       128,   90,   48,   48,   48,   98,   50,   50,   50,  100,
+       108,  117,  101,  109,  118,  130,  184,  129,  183,  182,
+       181,  180,  179,  131,  178,  177,  119,   40,   40,   40,
+        40,   42,   42,   42,   42,   44,  176,   44,   44,   64,
+        64,  175,  174,  173,  172,  171,  170,  169,  168,  167,
+       166,  165,  164,  163,  162,  161,  160,  159,  158,  157,
+       156,  155,  154,  153,  152,  151,  150,  149,  148,  147,
+       146,  145,  144,  143,  142,  141,  140,  139,  138,  137,
+       136,  135,  134,  133,  132,  127,  126,  125,  124,  123,
+ 
+       122,  121,  120,  116,  115,  114,  113,  112,  111,  110,
+       107,  106,  105,   45,   45,   43,   41,  103,  102,   79,
+        67,   58,   46,   45,   43,   41,   39,  187,    3,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187
+     } ;
+ 
+ static yyconst short int yy_chk[280] =
+     {   0,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
+        11,   20,   20,   11,   11,   11,   12,   21,   12,   12,
+        12,   14,   14,   14,   15,   15,   15,  192,   27,   21,
+        18,   18,   18,   24,   26,   29,   24,  182,   30,   20,
+        20,   20,   25,   27,   25,   31,   30,   25,   26,   31,
+        29,   26,   30,   33,   25,   32,   34,   35,   14,   18,
+ 
+        18,   18,   36,   32,  180,   33,   34,   32,   35,   34,
+        93,   32,   48,   48,   48,   35,   50,   50,   50,   36,
+        69,   82,   36,   69,   82,   94,  175,   93,  173,  172,
+       170,  169,  165,   94,  164,  162,   82,  188,  188,  188,
+       188,  189,  189,  189,  189,  190,  161,  190,  190,  191,
+       191,  160,  159,  156,  155,  153,  151,  148,  147,  145,
+       141,  139,  138,  137,  135,  134,  133,  132,  131,  130,
+       129,  128,  126,  125,  123,  118,  117,  115,  114,  113,
+       112,  111,  110,  109,  108,  107,  103,  102,  101,  100,
+        99,   98,   97,   96,   95,   92,   91,   90,   87,   86,
+ 
+        85,   84,   83,   77,   76,   75,   74,   73,   71,   70,
+        68,   66,   65,   45,   44,   42,   40,   38,   37,   28,
+        23,   19,   10,    9,    8,    7,    6,    3,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187,  187,
+       187,  187,  187,  187,  187,  187,  187,  187,  187
+     } ;
+ 
+ static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
+ static char *yy_full_match;
+ static int yy_lp;
+ #define REJECT \
+ { \
+ *yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
+ yy_cp = yy_full_match; /* restore poss. backed-over text */ \
+ ++yy_lp; \
+ goto find_rule; \
+ }
+ #define yymore() yymore_used_but_not_detected
+ #define YY_MORE_ADJ 0
+ #define YY_RESTORE_YY_MORE_OFFSET
+ char *yytext;
+ #line 1 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ #define INITIAL 0
+ /*===-- Lexer.l - Scanner for Stacker language -----------------*- C++ -*--===//
+ // 
+ //                     The LLVM Compiler Infrastructure
+ //
+ // This file was developed by Reid Spencer and donated to the LLVM research 
+ // group and is distributed under the University of Illinois Open Source 
+ // License. See LICENSE.TXT for details.
+ // 
+ //===----------------------------------------------------------------------===//
+ //
+ //  This file implements the flex scanner for Stacker languages files.
+ //
+ //===----------------------------------------------------------------------===*/
+ #define YY_NEVER_INTERACTIVE 1
+ #line 29 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ 
+ #include "StackerCompiler.h"
+ #include "StackerParser.h"
+ 
+ /* Conversion of text ints to binary */
+ static int64_t IntToVal(const char *Buffer) {
+   int64_t Result = 0;
+   for (; *Buffer; Buffer++) {
+     int64_t OldRes = Result;
+     Result *= 10;
+     Result += *Buffer-'0';
+     if (Result < OldRes)   // Uh, oh, overflow detected!!!
+       StackerCompiler::ThrowException("constant bigger than 64 bits detected!");
+   }
+   return Result;
+ }
+ 
+ /* Conversion of text hexadecimal ints to binary */
+ static int64_t HexIntToVal(const char *Buffer) {
+   int64_t Result = 0;
+   for (; *Buffer; ++Buffer) {
+     int64_t OldRes = Result;
+     Result *= 16;
+     char C = *Buffer;
+     if (C >= '0' && C <= '9')
+       Result += C-'0';
+     else if (C >= 'A' && C <= 'F')
+       Result += C-'A'+10;
+     else if (C >= 'a' && C <= 'f')
+       Result += C-'a'+10;
+ 
+     if (Result < OldRes)   // Uh, oh, overflow detected!!!
+       StackerCompiler::ThrowException("constant bigger than 64 bits detected!");
+   }
+   return Result;
+ }
+ 
+ #define YY_NEVER_INTERACTIVE 1
+ /* Comments start with a ; and go till end of line */
+ /* You can also embed them in ( ... ) */
+ /* We ignore white space */
+ /* jdentifiers start with a % sign */
+ /* Strings can contain any character except " and \ */
+ /* Positive and negative integer constants*/
+ /* Special Characters - name them to avoid flex confusion */
+ #line 608 "Lexer.cpp"
+ 
+ /* Macros after this point can all be overridden by user definitions in
+  * section 1.
+  */
+ 
+ #ifndef YY_SKIP_YYWRAP
+ #ifdef __cplusplus
+ extern "C" int yywrap YY_PROTO(( void ));
+ #else
+ extern int yywrap YY_PROTO(( void ));
+ #endif
+ #endif
+ 
+ #ifndef YY_NO_UNPUT
+ static inline void yyunput YY_PROTO(( int c, char *buf_ptr ));
+ #endif
+ 
+ #ifndef yytext_ptr
+ static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+ #endif
+ 
+ #ifdef YY_NEED_STRLEN
+ static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+ #endif
+ 
+ #ifndef YY_NO_INPUT
+ #ifdef __cplusplus
+ static int yyinput YY_PROTO(( void ));
+ #else
+ static int input YY_PROTO(( void ));
+ #endif
+ #endif
+ 
+ #if YY_STACK_USED
+ static int yy_start_stack_ptr = 0;
+ static int yy_start_stack_depth = 0;
+ static int *yy_start_stack = 0;
+ #ifndef YY_NO_PUSH_STATE
+ static void yy_push_state YY_PROTO(( int new_state ));
+ #endif
+ #ifndef YY_NO_POP_STATE
+ static void yy_pop_state YY_PROTO(( void ));
+ #endif
+ #ifndef YY_NO_TOP_STATE
+ static int yy_top_state YY_PROTO(( void ));
+ #endif
+ 
+ #else
+ #define YY_NO_PUSH_STATE 1
+ #define YY_NO_POP_STATE 1
+ #define YY_NO_TOP_STATE 1
+ #endif
+ 
+ #ifdef YY_MALLOC_DECL
+ YY_MALLOC_DECL
+ #else
+ #if __STDC__
+ #ifndef __cplusplus
+ #include <stdlib.h>
+ #endif
+ #else
+ /* Just try to get by without declaring the routines.  This will fail
+  * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
+  * or sizeof(void*) != sizeof(int).
+  */
+ #endif
+ #endif
+ 
+ /* Amount of stuff to slurp up with each read. */
+ #ifndef YY_READ_BUF_SIZE
+ #define YY_READ_BUF_SIZE 8192
+ #endif
+ 
+ /* Copy whatever the last rule matched to the standard output. */
+ 
+ #ifndef ECHO
+ /* This used to be an fputs(), but since the string might contain NUL's,
+  * we now use fwrite().
+  */
+ #define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+ #endif
+ 
+ /* Gets input and stuffs it into "buf".  number of characters read, or YY_NULL,
+  * is returned in "result".
+  */
+ #ifndef YY_INPUT
+ #define YY_INPUT(buf,result,max_size) \
+ 	if ( yy_current_buffer->yy_is_interactive ) \
+ 		{ \
+ 		int c = '*', n; \
+ 		for ( n = 0; n < max_size && \
+ 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ 			buf[n] = (char) c; \
+ 		if ( c == '\n' ) \
+ 			buf[n++] = (char) c; \
+ 		if ( c == EOF && ferror( yyin ) ) \
+ 			YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ 		result = n; \
+ 		} \
+ 	else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
+ 		  && ferror( yyin ) ) \
+ 		YY_FATAL_ERROR( "input in flex scanner failed" );
+ #endif
+ 
+ /* No semi-colon after return; correct usage is to write "yyterminate();" -
+  * we don't want an extra ';' after the "return" because that will cause
+  * some compilers to complain about unreachable statements.
+  */
+ #ifndef yyterminate
+ #define yyterminate() return YY_NULL
+ #endif
+ 
+ /* Number of entries by which start-condition stack grows. */
+ #ifndef YY_START_STACK_INCR
+ #define YY_START_STACK_INCR 25
+ #endif
+ 
+ /* Report a fatal error. */
+ #ifndef YY_FATAL_ERROR
+ #define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
+ #endif
+ 
+ /* Default declaration of generated scanner - a define so the user can
+  * easily add parameters.
+  */
+ #ifndef YY_DECL
+ #define YY_DECL int yylex YY_PROTO(( void ))
+ #endif
+ 
+ /* Code executed at the beginning of each rule, after yytext and yyleng
+  * have been set up.
+  */
+ #ifndef YY_USER_ACTION
+ #define YY_USER_ACTION
+ #endif
+ 
+ /* Code executed at the end of each rule. */
+ #ifndef YY_BREAK
+ #define YY_BREAK break;
+ #endif
+ 
+ #define YY_RULE_SETUP \
+ 	YY_USER_ACTION
+ 
+ YY_DECL
+ 	{
+ 	register yy_state_type yy_current_state;
+ 	register char *yy_cp = NULL, *yy_bp = NULL;
+ 	register int yy_act;
+ 
+ #line 112 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ 
+ 
+ #line 762 "Lexer.cpp"
+ 
+ 	if ( yy_init )
+ 		{
+ 		yy_init = 0;
+ 
+ #ifdef YY_USER_INIT
+ 		YY_USER_INIT;
+ #endif
+ 
+ 		if ( ! yy_start )
+ 			yy_start = 1;	/* first start state */
+ 
+ 		if ( ! yyin )
+ 			yyin = stdin;
+ 
+ 		if ( ! yyout )
+ 			yyout = stdout;
+ 
+ 		if ( ! yy_current_buffer )
+ 			yy_current_buffer =
+ 				yy_create_buffer( yyin, YY_BUF_SIZE );
+ 
+ 		yy_load_buffer_state();
+ 		}
+ 
+ 	while ( 1 )		/* loops until end-of-file is reached */
+ 		{
+ 		yy_cp = yy_c_buf_p;
+ 
+ 		/* Support of yytext. */
+ 		*yy_cp = yy_hold_char;
+ 
+ 		/* yy_bp points to the position in yy_ch_buf of the start of
+ 		 * the current run.
+ 		 */
+ 		yy_bp = yy_cp;
+ 
+ 		yy_current_state = yy_start;
+ 		yy_state_ptr = yy_state_buf;
+ 		*yy_state_ptr++ = yy_current_state;
+ yy_match:
+ 		do
+ 			{
+ 			register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
+ 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ 				{
+ 				yy_current_state = (int) yy_def[yy_current_state];
+ 				if ( yy_current_state >= 188 )
+ 					yy_c = yy_meta[(unsigned int) yy_c];
+ 				}
+ 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ 			*yy_state_ptr++ = yy_current_state;
+ 			++yy_cp;
+ 			}
+ 		while ( yy_current_state != 187 );
+ 
+ yy_find_action:
+ 		yy_current_state = *--yy_state_ptr;
+ 		yy_lp = yy_accept[yy_current_state];
+ find_rule: /* we branch to this label when backing up */
+ 		for ( ; ; ) /* until we find what rule we matched */
+ 			{
+ 			if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
+ 				{
+ 				yy_act = yy_acclist[yy_lp];
+ 					{
+ 					yy_full_match = yy_cp;
+ 					break;
+ 					}
+ 				}
+ 			--yy_cp;
+ 			yy_current_state = *--yy_state_ptr;
+ 			yy_lp = yy_accept[yy_current_state];
+ 			}
+ 
+ 		YY_DO_BEFORE_ACTION;
+ 
+ 		if ( yy_act != YY_END_OF_BUFFER )
+ 			{
+ 			int yyl;
+ 			for ( yyl = 0; yyl < yyleng; ++yyl )
+ 				if ( yytext[yyl] == '\n' )
+ 					++yylineno;
+ 			}
+ 
+ do_action:	/* This label is used only to access EOF actions. */
+ 
+ 
+ 		switch ( yy_act )
+ 	{ /* beginning of action switch */
+ case 1:
+ *yy_cp = yy_hold_char; /* undo effects of setting up yytext */
+ yy_c_buf_p = yy_cp -= 1;
+ YY_DO_BEFORE_ACTION; /* set up yytext again */
+ YY_RULE_SETUP
+ #line 114 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { /* Ignore comments */ }
+ 	YY_BREAK
+ case 2:
+ YY_RULE_SETUP
+ #line 115 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { /* Ignore comments */ }
+ 	YY_BREAK
+ case 3:
+ YY_RULE_SETUP
+ #line 117 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return COLON; }
+ 	YY_BREAK
+ case 4:
+ YY_RULE_SETUP
+ #line 118 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return SEMI; }
+ 	YY_BREAK
+ case 5:
+ YY_RULE_SETUP
+ #line 120 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return TRUETOK; }
+ 	YY_BREAK
+ case 6:
+ YY_RULE_SETUP
+ #line 121 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return FALSETOK; }
+ 	YY_BREAK
+ case 7:
+ YY_RULE_SETUP
+ #line 122 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return TRUETOK; }
+ 	YY_BREAK
+ case 8:
+ YY_RULE_SETUP
+ #line 123 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return FALSETOK; }
+ 	YY_BREAK
+ case 9:
+ YY_RULE_SETUP
+ #line 124 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return LESS; }
+ 	YY_BREAK
+ case 10:
+ YY_RULE_SETUP
+ #line 125 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return LESS; }
+ 	YY_BREAK
+ case 11:
+ YY_RULE_SETUP
+ #line 126 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MORE; }
+ 	YY_BREAK
+ case 12:
+ YY_RULE_SETUP
+ #line 127 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MORE; }
+ 	YY_BREAK
+ case 13:
+ YY_RULE_SETUP
+ #line 128 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return LESS_EQUAL; }
+ 	YY_BREAK
+ case 14:
+ YY_RULE_SETUP
+ #line 129 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return LESS_EQUAL; }
+ 	YY_BREAK
+ case 15:
+ YY_RULE_SETUP
+ #line 130 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MORE_EQUAL; }
+ 	YY_BREAK
+ case 16:
+ YY_RULE_SETUP
+ #line 131 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MORE_EQUAL; }
+ 	YY_BREAK
+ case 17:
+ YY_RULE_SETUP
+ #line 132 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return NOT_EQUAL; }
+ 	YY_BREAK
+ case 18:
+ YY_RULE_SETUP
+ #line 133 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return NOT_EQUAL; }
+ 	YY_BREAK
+ case 19:
+ YY_RULE_SETUP
+ #line 134 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return EQUAL; }
+ 	YY_BREAK
+ case 20:
+ YY_RULE_SETUP
+ #line 135 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return EQUAL; }
+ 	YY_BREAK
+ case 21:
+ YY_RULE_SETUP
+ #line 137 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return PLUS; }
+ 	YY_BREAK
+ case 22:
+ YY_RULE_SETUP
+ #line 138 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MINUS; }
+ 	YY_BREAK
+ case 23:
+ YY_RULE_SETUP
+ #line 139 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return INCR; }
+ 	YY_BREAK
+ case 24:
+ YY_RULE_SETUP
+ #line 140 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return DECR; }
+ 	YY_BREAK
+ case 25:
+ YY_RULE_SETUP
+ #line 141 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MULT; }
+ 	YY_BREAK
+ case 26:
+ YY_RULE_SETUP
+ #line 142 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return DIV; }
+ 	YY_BREAK
+ case 27:
+ YY_RULE_SETUP
+ #line 143 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MODULUS; }
+ 	YY_BREAK
+ case 28:
+ YY_RULE_SETUP
+ #line 144 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return NEGATE; }
+ 	YY_BREAK
+ case 29:
+ YY_RULE_SETUP
+ #line 145 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return ABS; }
+ 	YY_BREAK
+ case 30:
+ YY_RULE_SETUP
+ #line 146 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MIN; }
+ 	YY_BREAK
+ case 31:
+ YY_RULE_SETUP
+ #line 147 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MAX; }
+ 	YY_BREAK
+ case 32:
+ YY_RULE_SETUP
+ #line 148 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return STAR_SLASH; }
+ 	YY_BREAK
+ case 33:
+ YY_RULE_SETUP
+ #line 150 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return AND; }
+ 	YY_BREAK
+ case 34:
+ YY_RULE_SETUP
+ #line 151 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return OR; }
+ 	YY_BREAK
+ case 35:
+ YY_RULE_SETUP
+ #line 152 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return XOR; }
+ 	YY_BREAK
+ case 36:
+ YY_RULE_SETUP
+ #line 153 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return LSHIFT; }
+ 	YY_BREAK
+ case 37:
+ YY_RULE_SETUP
+ #line 154 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return RSHIFT; }
+ 	YY_BREAK
+ case 38:
+ YY_RULE_SETUP
+ #line 156 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return DROP; }
+ 	YY_BREAK
+ case 39:
+ YY_RULE_SETUP
+ #line 157 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return NIP; }
+ 	YY_BREAK
+ case 40:
+ YY_RULE_SETUP
+ #line 158 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return DUP; }
+ 	YY_BREAK
+ case 41:
+ YY_RULE_SETUP
+ #line 159 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return SWAP; }
+ 	YY_BREAK
+ case 42:
+ YY_RULE_SETUP
+ #line 160 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return OVER; }
+ 	YY_BREAK
+ case 43:
+ YY_RULE_SETUP
+ #line 161 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return PICK; }
+ 	YY_BREAK
+ case 44:
+ YY_RULE_SETUP
+ #line 162 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return SELECT; }
+ 	YY_BREAK
+ case 45:
+ YY_RULE_SETUP
+ #line 163 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return ROT; }
+ 	YY_BREAK
+ case 46:
+ YY_RULE_SETUP
+ #line 164 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return RROT; }
+ 	YY_BREAK
+ case 47:
+ YY_RULE_SETUP
+ #line 165 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return ROLL; }
+ 	YY_BREAK
+ case 48:
+ YY_RULE_SETUP
+ #line 166 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return TUCK; }
+ 	YY_BREAK
+ case 49:
+ YY_RULE_SETUP
+ #line 167 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return DROP2; }
+ 	YY_BREAK
+ case 50:
+ YY_RULE_SETUP
+ #line 168 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return NIP2; }
+ 	YY_BREAK
+ case 51:
+ YY_RULE_SETUP
+ #line 169 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return DUP2; }
+ 	YY_BREAK
+ case 52:
+ YY_RULE_SETUP
+ #line 170 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return SWAP2; }
+ 	YY_BREAK
+ case 53:
+ YY_RULE_SETUP
+ #line 171 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return OVER2; }
+ 	YY_BREAK
+ case 54:
+ YY_RULE_SETUP
+ #line 172 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return TUCK2; }
+ 	YY_BREAK
+ case 55:
+ YY_RULE_SETUP
+ #line 173 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return ROT2; }
+ 	YY_BREAK
+ case 56:
+ YY_RULE_SETUP
+ #line 174 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return RROT2; }
+ 	YY_BREAK
+ case 57:
+ YY_RULE_SETUP
+ #line 176 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MALLOC; }
+ 	YY_BREAK
+ case 58:
+ YY_RULE_SETUP
+ #line 177 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return FREE; }
+ 	YY_BREAK
+ case 59:
+ YY_RULE_SETUP
+ #line 178 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return GET; }
+ 	YY_BREAK
+ case 60:
+ YY_RULE_SETUP
+ #line 179 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return PUT; }
+ 	YY_BREAK
+ case 61:
+ YY_RULE_SETUP
+ #line 181 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return IF; }
+ 	YY_BREAK
+ case 62:
+ YY_RULE_SETUP
+ #line 182 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return ELSE; }
+ 	YY_BREAK
+ case 63:
+ YY_RULE_SETUP
+ #line 183 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return ENDIF; }
+ 	YY_BREAK
+ case 64:
+ YY_RULE_SETUP
+ #line 184 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return WHILE; }
+ 	YY_BREAK
+ case 65:
+ YY_RULE_SETUP
+ #line 185 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return END; }
+ 	YY_BREAK
+ case 66:
+ YY_RULE_SETUP
+ #line 187 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return RECURSE; }
+ 	YY_BREAK
+ case 67:
+ YY_RULE_SETUP
+ #line 188 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return RETURN; }
+ 	YY_BREAK
+ case 68:
+ YY_RULE_SETUP
+ #line 189 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return EXIT; }
+ 	YY_BREAK
+ case 69:
+ YY_RULE_SETUP
+ #line 190 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return FORWARD; }
+ 	YY_BREAK
+ case 70:
+ YY_RULE_SETUP
+ #line 191 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return TAB; }
+ 	YY_BREAK
+ case 71:
+ YY_RULE_SETUP
+ #line 192 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return SPACE; }
+ 	YY_BREAK
+ case 72:
+ YY_RULE_SETUP
+ #line 193 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return CR; }
+ 	YY_BREAK
+ case 73:
+ YY_RULE_SETUP
+ #line 195 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return IN_STR; }
+ 	YY_BREAK
+ case 74:
+ YY_RULE_SETUP
+ #line 196 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return IN_NUM; }
+ 	YY_BREAK
+ case 75:
+ YY_RULE_SETUP
+ #line 197 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return IN_CHAR; }
+ 	YY_BREAK
+ case 76:
+ YY_RULE_SETUP
+ #line 199 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return OUT_STR; }
+ 	YY_BREAK
+ case 77:
+ YY_RULE_SETUP
+ #line 200 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return OUT_NUM; }
+ 	YY_BREAK
+ case 78:
+ YY_RULE_SETUP
+ #line 201 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return OUT_CHAR; }
+ 	YY_BREAK
+ case 79:
+ YY_RULE_SETUP
+ #line 203 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return MAIN; }
+ 	YY_BREAK
+ case 80:
+ YY_RULE_SETUP
+ #line 205 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { return DUMP; }
+ 	YY_BREAK
+ case 81:
+ YY_RULE_SETUP
+ #line 207 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { StackerCompiler::ThrowException(
+ 		  "You probably meant to use a <> instead of !=" ); }
+ 	YY_BREAK
+ case 82:
+ YY_RULE_SETUP
+ #line 210 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { StackerCompiler::ThrowException(
+ 		  "You probably meant to use a single = .. this isn't C"); }
+ 	YY_BREAK
+ case 83:
+ YY_RULE_SETUP
+ #line 213 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { Stackerlval.IntegerVal = IntToVal(yytext); return INTEGER; }
+ 	YY_BREAK
+ case 84:
+ YY_RULE_SETUP
+ #line 214 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { uint64_t Val = IntToVal(yytext+1);
+ 		  // +1:  we have bigger negative range
+ 		  if (Val > (uint64_t)INT64_MAX+1)
+ 		    StackerCompiler::ThrowException(
+ 		    "Constant too large for signed 64 bits!");
+                   Stackerlval.IntegerVal = -Val; 
+ 		  return INTEGER; 
+                 }
+ 	YY_BREAK
+ case 85:
+ YY_RULE_SETUP
+ #line 222 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { Stackerlval.IntegerVal = HexIntToVal(yytext+3); 
+                    return INTEGER;
+                 }
+ 	YY_BREAK
+ case 86:
+ YY_RULE_SETUP
+ #line 226 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { yytext[strlen(yytext)-1] = 0;           // nuke end quote
+ 		  Stackerlval.StringVal = strdup(yytext+1);  // Nuke start quote
+ 		  return STRING;
+                 }
+ 	YY_BREAK
+ case 87:
+ YY_RULE_SETUP
+ #line 231 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { Stackerlval.StringVal = strdup(yytext); return IDENTIFIER; }
+ 	YY_BREAK
+ case 88:
+ YY_RULE_SETUP
+ #line 233 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ { /* Ignore whitespace */ }
+ 	YY_BREAK
+ case 89:
+ YY_RULE_SETUP
+ #line 234 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ YY_FATAL_ERROR( "flex scanner jammed" );
+ 	YY_BREAK
+ #line 1315 "Lexer.cpp"
+ 			case YY_STATE_EOF(INITIAL):
+ 				yyterminate();
+ 
+ 	case YY_END_OF_BUFFER:
+ 		{
+ 		/* Amount of text matched not including the EOB char. */
+ 		int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+ 
+ 		/* Undo the effects of YY_DO_BEFORE_ACTION. */
+ 		*yy_cp = yy_hold_char;
+ 		YY_RESTORE_YY_MORE_OFFSET
+ 
+ 		if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ 			{
+ 			/* We're scanning a new file or input source.  It's
+ 			 * possible that this happened because the user
+ 			 * just pointed yyin at a new source and called
+ 			 * yylex().  If so, then we have to assure
+ 			 * consistency between yy_current_buffer and our
+ 			 * globals.  Here is the right place to do so, because
+ 			 * this is the first action (other than possibly a
+ 			 * back-up) that will match for the new input source.
+ 			 */
+ 			yy_n_chars = yy_current_buffer->yy_n_chars;
+ 			yy_current_buffer->yy_input_file = yyin;
+ 			yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ 			}
+ 
+ 		/* Note that here we test for yy_c_buf_p "<=" to the position
+ 		 * of the first EOB in the buffer, since yy_c_buf_p will
+ 		 * already have been incremented past the NUL character
+ 		 * (since all states make transitions on EOB to the
+ 		 * end-of-buffer state).  Contrast this with the test
+ 		 * in input().
+ 		 */
+ 		if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ 			{ /* This was really a NUL. */
+ 			yy_state_type yy_next_state;
+ 
+ 			yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+ 
+ 			yy_current_state = yy_get_previous_state();
+ 
+ 			/* Okay, we're now positioned to make the NUL
+ 			 * transition.  We couldn't have
+ 			 * yy_get_previous_state() go ahead and do it
+ 			 * for us because it doesn't know how to deal
+ 			 * with the possibility of jamming (and we don't
+ 			 * want to build jamming into it because then it
+ 			 * will run more slowly).
+ 			 */
+ 
+ 			yy_next_state = yy_try_NUL_trans( yy_current_state );
+ 
+ 			yy_bp = yytext_ptr + YY_MORE_ADJ;
+ 
+ 			if ( yy_next_state )
+ 				{
+ 				/* Consume the NUL. */
+ 				yy_cp = ++yy_c_buf_p;
+ 				yy_current_state = yy_next_state;
+ 				goto yy_match;
+ 				}
+ 
+ 			else
+ 				{
+ 				yy_cp = yy_c_buf_p;
+ 				goto yy_find_action;
+ 				}
+ 			}
+ 
+ 		else switch ( yy_get_next_buffer() )
+ 			{
+ 			case EOB_ACT_END_OF_FILE:
+ 				{
+ 				yy_did_buffer_switch_on_eof = 0;
+ 
+ 				if ( yywrap() )
+ 					{
+ 					/* Note: because we've taken care in
+ 					 * yy_get_next_buffer() to have set up
+ 					 * yytext, we can now set up
+ 					 * yy_c_buf_p so that if some total
+ 					 * hoser (like flex itself) wants to
+ 					 * call the scanner after we return the
+ 					 * YY_NULL, it'll still work - another
+ 					 * YY_NULL will get returned.
+ 					 */
+ 					yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+ 
+ 					yy_act = YY_STATE_EOF(YY_START);
+ 					goto do_action;
+ 					}
+ 
+ 				else
+ 					{
+ 					if ( ! yy_did_buffer_switch_on_eof )
+ 						YY_NEW_FILE;
+ 					}
+ 				break;
+ 				}
+ 
+ 			case EOB_ACT_CONTINUE_SCAN:
+ 				yy_c_buf_p =
+ 					yytext_ptr + yy_amount_of_matched_text;
+ 
+ 				yy_current_state = yy_get_previous_state();
+ 
+ 				yy_cp = yy_c_buf_p;
+ 				yy_bp = yytext_ptr + YY_MORE_ADJ;
+ 				goto yy_match;
+ 
+ 			case EOB_ACT_LAST_MATCH:
+ 				yy_c_buf_p =
+ 				&yy_current_buffer->yy_ch_buf[yy_n_chars];
+ 
+ 				yy_current_state = yy_get_previous_state();
+ 
+ 				yy_cp = yy_c_buf_p;
+ 				yy_bp = yytext_ptr + YY_MORE_ADJ;
+ 				goto yy_find_action;
+ 			}
+ 		break;
+ 		}
+ 
+ 	default:
+ 		YY_FATAL_ERROR(
+ 			"fatal flex scanner internal error--no action found" );
+ 	} /* end of action switch */
+ 		} /* end of scanning one token */
+ 	} /* end of yylex */
+ 
+ 
+ /* yy_get_next_buffer - try to read in a new buffer
+  *
+  * Returns a code representing an action:
+  *	EOB_ACT_LAST_MATCH -
+  *	EOB_ACT_CONTINUE_SCAN - continue scanning from current position
+  *	EOB_ACT_END_OF_FILE - end of file
+  */
+ 
+ static int yy_get_next_buffer()
+ 	{
+ 	register char *dest = yy_current_buffer->yy_ch_buf;
+ 	register char *source = yytext_ptr;
+ 	register int number_to_move, i;
+ 	int ret_val;
+ 
+ 	if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ 		YY_FATAL_ERROR(
+ 		"fatal flex scanner internal error--end of buffer missed" );
+ 
+ 	if ( yy_current_buffer->yy_fill_buffer == 0 )
+ 		{ /* Don't try to fill the buffer, so this is an EOF. */
+ 		if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ 			{
+ 			/* We matched a single character, the EOB, so
+ 			 * treat this as a final EOF.
+ 			 */
+ 			return EOB_ACT_END_OF_FILE;
+ 			}
+ 
+ 		else
+ 			{
+ 			/* We matched some text prior to the EOB, first
+ 			 * process it.
+ 			 */
+ 			return EOB_ACT_LAST_MATCH;
+ 			}
+ 		}
+ 
+ 	/* Try to read more data. */
+ 
+ 	/* First move last chars to start of buffer. */
+ 	number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+ 
+ 	for ( i = 0; i < number_to_move; ++i )
+ 		*(dest++) = *(source++);
+ 
+ 	if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ 		/* don't do the read, it's not guaranteed to return an EOF,
+ 		 * just force an EOF
+ 		 */
+ 		yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+ 
+ 	else
+ 		{
+ 		int num_to_read =
+ 			yy_current_buffer->yy_buf_size - number_to_move - 1;
+ 
+ 		while ( num_to_read <= 0 )
+ 			{ /* Not enough room in the buffer - grow it. */
+ #ifdef YY_USES_REJECT
+ 			YY_FATAL_ERROR(
+ "input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
+ #else
+ 
+ 			/* just a shorter name for the current buffer */
+ 			YY_BUFFER_STATE b = yy_current_buffer;
+ 
+ 			int yy_c_buf_p_offset =
+ 				(int) (yy_c_buf_p - b->yy_ch_buf);
+ 
+ 			if ( b->yy_is_our_buffer )
+ 				{
+ 				int new_size = b->yy_buf_size * 2;
+ 
+ 				if ( new_size <= 0 )
+ 					b->yy_buf_size += b->yy_buf_size / 8;
+ 				else
+ 					b->yy_buf_size *= 2;
+ 
+ 				b->yy_ch_buf = (char *)
+ 					/* Include room in for 2 EOB chars. */
+ 					yy_flex_realloc( (void *) b->yy_ch_buf,
+ 							 b->yy_buf_size + 2 );
+ 				}
+ 			else
+ 				/* Can't grow it, we don't own it. */
+ 				b->yy_ch_buf = 0;
+ 
+ 			if ( ! b->yy_ch_buf )
+ 				YY_FATAL_ERROR(
+ 				"fatal error - scanner input buffer overflow" );
+ 
+ 			yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
+ 
+ 			num_to_read = yy_current_buffer->yy_buf_size -
+ 						number_to_move - 1;
+ #endif
+ 			}
+ 
+ 		if ( num_to_read > YY_READ_BUF_SIZE )
+ 			num_to_read = YY_READ_BUF_SIZE;
+ 
+ 		/* Read in more data. */
+ 		YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
+ 			yy_n_chars, num_to_read );
+ 
+ 		yy_current_buffer->yy_n_chars = yy_n_chars;
+ 		}
+ 
+ 	if ( yy_n_chars == 0 )
+ 		{
+ 		if ( number_to_move == YY_MORE_ADJ )
+ 			{
+ 			ret_val = EOB_ACT_END_OF_FILE;
+ 			yyrestart( yyin );
+ 			}
+ 
+ 		else
+ 			{
+ 			ret_val = EOB_ACT_LAST_MATCH;
+ 			yy_current_buffer->yy_buffer_status =
+ 				YY_BUFFER_EOF_PENDING;
+ 			}
+ 		}
+ 
+ 	else
+ 		ret_val = EOB_ACT_CONTINUE_SCAN;
+ 
+ 	yy_n_chars += number_to_move;
+ 	yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
+ 	yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+ 
+ 	yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+ 
+ 	return ret_val;
+ 	}
+ 
+ 
+ /* yy_get_previous_state - get the state just before the EOB char was reached */
+ 
+ static yy_state_type yy_get_previous_state()
+ 	{
+ 	register yy_state_type yy_current_state;
+ 	register char *yy_cp;
+ 
+ 	yy_current_state = yy_start;
+ 	yy_state_ptr = yy_state_buf;
+ 	*yy_state_ptr++ = yy_current_state;
+ 
+ 	for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ 		{
+ 		register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
+ 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ 			{
+ 			yy_current_state = (int) yy_def[yy_current_state];
+ 			if ( yy_current_state >= 188 )
+ 				yy_c = yy_meta[(unsigned int) yy_c];
+ 			}
+ 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ 		*yy_state_ptr++ = yy_current_state;
+ 		}
+ 
+ 	return yy_current_state;
+ 	}
+ 
+ 
+ /* yy_try_NUL_trans - try to make a transition on the NUL character
+  *
+  * synopsis
+  *	next_state = yy_try_NUL_trans( current_state );
+  */
+ 
+ #ifdef YY_USE_PROTOS
+ static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
+ #else
+ static yy_state_type yy_try_NUL_trans( yy_current_state )
+ yy_state_type yy_current_state;
+ #endif
+ 	{
+ 	register int yy_is_jam;
+ 
+ 	register YY_CHAR yy_c = 1;
+ 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
+ 		{
+ 		yy_current_state = (int) yy_def[yy_current_state];
+ 		if ( yy_current_state >= 188 )
+ 			yy_c = yy_meta[(unsigned int) yy_c];
+ 		}
+ 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
+ 	yy_is_jam = (yy_current_state == 187);
+ 	if ( ! yy_is_jam )
+ 		*yy_state_ptr++ = yy_current_state;
+ 
+ 	return yy_is_jam ? 0 : yy_current_state;
+ 	}
+ 
+ 
+ #ifndef YY_NO_UNPUT
+ #ifdef YY_USE_PROTOS
+ static inline void yyunput( int c, register char *yy_bp )
+ #else
+ static inline void yyunput( c, yy_bp )
+ int c;
+ register char *yy_bp;
+ #endif
+ 	{
+ 	register char *yy_cp = yy_c_buf_p;
+ 
+ 	/* undo effects of setting up yytext */
+ 	*yy_cp = yy_hold_char;
+ 
+ 	if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ 		{ /* need to shift things up to make room */
+ 		/* +2 for EOB chars. */
+ 		register int number_to_move = yy_n_chars + 2;
+ 		register char *dest = &yy_current_buffer->yy_ch_buf[
+ 					yy_current_buffer->yy_buf_size + 2];
+ 		register char *source =
+ 				&yy_current_buffer->yy_ch_buf[number_to_move];
+ 
+ 		while ( source > yy_current_buffer->yy_ch_buf )
+ 			*--dest = *--source;
+ 
+ 		yy_cp += (int) (dest - source);
+ 		yy_bp += (int) (dest - source);
+ 		yy_current_buffer->yy_n_chars =
+ 			yy_n_chars = yy_current_buffer->yy_buf_size;
+ 
+ 		if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ 			YY_FATAL_ERROR( "flex scanner push-back overflow" );
+ 		}
+ 
+ 	*--yy_cp = (char) c;
+ 
+ 	if ( c == '\n' )
+ 		--yylineno;
+ 
+ 	yytext_ptr = yy_bp;
+ 	yy_hold_char = *yy_cp;
+ 	yy_c_buf_p = yy_cp;
+ 	}
+ #endif	/* ifndef YY_NO_UNPUT */
+ 
+ 
+ #ifndef YY_NO_INPUT
+ #ifdef __cplusplus
+ static int yyinput()
+ #else
+ static int input()
+ #endif
+ 	{
+ 	int c;
+ 
+ 	*yy_c_buf_p = yy_hold_char;
+ 
+ 	if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ 		{
+ 		/* yy_c_buf_p now points to the character we want to return.
+ 		 * If this occurs *before* the EOB characters, then it's a
+ 		 * valid NUL; if not, then we've hit the end of the buffer.
+ 		 */
+ 		if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ 			/* This was really a NUL. */
+ 			*yy_c_buf_p = '\0';
+ 
+ 		else
+ 			{ /* need more input */
+ 			int offset = yy_c_buf_p - yytext_ptr;
+ 			++yy_c_buf_p;
+ 
+ 			switch ( yy_get_next_buffer() )
+ 				{
+ 				case EOB_ACT_LAST_MATCH:
+ 					/* This happens because yy_g_n_b()
+ 					 * sees that we've accumulated a
+ 					 * token and flags that we need to
+ 					 * try matching the token before
+ 					 * proceeding.  But for input(),
+ 					 * there's no matching to consider.
+ 					 * So convert the EOB_ACT_LAST_MATCH
+ 					 * to EOB_ACT_END_OF_FILE.
+ 					 */
+ 
+ 					/* Reset buffer status. */
+ 					yyrestart( yyin );
+ 
+ 					/* fall through */
+ 
+ 				case EOB_ACT_END_OF_FILE:
+ 					{
+ 					if ( yywrap() )
+ 						return EOF;
+ 
+ 					if ( ! yy_did_buffer_switch_on_eof )
+ 						YY_NEW_FILE;
+ #ifdef __cplusplus
+ 					return yyinput();
+ #else
+ 					return input();
+ #endif
+ 					}
+ 
+ 				case EOB_ACT_CONTINUE_SCAN:
+ 					yy_c_buf_p = yytext_ptr + offset;
+ 					break;
+ 				}
+ 			}
+ 		}
+ 
+ 	c = *(unsigned char *) yy_c_buf_p;	/* cast for 8-bit char's */
+ 	*yy_c_buf_p = '\0';	/* preserve yytext */
+ 	yy_hold_char = *++yy_c_buf_p;
+ 
+ 	if ( c == '\n' )
+ 		++yylineno;
+ 
+ 	return c;
+ 	}
+ #endif /* YY_NO_INPUT */
+ 
+ #ifdef YY_USE_PROTOS
+ void yyrestart( FILE *input_file )
+ #else
+ void yyrestart( input_file )
+ FILE *input_file;
+ #endif
+ 	{
+ 	if ( ! yy_current_buffer )
+ 		yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+ 
+ 	yy_init_buffer( yy_current_buffer, input_file );
+ 	yy_load_buffer_state();
+ 	}
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
+ #else
+ void yy_switch_to_buffer( new_buffer )
+ YY_BUFFER_STATE new_buffer;
+ #endif
+ 	{
+ 	if ( yy_current_buffer == new_buffer )
+ 		return;
+ 
+ 	if ( yy_current_buffer )
+ 		{
+ 		/* Flush out information for old buffer. */
+ 		*yy_c_buf_p = yy_hold_char;
+ 		yy_current_buffer->yy_buf_pos = yy_c_buf_p;
+ 		yy_current_buffer->yy_n_chars = yy_n_chars;
+ 		}
+ 
+ 	yy_current_buffer = new_buffer;
+ 	yy_load_buffer_state();
+ 
+ 	/* We don't actually know whether we did this switch during
+ 	 * EOF (yywrap()) processing, but the only time this flag
+ 	 * is looked at is after yywrap() is called, so it's safe
+ 	 * to go ahead and always set it.
+ 	 */
+ 	yy_did_buffer_switch_on_eof = 1;
+ 	}
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ void yy_load_buffer_state( void )
+ #else
+ void yy_load_buffer_state()
+ #endif
+ 	{
+ 	yy_n_chars = yy_current_buffer->yy_n_chars;
+ 	yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
+ 	yyin = yy_current_buffer->yy_input_file;
+ 	yy_hold_char = *yy_c_buf_p;
+ 	}
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
+ #else
+ YY_BUFFER_STATE yy_create_buffer( file, size )
+ FILE *file;
+ int size;
+ #endif
+ 	{
+ 	YY_BUFFER_STATE b;
+ 
+ 	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ 	if ( ! b )
+ 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+ 
+ 	b->yy_buf_size = size;
+ 
+ 	/* yy_ch_buf has to be 2 characters longer than the size given because
+ 	 * we need to put in 2 end-of-buffer characters.
+ 	 */
+ 	b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ 	if ( ! b->yy_ch_buf )
+ 		YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+ 
+ 	b->yy_is_our_buffer = 1;
+ 
+ 	yy_init_buffer( b, file );
+ 
+ 	return b;
+ 	}
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ void yy_delete_buffer( YY_BUFFER_STATE b )
+ #else
+ void yy_delete_buffer( b )
+ YY_BUFFER_STATE b;
+ #endif
+ 	{
+ 	if ( ! b )
+ 		return;
+ 
+ 	if ( b == yy_current_buffer )
+ 		yy_current_buffer = (YY_BUFFER_STATE) 0;
+ 
+ 	if ( b->yy_is_our_buffer )
+ 		yy_flex_free( (void *) b->yy_ch_buf );
+ 
+ 	yy_flex_free( (void *) b );
+ 	}
+ 
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
+ #else
+ void yy_init_buffer( b, file )
+ YY_BUFFER_STATE b;
+ FILE *file;
+ #endif
+ 
+ 
+ 	{
+ 	yy_flush_buffer( b );
+ 
+ 	b->yy_input_file = file;
+ 	b->yy_fill_buffer = 1;
+ 
+ #if YY_ALWAYS_INTERACTIVE
+ 	b->yy_is_interactive = 1;
+ #else
+ #if YY_NEVER_INTERACTIVE
+ 	b->yy_is_interactive = 0;
+ #else
+ 	b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+ #endif
+ #endif
+ 	}
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ void yy_flush_buffer( YY_BUFFER_STATE b )
+ #else
+ void yy_flush_buffer( b )
+ YY_BUFFER_STATE b;
+ #endif
+ 
+ 	{
+ 	if ( ! b )
+ 		return;
+ 
+ 	b->yy_n_chars = 0;
+ 
+ 	/* We always need two end-of-buffer characters.  The first causes
+ 	 * a transition to the end-of-buffer state.  The second causes
+ 	 * a jam in that state.
+ 	 */
+ 	b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR;
+ 	b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR;
+ 
+ 	b->yy_buf_pos = &b->yy_ch_buf[0];
+ 
+ 	b->yy_at_bol = 1;
+ 	b->yy_buffer_status = YY_BUFFER_NEW;
+ 
+ 	if ( b == yy_current_buffer )
+ 		yy_load_buffer_state();
+ 	}
+ 
+ 
+ #ifndef YY_NO_SCAN_BUFFER
+ #ifdef YY_USE_PROTOS
+ YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
+ #else
+ YY_BUFFER_STATE yy_scan_buffer( base, size )
+ char *base;
+ yy_size_t size;
+ #endif
+ 	{
+ 	YY_BUFFER_STATE b;
+ 
+ 	if ( size < 2 ||
+ 	     base[size-2] != YY_END_OF_BUFFER_CHAR ||
+ 	     base[size-1] != YY_END_OF_BUFFER_CHAR )
+ 		/* They forgot to leave room for the EOB's. */
+ 		return 0;
+ 
+ 	b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ 	if ( ! b )
+ 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+ 
+ 	b->yy_buf_size = size - 2;	/* "- 2" to take care of EOB's */
+ 	b->yy_buf_pos = b->yy_ch_buf = base;
+ 	b->yy_is_our_buffer = 0;
+ 	b->yy_input_file = 0;
+ 	b->yy_n_chars = b->yy_buf_size;
+ 	b->yy_is_interactive = 0;
+ 	b->yy_at_bol = 1;
+ 	b->yy_fill_buffer = 0;
+ 	b->yy_buffer_status = YY_BUFFER_NEW;
+ 
+ 	yy_switch_to_buffer( b );
+ 
+ 	return b;
+ 	}
+ #endif
+ 
+ 
+ #ifndef YY_NO_SCAN_STRING
+ #ifdef YY_USE_PROTOS
+ YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
+ #else
+ YY_BUFFER_STATE yy_scan_string( yy_str )
+ yyconst char *yy_str;
+ #endif
+ 	{
+ 	int len;
+ 	for ( len = 0; yy_str[len]; ++len )
+ 		;
+ 
+ 	return yy_scan_bytes( yy_str, len );
+ 	}
+ #endif
+ 
+ 
+ #ifndef YY_NO_SCAN_BYTES
+ #ifdef YY_USE_PROTOS
+ YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
+ #else
+ YY_BUFFER_STATE yy_scan_bytes( bytes, len )
+ yyconst char *bytes;
+ int len;
+ #endif
+ 	{
+ 	YY_BUFFER_STATE b;
+ 	char *buf;
+ 	yy_size_t n;
+ 	int i;
+ 
+ 	/* Get memory for full buffer, including space for trailing EOB's. */
+ 	n = len + 2;
+ 	buf = (char *) yy_flex_alloc( n );
+ 	if ( ! buf )
+ 		YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+ 
+ 	for ( i = 0; i < len; ++i )
+ 		buf[i] = bytes[i];
+ 
+ 	buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+ 
+ 	b = yy_scan_buffer( buf, n );
+ 	if ( ! b )
+ 		YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+ 
+ 	/* It's okay to grow etc. this buffer, and we should throw it
+ 	 * away when we're done.
+ 	 */
+ 	b->yy_is_our_buffer = 1;
+ 
+ 	return b;
+ 	}
+ #endif
+ 
+ 
+ #ifndef YY_NO_PUSH_STATE
+ #ifdef YY_USE_PROTOS
+ static void yy_push_state( int new_state )
+ #else
+ static void yy_push_state( new_state )
+ int new_state;
+ #endif
+ 	{
+ 	if ( yy_start_stack_ptr >= yy_start_stack_depth )
+ 		{
+ 		yy_size_t new_size;
+ 
+ 		yy_start_stack_depth += YY_START_STACK_INCR;
+ 		new_size = yy_start_stack_depth * sizeof( int );
+ 
+ 		if ( ! yy_start_stack )
+ 			yy_start_stack = (int *) yy_flex_alloc( new_size );
+ 
+ 		else
+ 			yy_start_stack = (int *) yy_flex_realloc(
+ 					(void *) yy_start_stack, new_size );
+ 
+ 		if ( ! yy_start_stack )
+ 			YY_FATAL_ERROR(
+ 			"out of memory expanding start-condition stack" );
+ 		}
+ 
+ 	yy_start_stack[yy_start_stack_ptr++] = YY_START;
+ 
+ 	BEGIN(new_state);
+ 	}
+ #endif
+ 
+ 
+ #ifndef YY_NO_POP_STATE
+ static void yy_pop_state()
+ 	{
+ 	if ( --yy_start_stack_ptr < 0 )
+ 		YY_FATAL_ERROR( "start-condition stack underflow" );
+ 
+ 	BEGIN(yy_start_stack[yy_start_stack_ptr]);
+ 	}
+ #endif
+ 
+ 
+ #ifndef YY_NO_TOP_STATE
+ static int yy_top_state()
+ 	{
+ 	return yy_start_stack[yy_start_stack_ptr - 1];
+ 	}
+ #endif
+ 
+ #ifndef YY_EXIT_FAILURE
+ #define YY_EXIT_FAILURE 2
+ #endif
+ 
+ #ifdef YY_USE_PROTOS
+ static void yy_fatal_error( yyconst char msg[] )
+ #else
+ static void yy_fatal_error( msg )
+ char msg[];
+ #endif
+ 	{
+ 	(void) fprintf( stderr, "%s\n", msg );
+ 	exit( YY_EXIT_FAILURE );
+ 	}
+ 
+ 
+ 
+ /* Redefine yyless() so it works in section 3 code. */
+ 
+ #undef yyless
+ #define yyless(n) \
+ 	do \
+ 		{ \
+ 		/* Undo effects of setting up yytext. */ \
+ 		yytext[yyleng] = yy_hold_char; \
+ 		yy_c_buf_p = yytext + n; \
+ 		yy_hold_char = *yy_c_buf_p; \
+ 		*yy_c_buf_p = '\0'; \
+ 		yyleng = n; \
+ 		} \
+ 	while ( 0 )
+ 
+ 
+ /* Internal utility routines. */
+ 
+ #ifndef yytext_ptr
+ #ifdef YY_USE_PROTOS
+ static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
+ #else
+ static void yy_flex_strncpy( s1, s2, n )
+ char *s1;
+ yyconst char *s2;
+ int n;
+ #endif
+ 	{
+ 	register int i;
+ 	for ( i = 0; i < n; ++i )
+ 		s1[i] = s2[i];
+ 	}
+ #endif
+ 
+ #ifdef YY_NEED_STRLEN
+ #ifdef YY_USE_PROTOS
+ static int yy_flex_strlen( yyconst char *s )
+ #else
+ static int yy_flex_strlen( s )
+ yyconst char *s;
+ #endif
+ 	{
+ 	register int n;
+ 	for ( n = 0; s[n]; ++n )
+ 		;
+ 
+ 	return n;
+ 	}
+ #endif
+ 
+ 
+ #ifdef YY_USE_PROTOS
+ static void *yy_flex_alloc( yy_size_t size )
+ #else
+ static void *yy_flex_alloc( size )
+ yy_size_t size;
+ #endif
+ 	{
+ 	return (void *) malloc( size );
+ 	}
+ 
+ #ifdef YY_USE_PROTOS
+ static inline void *yy_flex_realloc( void *ptr, yy_size_t size )
+ #else
+ static inline void *yy_flex_realloc( ptr, size )
+ void *ptr;
+ yy_size_t size;
+ #endif
+ 	{
+ 	/* The cast to (char *) in the following accommodates both
+ 	 * implementations that use char* generic pointers, and those
+ 	 * that use void* generic pointers.  It works with the latter
+ 	 * because both ANSI C and C++ allow castless assignment from
+ 	 * any pointer type to void*, and deal with argument conversions
+ 	 * as though doing an assignment.
+ 	 */
+ 	return (void *) realloc( (char *) ptr, size );
+ 	}
+ 
+ #ifdef YY_USE_PROTOS
+ static void yy_flex_free( void *ptr )
+ #else
+ static void yy_flex_free( ptr )
+ void *ptr;
+ #endif
+ 	{
+ 	free( ptr );
+ 	}
+ 
+ #if YY_MAIN
+ int main()
+ 	{
+ 	yylex();
+ 	return 0;
+ 	}
+ #endif
+ #line 234 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/Lexer.l"
+ 


Index: llvm/projects/Stacker/lib/compiler/Lexer.l.cvs
diff -c /dev/null llvm/projects/Stacker/lib/compiler/Lexer.l.cvs:1.1
*** /dev/null	Wed Feb 15 01:26:19 2006
--- llvm/projects/Stacker/lib/compiler/Lexer.l.cvs	Wed Feb 15 01:26:07 2006
***************
*** 0 ****
--- 1,234 ----
+ /*===-- Lexer.l - Scanner for Stacker language -----------------*- C++ -*--===//
+ // 
+ //                     The LLVM Compiler Infrastructure
+ //
+ // This file was developed by Reid Spencer and donated to the LLVM research 
+ // group and is distributed under the University of Illinois Open Source 
+ // License. See LICENSE.TXT for details.
+ // 
+ //===----------------------------------------------------------------------===//
+ //
+ //  This file implements the flex scanner for Stacker languages files.
+ //
+ //===----------------------------------------------------------------------===*/
+ 
+ %option prefix="Stacker"
+ %option yylineno
+ %option nostdinit
+ %option never-interactive
+ %option batch
+ %option noyywrap
+ %option nodefault
+ %option 8bit
+ %option outfile="Lexer.cpp"
+ %option ecs
+ %option noreject
+ %option noyymore
+ 
+ %{
+ 
+ #include "StackerCompiler.h"
+ #include "StackerParser.h"
+ 
+ /* Conversion of text ints to binary */
+ static int64_t IntToVal(const char *Buffer) {
+   int64_t Result = 0;
+   for (; *Buffer; Buffer++) {
+     int64_t OldRes = Result;
+     Result *= 10;
+     Result += *Buffer-'0';
+     if (Result < OldRes)   // Uh, oh, overflow detected!!!
+       StackerCompiler::ThrowException("constant bigger than 64 bits detected!");
+   }
+   return Result;
+ }
+ 
+ /* Conversion of text hexadecimal ints to binary */
+ static int64_t HexIntToVal(const char *Buffer) {
+   int64_t Result = 0;
+   for (; *Buffer; ++Buffer) {
+     int64_t OldRes = Result;
+     Result *= 16;
+     char C = *Buffer;
+     if (C >= '0' && C <= '9')
+       Result += C-'0';
+     else if (C >= 'A' && C <= 'F')
+       Result += C-'A'+10;
+     else if (C >= 'a' && C <= 'f')
+       Result += C-'a'+10;
+ 
+     if (Result < OldRes)   // Uh, oh, overflow detected!!!
+       StackerCompiler::ThrowException("constant bigger than 64 bits detected!");
+   }
+   return Result;
+ }
+ 
+ #define YY_NEVER_INTERACTIVE 1
+ %}
+ 
+ /* Comments start with a ; and go till end of line */
+ Comment1	[#].*$
+ /* You can also embed them in ( ... ) */
+ Comment2	\(.*\)
+ /* We ignore white space */
+ White		[ \t\r\n]
+ 
+ /* jdentifiers start with a % sign */
+ Identifier  	[A-Za-z][-A-Za-z0-9_]*
+ 
+ /* Strings can contain any character except " and \ */
+ String		\"[^\"]*\"
+ 
+ /* Positive and negative integer constants*/
+ PInteger	[+]?[0-9]+
+ NInteger	-[0-9]+
+ HexInteger 	0x[0-9A-Fa-f]+
+ 
+ /* Special Characters - name them to avoid flex confusion */
+ Semi 		[;]
+ Colon 		[:]
+ Less		\<
+ More		\>
+ LessEq		\<\=
+ MoreEq		\>\=
+ NotEq		\<\>
+ Equal		\=
+ Plus		\+
+ Minus		\-
+ Incr		\+\+
+ Decr		\-\-
+ Mult		\*
+ Div		\/
+ StarSlash	\*\/
+ LShift		\<\<
+ RShift		\>\>
+ InStr		\<s
+ InNum		\<d
+ InChar		\<c
+ OutStr		\>s
+ OutNum		\>d
+ OutChar		\>c
+ 
+ %%
+ 
+ {Comment1}	{ /* Ignore comments */ }
+ {Comment2}	{ /* Ignore comments */ }
+ 
+ {Colon}		{ return COLON; }
+ {Semi}		{ return SEMI; }
+ 
+ TRUE		{ return TRUETOK; }
+ FALSE		{ return FALSETOK; }
+ ON		{ return TRUETOK; }
+ OFF		{ return FALSETOK; }
+ {Less}		{ return LESS; }
+ LT		{ return LESS; }
+ {More}		{ return MORE; }
+ GT		{ return MORE; }
+ {LessEq}	{ return LESS_EQUAL; }
+ LE		{ return LESS_EQUAL; }
+ {MoreEq}	{ return MORE_EQUAL; }
+ GE		{ return MORE_EQUAL; }
+ {NotEq}		{ return NOT_EQUAL; }
+ NE		{ return NOT_EQUAL; }
+ {Equal}		{ return EQUAL; }
+ EQ		{ return EQUAL; }
+ 
+ {Plus}		{ return PLUS; }
+ {Minus}		{ return MINUS; }
+ {Incr}		{ return INCR; }
+ {Decr}		{ return DECR; }
+ {Mult}		{ return MULT; }
+ {Div}		{ return DIV; }
+ MOD		{ return MODULUS; }
+ NEG		{ return NEGATE; }
+ ABS		{ return ABS; }
+ MIN		{ return MIN; }
+ MAX		{ return MAX; }
+ {StarSlash}	{ return STAR_SLASH; }
+ 
+ AND		{ return AND; }
+ OR		{ return OR; }
+ XOR		{ return XOR; }
+ {LShift}	{ return LSHIFT; }
+ {RShift}	{ return RSHIFT; }
+ 
+ DROP		{ return DROP; }
+ NIP		{ return NIP; }
+ DUP		{ return DUP; }
+ SWAP		{ return SWAP; }
+ OVER		{ return OVER; }
+ PICK		{ return PICK; }
+ SELECT		{ return SELECT; }
+ ROT		{ return ROT; }
+ RROT		{ return RROT; }
+ ROLL		{ return ROLL; }
+ TUCK		{ return TUCK; }
+ DROP2		{ return DROP2; }
+ NIP2		{ return NIP2; }
+ DUP2		{ return DUP2; }
+ SWAP2		{ return SWAP2; }
+ OVER2		{ return OVER2; }
+ TUCK2		{ return TUCK2; }
+ ROT2		{ return ROT2; }
+ RROT2		{ return RROT2; }
+ 
+ MALLOC		{ return MALLOC; }
+ FREE		{ return FREE; }
+ GET		{ return GET; }
+ PUT		{ return PUT; }
+ 
+ IF		{ return IF; }
+ ELSE		{ return ELSE; }
+ ENDIF		{ return ENDIF; }
+ WHILE		{ return WHILE; }
+ END		{ return END; }
+ 
+ RECURSE		{ return RECURSE; }
+ RETURN		{ return RETURN; }
+ EXIT		{ return EXIT; }
+ FORWARD		{ return FORWARD; }
+ TAB		{ return TAB; }
+ SPACE		{ return SPACE; }
+ CR		{ return CR; }
+ 
+ {InStr}		{ return IN_STR; }
+ {InNum}		{ return IN_NUM; }
+ {InChar} 	{ return IN_CHAR; }
+ 
+ {OutStr}	{ return OUT_STR; }
+ {OutNum}	{ return OUT_NUM; }
+ {OutChar} 	{ return OUT_CHAR; }
+ 
+ MAIN		{ return MAIN; }
+ 
+ DUMP		{ return DUMP; }
+ 
+ !=		{ StackerCompiler::ThrowException(
+ 		  "You probably meant to use a <> instead of !=" ); }
+ 
+ ==		{ StackerCompiler::ThrowException(
+ 		  "You probably meant to use a single = .. this isn't C"); }
+ 
+ {PInteger}      { Stackerlval.IntegerVal = IntToVal(yytext); return INTEGER; }
+ {NInteger}      { uint64_t Val = IntToVal(yytext+1);
+ 		  // +1:  we have bigger negative range
+ 		  if (Val > (uint64_t)INT64_MAX+1)
+ 		    StackerCompiler::ThrowException(
+ 		    "Constant too large for signed 64 bits!");
+                   Stackerlval.IntegerVal = -Val; 
+ 		  return INTEGER; 
+                 }
+ {HexInteger} 	{ Stackerlval.IntegerVal = HexIntToVal(yytext+3); 
+                    return INTEGER;
+                 }
+ 
+ {String} 	{ yytext[strlen(yytext)-1] = 0;           // nuke end quote
+ 		  Stackerlval.StringVal = strdup(yytext+1);  // Nuke start quote
+ 		  return STRING;
+                 }
+ 
+ {Identifier}    { Stackerlval.StringVal = strdup(yytext); return IDENTIFIER; }
+ 
+ {White}         { /* Ignore whitespace */ }
+ %%


Index: llvm/projects/Stacker/lib/compiler/StackerParser.cpp.cvs
diff -c /dev/null llvm/projects/Stacker/lib/compiler/StackerParser.cpp.cvs:1.1
*** /dev/null	Wed Feb 15 01:26:19 2006
--- llvm/projects/Stacker/lib/compiler/StackerParser.cpp.cvs	Wed Feb 15 01:26:07 2006
***************
*** 0 ****
--- 1,1909 ----
+ /* A Bison parser, made by GNU Bison 1.875c.  */
+ 
+ /* Skeleton parser for Yacc-like parsing with Bison,
+    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330,
+    Boston, MA 02111-1307, USA.  */
+ 
+ /* As a special exception, when this file is copied by Bison into a
+    Bison output file, you may use that output file without restriction.
+    This special exception was added by the Free Software Foundation
+    in version 1.24 of Bison.  */
+ 
+ /* Written by Richard Stallman by simplifying the original so called
+    ``semantic'' parser.  */
+ 
+ /* All symbols defined below should begin with yy or YY, to avoid
+    infringing on user name space.  This should be done even for local
+    variables, as they might otherwise be expanded by user macros.
+    There are some unavoidable exceptions within include files to
+    define necessary library symbols; they are noted "INFRINGES ON
+    USER NAME SPACE" below.  */
+ 
+ /* Identify Bison output.  */
+ #define YYBISON 1
+ 
+ /* Skeleton name.  */
+ #define YYSKELETON_NAME "yacc.c"
+ 
+ /* Pure parsers.  */
+ #define YYPURE 0
+ 
+ /* Using locations.  */
+ #define YYLSP_NEEDED 0
+ 
+ /* If NAME_PREFIX is specified substitute the variables and functions
+    names.  */
+ #define yyparse Stackerparse
+ #define yylex   Stackerlex
+ #define yyerror Stackererror
+ #define yylval  Stackerlval
+ #define yychar  Stackerchar
+ #define yydebug Stackerdebug
+ #define yynerrs Stackernerrs
+ 
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+    /* Put the tokens into the symbol table, so that GDB and other debuggers
+       know about them.  */
+    enum yytokentype {
+      INTEGER = 258,
+      STRING = 259,
+      IDENTIFIER = 260,
+      SEMI = 261,
+      COLON = 262,
+      FORWARD = 263,
+      MAIN = 264,
+      DUMP = 265,
+      TRUETOK = 266,
+      FALSETOK = 267,
+      LESS = 268,
+      MORE = 269,
+      LESS_EQUAL = 270,
+      MORE_EQUAL = 271,
+      NOT_EQUAL = 272,
+      EQUAL = 273,
+      PLUS = 274,
+      MINUS = 275,
+      INCR = 276,
+      DECR = 277,
+      MULT = 278,
+      DIV = 279,
+      MODULUS = 280,
+      NEGATE = 281,
+      ABS = 282,
+      MIN = 283,
+      MAX = 284,
+      STAR_SLASH = 285,
+      AND = 286,
+      OR = 287,
+      XOR = 288,
+      LSHIFT = 289,
+      RSHIFT = 290,
+      DROP = 291,
+      DROP2 = 292,
+      NIP = 293,
+      NIP2 = 294,
+      DUP = 295,
+      DUP2 = 296,
+      SWAP = 297,
+      SWAP2 = 298,
+      OVER = 299,
+      OVER2 = 300,
+      ROT = 301,
+      ROT2 = 302,
+      RROT = 303,
+      RROT2 = 304,
+      TUCK = 305,
+      TUCK2 = 306,
+      ROLL = 307,
+      PICK = 308,
+      SELECT = 309,
+      MALLOC = 310,
+      FREE = 311,
+      GET = 312,
+      PUT = 313,
+      IF = 314,
+      ELSE = 315,
+      ENDIF = 316,
+      WHILE = 317,
+      END = 318,
+      RECURSE = 319,
+      RETURN = 320,
+      EXIT = 321,
+      TAB = 322,
+      SPACE = 323,
+      CR = 324,
+      IN_STR = 325,
+      IN_NUM = 326,
+      IN_CHAR = 327,
+      OUT_STR = 328,
+      OUT_NUM = 329,
+      OUT_CHAR = 330
+    };
+ #endif
+ #define INTEGER 258
+ #define STRING 259
+ #define IDENTIFIER 260
+ #define SEMI 261
+ #define COLON 262
+ #define FORWARD 263
+ #define MAIN 264
+ #define DUMP 265
+ #define TRUETOK 266
+ #define FALSETOK 267
+ #define LESS 268
+ #define MORE 269
+ #define LESS_EQUAL 270
+ #define MORE_EQUAL 271
+ #define NOT_EQUAL 272
+ #define EQUAL 273
+ #define PLUS 274
+ #define MINUS 275
+ #define INCR 276
+ #define DECR 277
+ #define MULT 278
+ #define DIV 279
+ #define MODULUS 280
+ #define NEGATE 281
+ #define ABS 282
+ #define MIN 283
+ #define MAX 284
+ #define STAR_SLASH 285
+ #define AND 286
+ #define OR 287
+ #define XOR 288
+ #define LSHIFT 289
+ #define RSHIFT 290
+ #define DROP 291
+ #define DROP2 292
+ #define NIP 293
+ #define NIP2 294
+ #define DUP 295
+ #define DUP2 296
+ #define SWAP 297
+ #define SWAP2 298
+ #define OVER 299
+ #define OVER2 300
+ #define ROT 301
+ #define ROT2 302
+ #define RROT 303
+ #define RROT2 304
+ #define TUCK 305
+ #define TUCK2 306
+ #define ROLL 307
+ #define PICK 308
+ #define SELECT 309
+ #define MALLOC 310
+ #define FREE 311
+ #define GET 312
+ #define PUT 313
+ #define IF 314
+ #define ELSE 315
+ #define ENDIF 316
+ #define WHILE 317
+ #define END 318
+ #define RECURSE 319
+ #define RETURN 320
+ #define EXIT 321
+ #define TAB 322
+ #define SPACE 323
+ #define CR 324
+ #define IN_STR 325
+ #define IN_NUM 326
+ #define IN_CHAR 327
+ #define OUT_STR 328
+ #define OUT_NUM 329
+ #define OUT_CHAR 330
+ 
+ 
+ 
+ 
+ /* Copy the first part of user declarations.  */
+ #line 14 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+ 
+ #include "StackerCompiler.h"
+ #include "llvm/SymbolTable.h"
+ #include "llvm/Module.h"
+ #include "llvm/Instructions.h"
+ #include "llvm/ADT/STLExtras.h"
+ #include "llvm/ADT/DepthFirstIterator.h"
+ #include <list>
+ #include <utility>
+ #include <algorithm>
+ 
+ #define YYERROR_VERBOSE 1
+ #define SCI StackerCompiler::TheInstance
+ 
+ int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
+ int yylex();                       // declaration" of xxx warnings.
+ int yyparse();
+ 
+ 
+ 
+ /* Enabling traces.  */
+ #ifndef YYDEBUG
+ # define YYDEBUG 0
+ #endif
+ 
+ /* Enabling verbose error messages.  */
+ #ifdef YYERROR_VERBOSE
+ # undef YYERROR_VERBOSE
+ # define YYERROR_VERBOSE 1
+ #else
+ # define YYERROR_VERBOSE 0
+ #endif
+ 
+ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+ #line 35 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+ typedef union YYSTYPE {
+   llvm::Module*		ModuleVal;
+   llvm::Function* 	FunctionVal;
+   llvm::BasicBlock*	BasicBlockVal;
+   int64_t               IntegerVal;
+   char*                 StringVal;
+ } YYSTYPE;
+ /* Line 191 of yacc.c.  */
+ #line 263 "StackerParser.tab.c"
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+ #endif
+ 
+ 
+ 
+ /* Copy the second part of user declarations.  */
+ 
+ 
+ /* Line 214 of yacc.c.  */
+ #line 275 "StackerParser.tab.c"
+ 
+ #if ! defined (yyoverflow) || YYERROR_VERBOSE
+ 
+ # ifndef YYFREE
+ #  define YYFREE free
+ # endif
+ # ifndef YYMALLOC
+ #  define YYMALLOC malloc
+ # endif
+ 
+ /* The parser invokes alloca or malloc; define the necessary symbols.  */
+ 
+ # ifdef YYSTACK_USE_ALLOCA
+ #  if YYSTACK_USE_ALLOCA
+ #   define YYSTACK_ALLOC alloca
+ #  endif
+ # else
+ #  if defined (alloca) || defined (_ALLOCA_H)
+ #   define YYSTACK_ALLOC alloca
+ #  else
+ #   ifdef __GNUC__
+ #    define YYSTACK_ALLOC __builtin_alloca
+ #   endif
+ #  endif
+ # endif
+ 
+ # ifdef YYSTACK_ALLOC
+    /* Pacify GCC's `empty if-body' warning. */
+ #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
+ # else
+ #  if defined (__STDC__) || defined (__cplusplus)
+ #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ #   define YYSIZE_T size_t
+ #  endif
+ #  define YYSTACK_ALLOC YYMALLOC
+ #  define YYSTACK_FREE YYFREE
+ # endif
+ #endif /* ! defined (yyoverflow) || YYERROR_VERBOSE */
+ 
+ 
+ #if (! defined (yyoverflow) \
+      && (! defined (__cplusplus) \
+ 	 || (defined (YYSTYPE_IS_TRIVIAL) && YYSTYPE_IS_TRIVIAL)))
+ 
+ /* A type that is properly aligned for any stack member.  */
+ union yyalloc
+ {
+   short yyss;
+   YYSTYPE yyvs;
+   };
+ 
+ /* The size of the maximum gap between one aligned stack and the next.  */
+ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+ 
+ /* The size of an array large to enough to hold all stacks, each with
+    N elements.  */
+ # define YYSTACK_BYTES(N) \
+      ((N) * (sizeof (short) + sizeof (YYSTYPE))				\
+       + YYSTACK_GAP_MAXIMUM)
+ 
+ /* Copy COUNT objects from FROM to TO.  The source and destination do
+    not overlap.  */
+ # ifndef YYCOPY
+ #  if defined (__GNUC__) && 1 < __GNUC__
+ #   define YYCOPY(To, From, Count) \
+       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+ #  else
+ #   define YYCOPY(To, From, Count)		\
+       do					\
+ 	{					\
+ 	  register YYSIZE_T yyi;		\
+ 	  for (yyi = 0; yyi < (Count); yyi++)	\
+ 	    (To)[yyi] = (From)[yyi];		\
+ 	}					\
+       while (0)
+ #  endif
+ # endif
+ 
+ /* Relocate STACK from its old location to the new one.  The
+    local variables YYSIZE and YYSTACKSIZE give the old and new number of
+    elements in the stack, and YYPTR gives the new location of the
+    stack.  Advance YYPTR to a properly aligned location for the next
+    stack.  */
+ # define YYSTACK_RELOCATE(Stack)					\
+     do									\
+       {									\
+ 	YYSIZE_T yynewbytes;						\
+ 	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+ 	Stack = &yyptr->Stack;						\
+ 	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ 	yyptr += yynewbytes / sizeof (*yyptr);				\
+       }									\
+     while (0)
+ 
+ #endif
+ 
+ #if defined (__STDC__) || defined (__cplusplus)
+    typedef signed char yysigned_char;
+ #else
+    typedef short yysigned_char;
+ #endif
+ 
+ /* YYFINAL -- State number of the termination state. */
+ #define YYFINAL  3
+ /* YYLAST -- Last index in YYTABLE.  */
+ #define YYLAST   150
+ 
+ /* YYNTOKENS -- Number of terminals. */
+ #define YYNTOKENS  76
+ /* YYNNTS -- Number of nonterminals. */
+ #define YYNNTS  10
+ /* YYNRULES -- Number of rules. */
+ #define YYNRULES  80
+ /* YYNRULES -- Number of states. */
+ #define YYNSTATES  93
+ 
+ /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+ #define YYUNDEFTOK  2
+ #define YYMAXUTOK   330
+ 
+ #define YYTRANSLATE(YYX) 						\
+   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+ 
+ /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+ static const unsigned char yytranslate[] =
+ {
+        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
+        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
+       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
+       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
+       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
+       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
+       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
+       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
+       75
+ };
+ 
+ #if YYDEBUG
+ /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+    YYRHS.  */
+ static const unsigned char yyprhs[] =
+ {
+        0,     0,     3,     4,     7,    10,    11,    13,    15,    17,
+       21,    26,    31,    34,    35,    41,    45,    49,    51,    53,
+       55,    57,    59,    61,    63,    65,    67,    69,    71,    73,
+       75,    77,    79,    81,    83,    85,    87,    89,    91,    93,
+       95,    97,    99,   101,   103,   105,   107,   109,   111,   113,
+      115,   117,   119,   121,   123,   125,   127,   129,   131,   133,
+      135,   137,   139,   141,   143,   145,   147,   149,   151,   153,
+      155,   157,   159,   161,   163,   165,   167,   169,   171,   173,
+      175
+ };
+ 
+ /* YYRHS -- A `-1'-separated list of the rules' RHS. */
+ static const yysigned_char yyrhs[] =
+ {
+       77,     0,    -1,    -1,    78,    79,    -1,    79,    80,    -1,
+       -1,    81,    -1,    83,    -1,    82,    -1,     8,     5,     6,
+       -1,     7,     9,    84,     6,    -1,     7,     5,    84,     6,
+       -1,    84,    85,    -1,    -1,    59,     5,    60,     5,    61,
+       -1,    59,     5,    61,    -1,    62,     5,    63,    -1,     5,
+       -1,     4,    -1,     3,    -1,    11,    -1,    12,    -1,    13,
+       -1,    14,    -1,    15,    -1,    16,    -1,    17,    -1,    18,
+       -1,    19,    -1,    20,    -1,    21,    -1,    22,    -1,    23,
+       -1,    24,    -1,    25,    -1,    26,    -1,    27,    -1,    28,
+       -1,    29,    -1,    30,    -1,    31,    -1,    32,    -1,    33,
+       -1,    34,    -1,    35,    -1,    36,    -1,    37,    -1,    38,
+       -1,    39,    -1,    40,    -1,    41,    -1,    42,    -1,    43,
+       -1,    44,    -1,    45,    -1,    46,    -1,    47,    -1,    48,
+       -1,    49,    -1,    50,    -1,    51,    -1,    52,    -1,    53,
+       -1,    54,    -1,    55,    -1,    56,    -1,    57,    -1,    58,
+       -1,    64,    -1,    65,    -1,    66,    -1,    67,    -1,    68,
+       -1,    69,    -1,    70,    -1,    71,    -1,    72,    -1,    73,
+       -1,    74,    -1,    75,    -1,    10,    -1
+ };
+ 
+ /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+ static const unsigned char yyrline[] =
+ {
+        0,    70,    70,    70,    74,    75,    78,    79,    80,    83,
+       86,    89,    92,    93,    99,   100,   101,   104,   105,   106,
+      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
+      119,   120,   121,   122,   123,   124,   125,   126,   127,   128,
+      129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+      139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+      149,   150,   151,   152,   153,   154,   155,   156,   157,   158,
+      159,   160,   161,   162,   163,   164,   165,   166,   167,   168,
+      169
+ };
+ #endif
+ 
+ #if YYDEBUG || YYERROR_VERBOSE
+ /* YYTNME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+    First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+ static const char *const yytname[] =
+ {
+   "$end", "error", "$undefined", "INTEGER", "STRING", "IDENTIFIER",
+   "SEMI", "COLON", "FORWARD", "MAIN", "DUMP", "TRUETOK", "FALSETOK",
+   "LESS", "MORE", "LESS_EQUAL", "MORE_EQUAL", "NOT_EQUAL", "EQUAL", "PLUS",
+   "MINUS", "INCR", "DECR", "MULT", "DIV", "MODULUS", "NEGATE", "ABS",
+   "MIN", "MAX", "STAR_SLASH", "AND", "OR", "XOR", "LSHIFT", "RSHIFT",
+   "DROP", "DROP2", "NIP", "NIP2", "DUP", "DUP2", "SWAP", "SWAP2", "OVER",
+   "OVER2", "ROT", "ROT2", "RROT", "RROT2", "TUCK", "TUCK2", "ROLL", "PICK",
+   "SELECT", "MALLOC", "FREE", "GET", "PUT", "IF", "ELSE", "ENDIF", "WHILE",
+   "END", "RECURSE", "RETURN", "EXIT", "TAB", "SPACE", "CR", "IN_STR",
+   "IN_NUM", "IN_CHAR", "OUT_STR", "OUT_NUM", "OUT_CHAR", "$accept",
+   "Module", "@1", "DefinitionList", "Definition", "ForwardDef", "MainDef",
+   "ColonDef", "WordList", "Word", 0
+ };
+ #endif
+ 
+ # ifdef YYPRINT
+ /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+    token YYLEX-NUM.  */
+ static const unsigned short yytoknum[] =
+ {
+        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
+      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
+      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
+      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
+      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
+      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
+      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
+      325,   326,   327,   328,   329,   330
+ };
+ # endif
+ 
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+ static const unsigned char yyr1[] =
+ {
+        0,    76,    78,    77,    79,    79,    80,    80,    80,    81,
+       82,    83,    84,    84,    85,    85,    85,    85,    85,    85,
+       85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
+       85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
+       85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
+       85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
+       85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
+       85,    85,    85,    85,    85,    85,    85,    85,    85,    85,
+       85
+ };
+ 
+ /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+ static const unsigned char yyr2[] =
+ {
+        0,     2,     0,     2,     2,     0,     1,     1,     1,     3,
+        4,     4,     2,     0,     5,     3,     3,     1,     1,     1,
+        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
+        1
+ };
+ 
+ /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+    means the default is an error.  */
+ static const unsigned char yydefact[] =
+ {
+        2,     0,     5,     1,     3,     0,     0,     4,     6,     8,
+        7,    13,    13,     0,     0,     0,     9,    19,    18,    17,
+       11,    80,    20,    21,    22,    23,    24,    25,    26,    27,
+       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
+       38,    39,    40,    41,    42,    43,    44,    45,    46,    47,
+       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
+       58,    59,    60,    61,    62,    63,    64,    65,    66,    67,
+        0,     0,    68,    69,    70,    71,    72,    73,    74,    75,
+       76,    77,    78,    79,    12,    10,     0,     0,     0,    15,
+       16,     0,    14
+ };
+ 
+ /* YYDEFGOTO[NTERM-NUM]. */
+ static const yysigned_char yydefgoto[] =
+ {
+       -1,     1,     2,     4,     7,     8,     9,    10,    14,    84
+ };
+ 
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+    STATE-NUM.  */
+ #define YYPACT_NINF -4
+ static const short yypact[] =
+ {
+       -4,     4,    -4,    -4,    -2,   141,    52,    -4,    -4,    -4,
+       -4,    -4,    -4,    54,    -3,    70,    -4,    -4,    -4,    -4,
+       -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       53,    74,    -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,
+       -4,    -4,    -4,    -4,    -4,    -4,    17,    67,   126,    -4,
+       -4,    72,    -4
+ };
+ 
+ /* YYPGOTO[NTERM-NUM].  */
+ static const short yypgoto[] =
+ {
+       -4,    -4,    -4,    -4,    -4,    -4,    -4,    -4,   135,    -4
+ };
+ 
+ /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+    positive, shift that token.  If negative, reduce the rule which
+    number is the opposite.  If zero, do what YYDEFACT says.
+    If YYTABLE_NINF, syntax error.  */
+ #define YYTABLE_NINF -1
+ static const unsigned char yytable[] =
+ {
+       17,    18,    19,    20,     3,     5,     6,    21,    22,    23,
+       24,    25,    26,    27,    28,    29,    30,    31,    32,    33,
+       34,    35,    36,    37,    38,    39,    40,    41,    42,    43,
+       44,    45,    46,    47,    48,    49,    50,    51,    52,    53,
+       54,    55,    56,    57,    58,    59,    60,    61,    62,    63,
+       64,    65,    66,    67,    68,    69,    70,    13,    86,    71,
+       16,    72,    73,    74,    75,    76,    77,    78,    79,    80,
+       81,    82,    83,    17,    18,    19,    85,    88,    89,    87,
+       21,    22,    23,    24,    25,    26,    27,    28,    29,    30,
+       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
+       41,    42,    43,    44,    45,    46,    47,    48,    49,    50,
+       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
+       61,    62,    63,    64,    65,    66,    67,    68,    69,    70,
+       90,    91,    71,    92,    72,    73,    74,    75,    76,    77,
+       78,    79,    80,    81,    82,    83,    11,    15,     0,     0,
+       12
+ };
+ 
+ static const yysigned_char yycheck[] =
+ {
+        3,     4,     5,     6,     0,     7,     8,    10,    11,    12,
+       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+       23,    24,    25,    26,    27,    28,    29,    30,    31,    32,
+       33,    34,    35,    36,    37,    38,    39,    40,    41,    42,
+       43,    44,    45,    46,    47,    48,    49,    50,    51,    52,
+       53,    54,    55,    56,    57,    58,    59,     5,     5,    62,
+        6,    64,    65,    66,    67,    68,    69,    70,    71,    72,
+       73,    74,    75,     3,     4,     5,     6,    60,    61,     5,
+       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
+       20,    21,    22,    23,    24,    25,    26,    27,    28,    29,
+       30,    31,    32,    33,    34,    35,    36,    37,    38,    39,
+       40,    41,    42,    43,    44,    45,    46,    47,    48,    49,
+       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
+       63,     5,    62,    61,    64,    65,    66,    67,    68,    69,
+       70,    71,    72,    73,    74,    75,     5,    12,    -1,    -1,
+        9
+ };
+ 
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+    symbol of state STATE-NUM.  */
+ static const unsigned char yystos[] =
+ {
+        0,    77,    78,     0,    79,     7,     8,    80,    81,    82,
+       83,     5,     9,     5,    84,    84,     6,     3,     4,     5,
+        6,    10,    11,    12,    13,    14,    15,    16,    17,    18,
+       19,    20,    21,    22,    23,    24,    25,    26,    27,    28,
+       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
+       39,    40,    41,    42,    43,    44,    45,    46,    47,    48,
+       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
+       59,    62,    64,    65,    66,    67,    68,    69,    70,    71,
+       72,    73,    74,    75,    85,     6,     5,     5,    60,    61,
+       63,     5,    61
+ };
+ 
+ #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
+ # define YYSIZE_T __SIZE_TYPE__
+ #endif
+ #if ! defined (YYSIZE_T) && defined (size_t)
+ # define YYSIZE_T size_t
+ #endif
+ #if ! defined (YYSIZE_T)
+ # if defined (__STDC__) || defined (__cplusplus)
+ #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+ #  define YYSIZE_T size_t
+ # endif
+ #endif
+ #if ! defined (YYSIZE_T)
+ # define YYSIZE_T unsigned int
+ #endif
+ 
+ #define yyerrok		(yyerrstatus = 0)
+ #define yyclearin	(yychar = YYEMPTY)
+ #define YYEMPTY		(-2)
+ #define YYEOF		0
+ 
+ #define YYACCEPT	goto yyacceptlab
+ #define YYABORT		goto yyabortlab
+ #define YYERROR		goto yyerrorlab
+ 
+ 
+ /* Like YYERROR except do call yyerror.  This remains here temporarily
+    to ease the transition to the new meaning of YYERROR, for GCC.
+    Once GCC version 2 has supplanted version 1, this can go.  */
+ 
+ #define YYFAIL		goto yyerrlab
+ 
+ #define YYRECOVERING()  (!!yyerrstatus)
+ 
+ #define YYBACKUP(Token, Value)					\
+ do								\
+   if (yychar == YYEMPTY && yylen == 1)				\
+     {								\
+       yychar = (Token);						\
+       yylval = (Value);						\
+       yytoken = YYTRANSLATE (yychar);				\
+       YYPOPSTACK;						\
+       goto yybackup;						\
+     }								\
+   else								\
+     { 								\
+       yyerror ("syntax error: cannot back up");\
+       YYERROR;							\
+     }								\
+ while (0)
+ 
+ #define YYTERROR	1
+ #define YYERRCODE	256
+ 
+ /* YYLLOC_DEFAULT -- Compute the default location (before the actions
+    are run).  */
+ 
+ #ifndef YYLLOC_DEFAULT
+ # define YYLLOC_DEFAULT(Current, Rhs, N)		\
+    ((Current).first_line   = (Rhs)[1].first_line,	\
+     (Current).first_column = (Rhs)[1].first_column,	\
+     (Current).last_line    = (Rhs)[N].last_line,	\
+     (Current).last_column  = (Rhs)[N].last_column)
+ #endif
+ 
+ /* YYLEX -- calling `yylex' with the right arguments.  */
+ 
+ #ifdef YYLEX_PARAM
+ # define YYLEX yylex (YYLEX_PARAM)
+ #else
+ # define YYLEX yylex ()
+ #endif
+ 
+ /* Enable debugging if requested.  */
+ #if YYDEBUG
+ 
+ # ifndef YYFPRINTF
+ #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+ #  define YYFPRINTF fprintf
+ # endif
+ 
+ # define YYDPRINTF(Args)			\
+ do {						\
+   if (yydebug)					\
+     YYFPRINTF Args;				\
+ } while (0)
+ 
+ # define YYDSYMPRINT(Args)			\
+ do {						\
+   if (yydebug)					\
+     yysymprint Args;				\
+ } while (0)
+ 
+ # define YYDSYMPRINTF(Title, Token, Value, Location)		\
+ do {								\
+   if (yydebug)							\
+     {								\
+       YYFPRINTF (stderr, "%s ", Title);				\
+       yysymprint (stderr, 					\
+                   Token, Value);	\
+       YYFPRINTF (stderr, "\n");					\
+     }								\
+ } while (0)
+ 
+ /*------------------------------------------------------------------.
+ | yy_stack_print -- Print the state stack from its BOTTOM up to its |
+ | TOP (included).                                                   |
+ `------------------------------------------------------------------*/
+ 
+ #if defined (__STDC__) || defined (__cplusplus)
+ static void
+ yy_stack_print (short *bottom, short *top)
+ #else
+ static void
+ yy_stack_print (bottom, top)
+     short *bottom;
+     short *top;
+ #endif
+ {
+   YYFPRINTF (stderr, "Stack now");
+   for (/* Nothing. */; bottom <= top; ++bottom)
+     YYFPRINTF (stderr, " %d", *bottom);
+   YYFPRINTF (stderr, "\n");
+ }
+ 
+ # define YY_STACK_PRINT(Bottom, Top)				\
+ do {								\
+   if (yydebug)							\
+     yy_stack_print ((Bottom), (Top));				\
+ } while (0)
+ 
+ 
+ /*------------------------------------------------.
+ | Report that the YYRULE is going to be reduced.  |
+ `------------------------------------------------*/
+ 
+ #if defined (__STDC__) || defined (__cplusplus)
+ static void
+ yy_reduce_print (int yyrule)
+ #else
+ static void
+ yy_reduce_print (yyrule)
+     int yyrule;
+ #endif
+ {
+   int yyi;
+   unsigned int yylno = yyrline[yyrule];
+   YYFPRINTF (stderr, "Reducing stack by rule %d (line %u), ",
+              yyrule - 1, yylno);
+   /* Print the symbols being reduced, and their result.  */
+   for (yyi = yyprhs[yyrule]; 0 <= yyrhs[yyi]; yyi++)
+     YYFPRINTF (stderr, "%s ", yytname [yyrhs[yyi]]);
+   YYFPRINTF (stderr, "-> %s\n", yytname [yyr1[yyrule]]);
+ }
+ 
+ # define YY_REDUCE_PRINT(Rule)		\
+ do {					\
+   if (yydebug)				\
+     yy_reduce_print (Rule);		\
+ } while (0)
+ 
+ /* Nonzero means print parse trace.  It is left uninitialized so that
+    multiple parsers can coexist.  */
+ int yydebug;
+ #else /* !YYDEBUG */
+ # define YYDPRINTF(Args)
+ # define YYDSYMPRINT(Args)
+ # define YYDSYMPRINTF(Title, Token, Value, Location)
+ # define YY_STACK_PRINT(Bottom, Top)
+ # define YY_REDUCE_PRINT(Rule)
+ #endif /* !YYDEBUG */
+ 
+ 
+ /* YYINITDEPTH -- initial size of the parser's stacks.  */
+ #ifndef	YYINITDEPTH
+ # define YYINITDEPTH 200
+ #endif
+ 
+ /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+    if the built-in stack extension method is used).
+ 
+    Do not make this value too large; the results are undefined if
+    SIZE_MAX < YYSTACK_BYTES (YYMAXDEPTH)
+    evaluated with infinite-precision integer arithmetic.  */
+ 
+ #if defined (YYMAXDEPTH) && YYMAXDEPTH == 0
+ # undef YYMAXDEPTH
+ #endif
+ 
+ #ifndef YYMAXDEPTH
+ # define YYMAXDEPTH 10000
+ #endif
+ 
+ 
+ 
+ #if YYERROR_VERBOSE
+ 
+ # ifndef yystrlen
+ #  if defined (__GLIBC__) && defined (_STRING_H)
+ #   define yystrlen strlen
+ #  else
+ /* Return the length of YYSTR.  */
+ static YYSIZE_T
+ #   if defined (__STDC__) || defined (__cplusplus)
+ yystrlen (const char *yystr)
+ #   else
+ yystrlen (yystr)
+      const char *yystr;
+ #   endif
+ {
+   register const char *yys = yystr;
+ 
+   while (*yys++ != '\0')
+     continue;
+ 
+   return yys - yystr - 1;
+ }
+ #  endif
+ # endif
+ 
+ # ifndef yystpcpy
+ #  if defined (__GLIBC__) && defined (_STRING_H) && defined (_GNU_SOURCE)
+ #   define yystpcpy stpcpy
+ #  else
+ /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+    YYDEST.  */
+ static char *
+ #   if defined (__STDC__) || defined (__cplusplus)
+ yystpcpy (char *yydest, const char *yysrc)
+ #   else
+ yystpcpy (yydest, yysrc)
+      char *yydest;
+      const char *yysrc;
+ #   endif
+ {
+   register char *yyd = yydest;
+   register const char *yys = yysrc;
+ 
+   while ((*yyd++ = *yys++) != '\0')
+     continue;
+ 
+   return yyd - 1;
+ }
+ #  endif
+ # endif
+ 
+ #endif /* !YYERROR_VERBOSE */
+ 
+ 
+ 
+ #if YYDEBUG
+ /*--------------------------------.
+ | Print this symbol on YYOUTPUT.  |
+ `--------------------------------*/
+ 
+ #if defined (__STDC__) || defined (__cplusplus)
+ static void
+ yysymprint (FILE *yyoutput, int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+ yysymprint (yyoutput, yytype, yyvaluep)
+     FILE *yyoutput;
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+   /* Pacify ``unused variable'' warnings.  */
+   (void) yyvaluep;
+ 
+   if (yytype < YYNTOKENS)
+     {
+       YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ # ifdef YYPRINT
+       YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+ # endif
+     }
+   else
+     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+ 
+   switch (yytype)
+     {
+       default:
+         break;
+     }
+   YYFPRINTF (yyoutput, ")");
+ }
+ 
+ #endif /* ! YYDEBUG */
+ /*-----------------------------------------------.
+ | Release the memory associated to this symbol.  |
+ `-----------------------------------------------*/
+ 
+ #if defined (__STDC__) || defined (__cplusplus)
+ static void
+ yydestruct (int yytype, YYSTYPE *yyvaluep)
+ #else
+ static void
+ yydestruct (yytype, yyvaluep)
+     int yytype;
+     YYSTYPE *yyvaluep;
+ #endif
+ {
+   /* Pacify ``unused variable'' warnings.  */
+   (void) yyvaluep;
+ 
+   switch (yytype)
+     {
+ 
+       default:
+         break;
+     }
+ }
+ 
+ 
+ /* Prevent warnings from -Wmissing-prototypes.  */
+ 
+ #ifdef YYPARSE_PARAM
+ # if defined (__STDC__) || defined (__cplusplus)
+ int yyparse (void *YYPARSE_PARAM);
+ # else
+ int yyparse ();
+ # endif
+ #else /* ! YYPARSE_PARAM */
+ #if defined (__STDC__) || defined (__cplusplus)
+ int yyparse (void);
+ #else
+ int yyparse ();
+ #endif
+ #endif /* ! YYPARSE_PARAM */
+ 
+ 
+ 
+ /* The lookahead symbol.  */
+ int yychar;
+ 
+ /* The semantic value of the lookahead symbol.  */
+ YYSTYPE yylval;
+ 
+ /* Number of syntax errors so far.  */
+ int yynerrs;
+ 
+ 
+ 
+ /*----------.
+ | yyparse.  |
+ `----------*/
+ 
+ #ifdef YYPARSE_PARAM
+ # if defined (__STDC__) || defined (__cplusplus)
+ int yyparse (void *YYPARSE_PARAM)
+ # else
+ int yyparse (YYPARSE_PARAM)
+   void *YYPARSE_PARAM;
+ # endif
+ #else /* ! YYPARSE_PARAM */
+ #if defined (__STDC__) || defined (__cplusplus)
+ int
+ yyparse (void)
+ #else
+ int
+ yyparse ()
+ 
+ #endif
+ #endif
+ {
+   
+   register int yystate;
+   register int yyn;
+   int yyresult;
+   /* Number of tokens to shift before error messages enabled.  */
+   int yyerrstatus;
+   /* Lookahead token as an internal (translated) token number.  */
+   int yytoken = 0;
+ 
+   /* Three stacks and their tools:
+      `yyss': related to states,
+      `yyvs': related to semantic values,
+      `yyls': related to locations.
+ 
+      Refer to the stacks thru separate pointers, to allow yyoverflow
+      to reallocate them elsewhere.  */
+ 
+   /* The state stack.  */
+   short	yyssa[YYINITDEPTH];
+   short *yyss = yyssa;
+   register short *yyssp;
+ 
+   /* The semantic value stack.  */
+   YYSTYPE yyvsa[YYINITDEPTH];
+   YYSTYPE *yyvs = yyvsa;
+   register YYSTYPE *yyvsp;
+ 
+ 
+ 
+ #define YYPOPSTACK   (yyvsp--, yyssp--)
+ 
+   YYSIZE_T yystacksize = YYINITDEPTH;
+ 
+   /* The variables used to return semantic value and location from the
+      action routines.  */
+   YYSTYPE yyval;
+ 
+ 
+   /* When reducing, the number of symbols on the RHS of the reduced
+      rule.  */
+   int yylen;
+ 
+   YYDPRINTF ((stderr, "Starting parse\n"));
+ 
+   yystate = 0;
+   yyerrstatus = 0;
+   yynerrs = 0;
+   yychar = YYEMPTY;		/* Cause a token to be read.  */
+ 
+   /* Initialize stack pointers.
+      Waste one element of value and location stack
+      so that they stay on the same level as the state stack.
+      The wasted elements are never initialized.  */
+ 
+   yyssp = yyss;
+   yyvsp = yyvs;
+ 
+   goto yysetstate;
+ 
+ /*------------------------------------------------------------.
+ | yynewstate -- Push a new state, which is found in yystate.  |
+ `------------------------------------------------------------*/
+  yynewstate:
+   /* In all cases, when you get here, the value and location stacks
+      have just been pushed. so pushing a state here evens the stacks.
+      */
+   yyssp++;
+ 
+  yysetstate:
+   *yyssp = yystate;
+ 
+   if (yyss + yystacksize - 1 <= yyssp)
+     {
+       /* Get the current used size of the three stacks, in elements.  */
+       YYSIZE_T yysize = yyssp - yyss + 1;
+ 
+ #ifdef yyoverflow
+       {
+ 	/* Give user a chance to reallocate the stack. Use copies of
+ 	   these so that the &'s don't force the real ones into
+ 	   memory.  */
+ 	YYSTYPE *yyvs1 = yyvs;
+ 	short *yyss1 = yyss;
+ 
+ 
+ 	/* Each stack pointer address is followed by the size of the
+ 	   data in use in that stack, in bytes.  This used to be a
+ 	   conditional around just the two extra args, but that might
+ 	   be undefined if yyoverflow is a macro.  */
+ 	yyoverflow ("parser stack overflow",
+ 		    &yyss1, yysize * sizeof (*yyssp),
+ 		    &yyvs1, yysize * sizeof (*yyvsp),
+ 
+ 		    &yystacksize);
+ 
+ 	yyss = yyss1;
+ 	yyvs = yyvs1;
+       }
+ #else /* no yyoverflow */
+ # ifndef YYSTACK_RELOCATE
+       goto yyoverflowlab;
+ # else
+       /* Extend the stack our own way.  */
+       if (YYMAXDEPTH <= yystacksize)
+ 	goto yyoverflowlab;
+       yystacksize *= 2;
+       if (YYMAXDEPTH < yystacksize)
+ 	yystacksize = YYMAXDEPTH;
+ 
+       {
+ 	short *yyss1 = yyss;
+ 	union yyalloc *yyptr =
+ 	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ 	if (! yyptr)
+ 	  goto yyoverflowlab;
+ 	YYSTACK_RELOCATE (yyss);
+ 	YYSTACK_RELOCATE (yyvs);
+ 
+ #  undef YYSTACK_RELOCATE
+ 	if (yyss1 != yyssa)
+ 	  YYSTACK_FREE (yyss1);
+       }
+ # endif
+ #endif /* no yyoverflow */
+ 
+       yyssp = yyss + yysize - 1;
+       yyvsp = yyvs + yysize - 1;
+ 
+ 
+       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ 		  (unsigned long int) yystacksize));
+ 
+       if (yyss + yystacksize - 1 <= yyssp)
+ 	YYABORT;
+     }
+ 
+   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+ 
+   goto yybackup;
+ 
+ /*-----------.
+ | yybackup.  |
+ `-----------*/
+ yybackup:
+ 
+ /* Do appropriate processing given the current state.  */
+ /* Read a lookahead token if we need one and don't already have one.  */
+ /* yyresume: */
+ 
+   /* First try to decide what to do without reference to lookahead token.  */
+ 
+   yyn = yypact[yystate];
+   if (yyn == YYPACT_NINF)
+     goto yydefault;
+ 
+   /* Not known => get a lookahead token if don't already have one.  */
+ 
+   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+   if (yychar == YYEMPTY)
+     {
+       YYDPRINTF ((stderr, "Reading a token: "));
+       yychar = YYLEX;
+     }
+ 
+   if (yychar <= YYEOF)
+     {
+       yychar = yytoken = YYEOF;
+       YYDPRINTF ((stderr, "Now at end of input.\n"));
+     }
+   else
+     {
+       yytoken = YYTRANSLATE (yychar);
+       YYDSYMPRINTF ("Next token is", yytoken, &yylval, &yylloc);
+     }
+ 
+   /* If the proper action on seeing token YYTOKEN is to reduce or to
+      detect an error, take that action.  */
+   yyn += yytoken;
+   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+     goto yydefault;
+   yyn = yytable[yyn];
+   if (yyn <= 0)
+     {
+       if (yyn == 0 || yyn == YYTABLE_NINF)
+ 	goto yyerrlab;
+       yyn = -yyn;
+       goto yyreduce;
+     }
+ 
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+   /* Shift the lookahead token.  */
+   YYDPRINTF ((stderr, "Shifting token %s, ", yytname[yytoken]));
+ 
+   /* Discard the token being shifted unless it is eof.  */
+   if (yychar != YYEOF)
+     yychar = YYEMPTY;
+ 
+   *++yyvsp = yylval;
+ 
+ 
+   /* Count tokens shifted since error; after three, turn off error
+      status.  */
+   if (yyerrstatus)
+     yyerrstatus--;
+ 
+   yystate = yyn;
+   goto yynewstate;
+ 
+ 
+ /*-----------------------------------------------------------.
+ | yydefault -- do the default action for the current state.  |
+ `-----------------------------------------------------------*/
+ yydefault:
+   yyn = yydefact[yystate];
+   if (yyn == 0)
+     goto yyerrlab;
+   goto yyreduce;
+ 
+ 
+ /*-----------------------------.
+ | yyreduce -- Do a reduction.  |
+ `-----------------------------*/
+ yyreduce:
+   /* yyn is the number of a rule to reduce with.  */
+   yylen = yyr2[yyn];
+ 
+   /* If YYLEN is nonzero, implement the default value of the action:
+      `$$ = $1'.
+ 
+      Otherwise, the following line sets YYVAL to garbage.
+      This behavior is undocumented and Bison
+      users should not rely upon it.  Assigning to YYVAL
+      unconditionally makes the parser a bit smaller, and it avoids a
+      GCC warning that YYVAL may be used uninitialized.  */
+   yyval = yyvsp[1-yylen];
+ 
+ 
+   YY_REDUCE_PRINT (yyn);
+   switch (yyn)
+     {
+         case 2:
+ #line 70 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { SCI->handle_module_start( ); ;}
+     break;
+ 
+   case 3:
+ #line 71 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.ModuleVal = SCI->handle_module_end( yyvsp[0].ModuleVal ); ;}
+     break;
+ 
+   case 4:
+ #line 74 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.ModuleVal = SCI->handle_definition_list_end( yyvsp[-1].ModuleVal, yyvsp[0].FunctionVal ); ;}
+     break;
+ 
+   case 5:
+ #line 75 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.ModuleVal = SCI->handle_definition_list_start(); ;}
+     break;
+ 
+   case 6:
+ #line 78 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = yyvsp[0].FunctionVal; ;}
+     break;
+ 
+   case 7:
+ #line 79 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = yyvsp[0].FunctionVal; ;}
+     break;
+ 
+   case 8:
+ #line 80 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = yyvsp[0].FunctionVal; ;}
+     break;
+ 
+   case 9:
+ #line 83 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = SCI->handle_forward( yyvsp[-1].StringVal ); ;}
+     break;
+ 
+   case 10:
+ #line 86 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = SCI->handle_main_definition(yyvsp[-1].FunctionVal); ;}
+     break;
+ 
+   case 11:
+ #line 89 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = SCI->handle_definition( yyvsp[-2].StringVal, yyvsp[-1].FunctionVal ); ;}
+     break;
+ 
+   case 12:
+ #line 92 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = SCI->handle_word_list_end( yyvsp[-1].FunctionVal, yyvsp[0].BasicBlockVal ); ;}
+     break;
+ 
+   case 13:
+ #line 93 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.FunctionVal = SCI->handle_word_list_start(); ;}
+     break;
+ 
+   case 14:
+ #line 99 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_if( yyvsp[-3].StringVal, yyvsp[-1].StringVal ); ;}
+     break;
+ 
+   case 15:
+ #line 100 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_if( yyvsp[-1].StringVal ); ;}
+     break;
+ 
+   case 16:
+ #line 101 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_while( yyvsp[-1].StringVal ); ;}
+     break;
+ 
+   case 17:
+ #line 104 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_identifier( yyvsp[0].StringVal ); ;}
+     break;
+ 
+   case 18:
+ #line 105 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_string( yyvsp[0].StringVal ); ;}
+     break;
+ 
+   case 19:
+ #line 106 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_integer( yyvsp[0].IntegerVal ); ;}
+     break;
+ 
+   case 20:
+ #line 109 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( TRUETOK ); ;}
+     break;
+ 
+   case 21:
+ #line 110 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( FALSETOK ); ;}
+     break;
+ 
+   case 22:
+ #line 111 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( LESS ); ;}
+     break;
+ 
+   case 23:
+ #line 112 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MORE ); ;}
+     break;
+ 
+   case 24:
+ #line 113 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( LESS_EQUAL ); ;}
+     break;
+ 
+   case 25:
+ #line 114 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MORE_EQUAL ); ;}
+     break;
+ 
+   case 26:
+ #line 115 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( NOT_EQUAL ); ;}
+     break;
+ 
+   case 27:
+ #line 116 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( EQUAL ); ;}
+     break;
+ 
+   case 28:
+ #line 117 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( PLUS ); ;}
+     break;
+ 
+   case 29:
+ #line 118 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MINUS ); ;}
+     break;
+ 
+   case 30:
+ #line 119 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( INCR ); ;}
+     break;
+ 
+   case 31:
+ #line 120 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( DECR ); ;}
+     break;
+ 
+   case 32:
+ #line 121 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MULT ); ;}
+     break;
+ 
+   case 33:
+ #line 122 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( DIV ); ;}
+     break;
+ 
+   case 34:
+ #line 123 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MODULUS ); ;}
+     break;
+ 
+   case 35:
+ #line 124 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( NEGATE ); ;}
+     break;
+ 
+   case 36:
+ #line 125 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( ABS ); ;}
+     break;
+ 
+   case 37:
+ #line 126 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MIN ); ;}
+     break;
+ 
+   case 38:
+ #line 127 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MAX ); ;}
+     break;
+ 
+   case 39:
+ #line 128 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( STAR_SLASH ); ;}
+     break;
+ 
+   case 40:
+ #line 129 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( AND ); ;}
+     break;
+ 
+   case 41:
+ #line 130 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( OR ); ;}
+     break;
+ 
+   case 42:
+ #line 131 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( XOR ); ;}
+     break;
+ 
+   case 43:
+ #line 132 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( LSHIFT ); ;}
+     break;
+ 
+   case 44:
+ #line 133 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( RSHIFT ); ;}
+     break;
+ 
+   case 45:
+ #line 134 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( DROP ); ;}
+     break;
+ 
+   case 46:
+ #line 135 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( DROP2 ); ;}
+     break;
+ 
+   case 47:
+ #line 136 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( NIP ); ;}
+     break;
+ 
+   case 48:
+ #line 137 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( NIP2 ); ;}
+     break;
+ 
+   case 49:
+ #line 138 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( DUP ); ;}
+     break;
+ 
+   case 50:
+ #line 139 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( DUP2 ); ;}
+     break;
+ 
+   case 51:
+ #line 140 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( SWAP ); ;}
+     break;
+ 
+   case 52:
+ #line 141 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( SWAP2 ); ;}
+     break;
+ 
+   case 53:
+ #line 142 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( OVER ); ;}
+     break;
+ 
+   case 54:
+ #line 143 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( OVER2 ); ;}
+     break;
+ 
+   case 55:
+ #line 144 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( ROT ); ;}
+     break;
+ 
+   case 56:
+ #line 145 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( ROT2 ); ;}
+     break;
+ 
+   case 57:
+ #line 146 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( RROT ); ;}
+     break;
+ 
+   case 58:
+ #line 147 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( RROT2 ); ;}
+     break;
+ 
+   case 59:
+ #line 148 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( TUCK ); ;}
+     break;
+ 
+   case 60:
+ #line 149 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( TUCK2 ); ;}
+     break;
+ 
+   case 61:
+ #line 150 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( ROLL ); ;}
+     break;
+ 
+   case 62:
+ #line 151 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( PICK ); ;}
+     break;
+ 
+   case 63:
+ #line 152 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( SELECT ); ;}
+     break;
+ 
+   case 64:
+ #line 153 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( MALLOC ); ;}
+     break;
+ 
+   case 65:
+ #line 154 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( FREE ); ;}
+     break;
+ 
+   case 66:
+ #line 155 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( GET ); ;}
+     break;
+ 
+   case 67:
+ #line 156 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( PUT ); ;}
+     break;
+ 
+   case 68:
+ #line 157 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( RECURSE ); ;}
+     break;
+ 
+   case 69:
+ #line 158 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( RETURN ); ;}
+     break;
+ 
+   case 70:
+ #line 159 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( EXIT ); ;}
+     break;
+ 
+   case 71:
+ #line 160 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( TAB ); ;}
+     break;
+ 
+   case 72:
+ #line 161 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( SPACE ); ;}
+     break;
+ 
+   case 73:
+ #line 162 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( CR ); ;}
+     break;
+ 
+   case 74:
+ #line 163 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( IN_STR ); ;}
+     break;
+ 
+   case 75:
+ #line 164 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( IN_NUM ); ;}
+     break;
+ 
+   case 76:
+ #line 165 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( IN_CHAR ); ;}
+     break;
+ 
+   case 77:
+ #line 166 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( OUT_STR ); ;}
+     break;
+ 
+   case 78:
+ #line 167 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( OUT_NUM ); ;}
+     break;
+ 
+   case 79:
+ #line 168 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( OUT_CHAR ); ;}
+     break;
+ 
+   case 80:
+ #line 169 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+     { yyval.BasicBlockVal = SCI->handle_word( DUMP ); ;}
+     break;
+ 
+ 
+     }
+ 
+ /* Line 1000 of yacc.c.  */
+ #line 1669 "StackerParser.tab.c"
+ 
+   yyvsp -= yylen;
+   yyssp -= yylen;
+ 
+ 
+   YY_STACK_PRINT (yyss, yyssp);
+ 
+   *++yyvsp = yyval;
+ 
+ 
+   /* Now `shift' the result of the reduction.  Determine what state
+      that goes to, based on the state we popped back to and the rule
+      number reduced by.  */
+ 
+   yyn = yyr1[yyn];
+ 
+   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+     yystate = yytable[yystate];
+   else
+     yystate = yydefgoto[yyn - YYNTOKENS];
+ 
+   goto yynewstate;
+ 
+ 
+ /*------------------------------------.
+ | yyerrlab -- here on detecting error |
+ `------------------------------------*/
+ yyerrlab:
+   /* If not already recovering from an error, report this error.  */
+   if (!yyerrstatus)
+     {
+       ++yynerrs;
+ #if YYERROR_VERBOSE
+       yyn = yypact[yystate];
+ 
+       if (YYPACT_NINF < yyn && yyn < YYLAST)
+ 	{
+ 	  YYSIZE_T yysize = 0;
+ 	  int yytype = YYTRANSLATE (yychar);
+ 	  const char* yyprefix;
+ 	  char *yymsg;
+ 	  int yyx;
+ 
+ 	  /* Start YYX at -YYN if negative to avoid negative indexes in
+ 	     YYCHECK.  */
+ 	  int yyxbegin = yyn < 0 ? -yyn : 0;
+ 
+ 	  /* Stay within bounds of both yycheck and yytname.  */
+ 	  int yychecklim = YYLAST - yyn;
+ 	  int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ 	  int yycount = 0;
+ 
+ 	  yyprefix = ", expecting ";
+ 	  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ 	    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ 	      {
+ 		yysize += yystrlen (yyprefix) + yystrlen (yytname [yyx]);
+ 		yycount += 1;
+ 		if (yycount == 5)
+ 		  {
+ 		    yysize = 0;
+ 		    break;
+ 		  }
+ 	      }
+ 	  yysize += (sizeof ("syntax error, unexpected ")
+ 		     + yystrlen (yytname[yytype]));
+ 	  yymsg = (char *) YYSTACK_ALLOC (yysize);
+ 	  if (yymsg != 0)
+ 	    {
+ 	      char *yyp = yystpcpy (yymsg, "syntax error, unexpected ");
+ 	      yyp = yystpcpy (yyp, yytname[yytype]);
+ 
+ 	      if (yycount < 5)
+ 		{
+ 		  yyprefix = ", expecting ";
+ 		  for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ 		    if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+ 		      {
+ 			yyp = yystpcpy (yyp, yyprefix);
+ 			yyp = yystpcpy (yyp, yytname[yyx]);
+ 			yyprefix = " or ";
+ 		      }
+ 		}
+ 	      yyerror (yymsg);
+ 	      YYSTACK_FREE (yymsg);
+ 	    }
+ 	  else
+ 	    yyerror ("syntax error; also virtual memory exhausted");
+ 	}
+       else
+ #endif /* YYERROR_VERBOSE */
+ 	yyerror ("syntax error");
+     }
+ 
+ 
+ 
+   if (yyerrstatus == 3)
+     {
+       /* If just tried and failed to reuse lookahead token after an
+ 	 error, discard it.  */
+ 
+       if (yychar <= YYEOF)
+         {
+           /* If at end of input, pop the error token,
+ 	     then the rest of the stack, then return failure.  */
+ 	  if (yychar == YYEOF)
+ 	     for (;;)
+ 	       {
+ 		 YYPOPSTACK;
+ 		 if (yyssp == yyss)
+ 		   YYABORT;
+ 		 YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+ 		 yydestruct (yystos[*yyssp], yyvsp);
+ 	       }
+         }
+       else
+ 	{
+ 	  YYDSYMPRINTF ("Error: discarding", yytoken, &yylval, &yylloc);
+ 	  yydestruct (yytoken, &yylval);
+ 	  yychar = YYEMPTY;
+ 
+ 	}
+     }
+ 
+   /* Else will try to reuse lookahead token after shifting the error
+      token.  */
+   goto yyerrlab1;
+ 
+ 
+ /*---------------------------------------------------.
+ | yyerrorlab -- error raised explicitly by YYERROR.  |
+ `---------------------------------------------------*/
+ yyerrorlab:
+ 
+ #ifdef __GNUC__
+   /* Pacify GCC when the user code never invokes YYERROR and the label
+      yyerrorlab therefore never appears in user code.  */
+   if (0)
+      goto yyerrorlab;
+ #endif
+ 
+   yyvsp -= yylen;
+   yyssp -= yylen;
+   yystate = *yyssp;
+   goto yyerrlab1;
+ 
+ 
+ /*-------------------------------------------------------------.
+ | yyerrlab1 -- common code for both syntax error and YYERROR.  |
+ `-------------------------------------------------------------*/
+ yyerrlab1:
+   yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+ 
+   for (;;)
+     {
+       yyn = yypact[yystate];
+       if (yyn != YYPACT_NINF)
+ 	{
+ 	  yyn += YYTERROR;
+ 	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ 	    {
+ 	      yyn = yytable[yyn];
+ 	      if (0 < yyn)
+ 		break;
+ 	    }
+ 	}
+ 
+       /* Pop the current state because it cannot handle the error token.  */
+       if (yyssp == yyss)
+ 	YYABORT;
+ 
+       YYDSYMPRINTF ("Error: popping", yystos[*yyssp], yyvsp, yylsp);
+       yydestruct (yystos[yystate], yyvsp);
+       YYPOPSTACK;
+       yystate = *yyssp;
+       YY_STACK_PRINT (yyss, yyssp);
+     }
+ 
+   if (yyn == YYFINAL)
+     YYACCEPT;
+ 
+   YYDPRINTF ((stderr, "Shifting error token, "));
+ 
+   *++yyvsp = yylval;
+ 
+ 
+   yystate = yyn;
+   goto yynewstate;
+ 
+ 
+ /*-------------------------------------.
+ | yyacceptlab -- YYACCEPT comes here.  |
+ `-------------------------------------*/
+ yyacceptlab:
+   yyresult = 0;
+   goto yyreturn;
+ 
+ /*-----------------------------------.
+ | yyabortlab -- YYABORT comes here.  |
+ `-----------------------------------*/
+ yyabortlab:
+   yyresult = 1;
+   goto yyreturn;
+ 
+ #ifndef yyoverflow
+ /*----------------------------------------------.
+ | yyoverflowlab -- parser overflow comes here.  |
+ `----------------------------------------------*/
+ yyoverflowlab:
+   yyerror ("parser stack overflow");
+   yyresult = 2;
+   /* Fall through.  */
+ #endif
+ 
+ yyreturn:
+ #ifndef yyoverflow
+   if (yyss != yyssa)
+     YYSTACK_FREE (yyss);
+ #endif
+   return yyresult;
+ }
+ 
+ 
+ #line 171 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+ 
+ 
+ /* Handle messages a little more nicely than the default yyerror */
+ int yyerror(const char *ErrorMsg) {
+   std::string where 
+     = std::string((SCI->filename() == "-") ? std::string("<stdin>") : SCI->filename())
+                   + ":" + utostr((unsigned) Stackerlineno ) + ": ";
+   std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
+   if (yychar == YYEMPTY)
+     errMsg += "end-of-file.";
+   else
+     errMsg += "token: '" + std::string(Stackertext, Stackerleng) + "'";
+   StackerCompiler::ThrowException(errMsg);
+   return 0;
+ }
+ 


Index: llvm/projects/Stacker/lib/compiler/StackerParser.h.cvs
diff -c /dev/null llvm/projects/Stacker/lib/compiler/StackerParser.h.cvs:1.1
*** /dev/null	Wed Feb 15 01:26:19 2006
--- llvm/projects/Stacker/lib/compiler/StackerParser.h.cvs	Wed Feb 15 01:26:07 2006
***************
*** 0 ****
--- 1,203 ----
+ /* A Bison parser, made by GNU Bison 1.875c.  */
+ 
+ /* Skeleton parser for Yacc-like parsing with Bison,
+    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
+ 
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2, or (at your option)
+    any later version.
+ 
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+ 
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 59 Temple Place - Suite 330,
+    Boston, MA 02111-1307, USA.  */
+ 
+ /* As a special exception, when this file is copied by Bison into a
+    Bison output file, you may use that output file without restriction.
+    This special exception was added by the Free Software Foundation
+    in version 1.24 of Bison.  */
+ 
+ /* Tokens.  */
+ #ifndef YYTOKENTYPE
+ # define YYTOKENTYPE
+    /* Put the tokens into the symbol table, so that GDB and other debuggers
+       know about them.  */
+    enum yytokentype {
+      INTEGER = 258,
+      STRING = 259,
+      IDENTIFIER = 260,
+      SEMI = 261,
+      COLON = 262,
+      FORWARD = 263,
+      MAIN = 264,
+      DUMP = 265,
+      TRUETOK = 266,
+      FALSETOK = 267,
+      LESS = 268,
+      MORE = 269,
+      LESS_EQUAL = 270,
+      MORE_EQUAL = 271,
+      NOT_EQUAL = 272,
+      EQUAL = 273,
+      PLUS = 274,
+      MINUS = 275,
+      INCR = 276,
+      DECR = 277,
+      MULT = 278,
+      DIV = 279,
+      MODULUS = 280,
+      NEGATE = 281,
+      ABS = 282,
+      MIN = 283,
+      MAX = 284,
+      STAR_SLASH = 285,
+      AND = 286,
+      OR = 287,
+      XOR = 288,
+      LSHIFT = 289,
+      RSHIFT = 290,
+      DROP = 291,
+      DROP2 = 292,
+      NIP = 293,
+      NIP2 = 294,
+      DUP = 295,
+      DUP2 = 296,
+      SWAP = 297,
+      SWAP2 = 298,
+      OVER = 299,
+      OVER2 = 300,
+      ROT = 301,
+      ROT2 = 302,
+      RROT = 303,
+      RROT2 = 304,
+      TUCK = 305,
+      TUCK2 = 306,
+      ROLL = 307,
+      PICK = 308,
+      SELECT = 309,
+      MALLOC = 310,
+      FREE = 311,
+      GET = 312,
+      PUT = 313,
+      IF = 314,
+      ELSE = 315,
+      ENDIF = 316,
+      WHILE = 317,
+      END = 318,
+      RECURSE = 319,
+      RETURN = 320,
+      EXIT = 321,
+      TAB = 322,
+      SPACE = 323,
+      CR = 324,
+      IN_STR = 325,
+      IN_NUM = 326,
+      IN_CHAR = 327,
+      OUT_STR = 328,
+      OUT_NUM = 329,
+      OUT_CHAR = 330
+    };
+ #endif
+ #define INTEGER 258
+ #define STRING 259
+ #define IDENTIFIER 260
+ #define SEMI 261
+ #define COLON 262
+ #define FORWARD 263
+ #define MAIN 264
+ #define DUMP 265
+ #define TRUETOK 266
+ #define FALSETOK 267
+ #define LESS 268
+ #define MORE 269
+ #define LESS_EQUAL 270
+ #define MORE_EQUAL 271
+ #define NOT_EQUAL 272
+ #define EQUAL 273
+ #define PLUS 274
+ #define MINUS 275
+ #define INCR 276
+ #define DECR 277
+ #define MULT 278
+ #define DIV 279
+ #define MODULUS 280
+ #define NEGATE 281
+ #define ABS 282
+ #define MIN 283
+ #define MAX 284
+ #define STAR_SLASH 285
+ #define AND 286
+ #define OR 287
+ #define XOR 288
+ #define LSHIFT 289
+ #define RSHIFT 290
+ #define DROP 291
+ #define DROP2 292
+ #define NIP 293
+ #define NIP2 294
+ #define DUP 295
+ #define DUP2 296
+ #define SWAP 297
+ #define SWAP2 298
+ #define OVER 299
+ #define OVER2 300
+ #define ROT 301
+ #define ROT2 302
+ #define RROT 303
+ #define RROT2 304
+ #define TUCK 305
+ #define TUCK2 306
+ #define ROLL 307
+ #define PICK 308
+ #define SELECT 309
+ #define MALLOC 310
+ #define FREE 311
+ #define GET 312
+ #define PUT 313
+ #define IF 314
+ #define ELSE 315
+ #define ENDIF 316
+ #define WHILE 317
+ #define END 318
+ #define RECURSE 319
+ #define RETURN 320
+ #define EXIT 321
+ #define TAB 322
+ #define SPACE 323
+ #define CR 324
+ #define IN_STR 325
+ #define IN_NUM 326
+ #define IN_CHAR 327
+ #define OUT_STR 328
+ #define OUT_NUM 329
+ #define OUT_CHAR 330
+ 
+ 
+ 
+ 
+ #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
+ #line 35 "/proj/llvm/build/projects/Stacker/../../../llvm/projects/Stacker/lib/compiler/StackerParser.y"
+ typedef union YYSTYPE {
+   llvm::Module*		ModuleVal;
+   llvm::Function* 	FunctionVal;
+   llvm::BasicBlock*	BasicBlockVal;
+   int64_t               IntegerVal;
+   char*                 StringVal;
+ } YYSTYPE;
+ /* Line 1275 of yacc.c.  */
+ #line 195 "StackerParser.tab.h"
+ # define yystype YYSTYPE /* obsolescent; will be withdrawn */
+ # define YYSTYPE_IS_DECLARED 1
+ # define YYSTYPE_IS_TRIVIAL 1
+ #endif
+ 
+ extern YYSTYPE Stackerlval;
+ 
+ 
+ 


Index: llvm/projects/Stacker/lib/compiler/StackerParser.y.cvs
diff -c /dev/null llvm/projects/Stacker/lib/compiler/StackerParser.y.cvs:1.1
*** /dev/null	Wed Feb 15 01:26:19 2006
--- llvm/projects/Stacker/lib/compiler/StackerParser.y.cvs	Wed Feb 15 01:26:07 2006
***************
*** 0 ****
--- 1,185 ----
+ //===-- StackerParser.y - Parser for Stacker programs -----------*- C++ -*-===//
+ // 
+ //                     The LLVM Compiler Infrastructure
+ //
+ // This file was developed by the LLVM research group and is distributed under
+ // the University of Illinois Open Source License. See LICENSE.TXT for details.
+ // 
+ //===----------------------------------------------------------------------===//
+ //
+ // This file implements the bison parser for Stacker programs.
+ //
+ //===----------------------------------------------------------------------===//
+ 
+ %{
+ #include "StackerCompiler.h"
+ #include "llvm/SymbolTable.h"
+ #include "llvm/Module.h"
+ #include "llvm/Instructions.h"
+ #include "llvm/ADT/STLExtras.h"
+ #include "llvm/ADT/DepthFirstIterator.h"
+ #include <list>
+ #include <utility>
+ #include <algorithm>
+ 
+ #define YYERROR_VERBOSE 1
+ #define SCI StackerCompiler::TheInstance
+ 
+ int yyerror(const char *ErrorMsg); // Forward declarations to prevent "implicit
+ int yylex();                       // declaration" of xxx warnings.
+ int yyparse();
+ 
+ %}
+ 
+ %union 
+ {
+   llvm::Module*		ModuleVal;
+   llvm::Function* 	FunctionVal;
+   llvm::BasicBlock*	BasicBlockVal;
+   int64_t               IntegerVal;
+   char*                 StringVal;
+ }
+ 
+ /* Typed Productions */
+ %type <ModuleVal>	Module DefinitionList
+ %type <FunctionVal>	Definition ForwardDef ColonDef MainDef
+ %type <FunctionVal>	WordList
+ %type <BasicBlockVal>	Word
+ 
+ /* Typed Tokens */
+ %token <IntegerVal>	INTEGER
+ %token <StringVal>	STRING IDENTIFIER
+ 
+ /* Terminal Tokens */
+ %token 			SEMI COLON FORWARD MAIN DUMP
+ %token  		TRUETOK FALSETOK LESS MORE LESS_EQUAL MORE_EQUAL NOT_EQUAL EQUAL
+ %token 			PLUS MINUS INCR DECR MULT DIV MODULUS NEGATE ABS MIN MAX STAR_SLASH 
+ %token 			AND OR XOR LSHIFT RSHIFT 
+ %token 			DROP DROP2 NIP NIP2 DUP DUP2 SWAP SWAP2	OVER OVER2 ROT ROT2 
+ %token			RROT RROT2 TUCK TUCK2 ROLL PICK SELECT
+ %token 			MALLOC FREE GET PUT
+ %token 			IF ELSE ENDIF WHILE END RECURSE RETURN EXIT
+ %token 			TAB SPACE CR IN_STR IN_NUM IN_CHAR OUT_STR OUT_NUM OUT_CHAR
+ 
+ /* Start Token */
+ %start Module
+ 
+ %%
+ 
+ /* A module is just a DefinitionList */
+ Module 		: 				{ SCI->handle_module_start( ); } 
+ 	 	DefinitionList 			{ $$ = SCI->handle_module_end( $2 ); } ;
+ 
+ /* A Definitionlist is just a sequence of definitions */
+ DefinitionList	: DefinitionList Definition 	{ $$ = SCI->handle_definition_list_end( $1, $2 ); }
+ 		| /* empty */ 			{ $$ = SCI->handle_definition_list_start(); } ;
+ 
+ /* A definition can be one of three flavors */
+ Definition 	: ForwardDef 			{ $$ = $1; }
+ 	   	| ColonDef			{ $$ = $1; }
+ 	   	| MainDef			{ $$ = $1; } ;
+ 
+ /* Forward definitions just introduce a name */
+ ForwardDef : FORWARD IDENTIFIER SEMI 		{ $$ = SCI->handle_forward( $2 ); } ;
+ 
+ /* The main definition has to generate additional code so we treat it specially */
+ MainDef : COLON MAIN WordList SEMI		{ $$ = SCI->handle_main_definition($3); } ;
+ 
+ /* Regular definitions have a name and a WordList */
+ ColonDef : COLON IDENTIFIER WordList SEMI 	{ $$ = SCI->handle_definition( $2, $3 ); } ;
+ 
+ /* A WordList is just a sequence of words */
+ WordList : WordList Word 			{ $$ = SCI->handle_word_list_end( $1, $2 ); } 
+ 	 | /* empty */				{ $$ = SCI->handle_word_list_start(); } ;
+ 
+ /* A few "words" have a funky syntax */
+ /* FIXME: The body of compound words can currently only be function calls */
+ /* This is not acceptable, it should be a WordList, but that produces a Function */
+ /* Which is hard to merge into the function the compound statement is working on */
+ Word : IF IDENTIFIER ELSE IDENTIFIER ENDIF	{ $$ = SCI->handle_if( $2, $4 ); } 
+      | IF IDENTIFIER ENDIF			{ $$ = SCI->handle_if( $2 ); } 
+      | WHILE IDENTIFIER END			{ $$ = SCI->handle_while( $2 ); } ;
+ 
+ /* A few words are handled specially */
+ Word : IDENTIFIER 				{ $$ = SCI->handle_identifier( $1 ); } ;
+ Word : STRING 					{ $$ = SCI->handle_string( $1 ); } ;
+ Word : INTEGER 					{ $$ = SCI->handle_integer( $1 ); } ;
+ 
+ /* Everything else is a terminal symbol and goes to handle_word */
+ Word : TRUETOK					{ $$ = SCI->handle_word( TRUETOK ); } ;
+ Word : FALSETOK					{ $$ = SCI->handle_word( FALSETOK ); } ;
+ Word : LESS					{ $$ = SCI->handle_word( LESS ); } ;
+ Word : MORE					{ $$ = SCI->handle_word( MORE ); } ;
+ Word : LESS_EQUAL				{ $$ = SCI->handle_word( LESS_EQUAL ); } ;
+ Word : MORE_EQUAL				{ $$ = SCI->handle_word( MORE_EQUAL ); } ;
+ Word : NOT_EQUAL				{ $$ = SCI->handle_word( NOT_EQUAL ); } ;
+ Word : EQUAL					{ $$ = SCI->handle_word( EQUAL ); } ;
+ Word : PLUS					{ $$ = SCI->handle_word( PLUS ); } ;
+ Word : MINUS					{ $$ = SCI->handle_word( MINUS ); } ;
+ Word : INCR					{ $$ = SCI->handle_word( INCR ); } ;
+ Word : DECR					{ $$ = SCI->handle_word( DECR ); } ;
+ Word : MULT					{ $$ = SCI->handle_word( MULT ); } ;
+ Word : DIV					{ $$ = SCI->handle_word( DIV ); } ;
+ Word : MODULUS					{ $$ = SCI->handle_word( MODULUS ); } ;
+ Word : NEGATE					{ $$ = SCI->handle_word( NEGATE ); } ;
+ Word : ABS					{ $$ = SCI->handle_word( ABS ); } ;
+ Word : MIN					{ $$ = SCI->handle_word( MIN ); } ;
+ Word : MAX					{ $$ = SCI->handle_word( MAX ); } ;
+ Word : STAR_SLASH				{ $$ = SCI->handle_word( STAR_SLASH ); } ;
+ Word : AND					{ $$ = SCI->handle_word( AND ); } ;
+ Word : OR					{ $$ = SCI->handle_word( OR ); } ;
+ Word : XOR					{ $$ = SCI->handle_word( XOR ); } ;
+ Word : LSHIFT					{ $$ = SCI->handle_word( LSHIFT ); } ;
+ Word : RSHIFT					{ $$ = SCI->handle_word( RSHIFT ); } ;
+ Word : DROP					{ $$ = SCI->handle_word( DROP ); } ;
+ Word : DROP2					{ $$ = SCI->handle_word( DROP2 ); } ;
+ Word : NIP					{ $$ = SCI->handle_word( NIP ); } ;
+ Word : NIP2					{ $$ = SCI->handle_word( NIP2 ); } ;
+ Word : DUP					{ $$ = SCI->handle_word( DUP ); } ;
+ Word : DUP2					{ $$ = SCI->handle_word( DUP2 ); } ;
+ Word : SWAP					{ $$ = SCI->handle_word( SWAP ); } ;
+ Word : SWAP2					{ $$ = SCI->handle_word( SWAP2 ); } ;
+ Word : OVER					{ $$ = SCI->handle_word( OVER ); } ;
+ Word : OVER2					{ $$ = SCI->handle_word( OVER2 ); } ;
+ Word : ROT					{ $$ = SCI->handle_word( ROT ); } ;
+ Word : ROT2					{ $$ = SCI->handle_word( ROT2 ); } ;
+ Word : RROT					{ $$ = SCI->handle_word( RROT ); } ;
+ Word : RROT2					{ $$ = SCI->handle_word( RROT2 ); } ;
+ Word : TUCK					{ $$ = SCI->handle_word( TUCK ); } ;
+ Word : TUCK2					{ $$ = SCI->handle_word( TUCK2 ); } ;
+ Word : ROLL					{ $$ = SCI->handle_word( ROLL ); } ;
+ Word : PICK					{ $$ = SCI->handle_word( PICK ); } ;
+ Word : SELECT					{ $$ = SCI->handle_word( SELECT ); } ;
+ Word : MALLOC					{ $$ = SCI->handle_word( MALLOC ); } ;
+ Word : FREE					{ $$ = SCI->handle_word( FREE ); } ;
+ Word : GET					{ $$ = SCI->handle_word( GET ); } ;
+ Word : PUT					{ $$ = SCI->handle_word( PUT ); } ;
+ Word : RECURSE					{ $$ = SCI->handle_word( RECURSE ); } ;
+ Word : RETURN					{ $$ = SCI->handle_word( RETURN ); } ;
+ Word : EXIT					{ $$ = SCI->handle_word( EXIT ); } ;
+ Word : TAB					{ $$ = SCI->handle_word( TAB ); };
+ Word : SPACE					{ $$ = SCI->handle_word( SPACE ); } ;
+ Word : CR					{ $$ = SCI->handle_word( CR ); } ;
+ Word : IN_STR					{ $$ = SCI->handle_word( IN_STR ); } ;
+ Word : IN_NUM					{ $$ = SCI->handle_word( IN_NUM ); } ;
+ Word : IN_CHAR					{ $$ = SCI->handle_word( IN_CHAR ); } ;
+ Word : OUT_STR					{ $$ = SCI->handle_word( OUT_STR ); } ;
+ Word : OUT_NUM					{ $$ = SCI->handle_word( OUT_NUM ); } ;
+ Word : OUT_CHAR					{ $$ = SCI->handle_word( OUT_CHAR ); } ;
+ Word : DUMP					{ $$ = SCI->handle_word( DUMP ); } ;
+ 
+ %%
+ 
+ /* Handle messages a little more nicely than the default yyerror */
+ int yyerror(const char *ErrorMsg) {
+   std::string where 
+     = std::string((SCI->filename() == "-") ? std::string("<stdin>") : SCI->filename())
+                   + ":" + utostr((unsigned) Stackerlineno ) + ": ";
+   std::string errMsg = std::string(ErrorMsg) + "\n" + where + " while reading ";
+   if (yychar == YYEMPTY)
+     errMsg += "end-of-file.";
+   else
+     errMsg += "token: '" + std::string(Stackertext, Stackerleng) + "'";
+   StackerCompiler::ThrowException(errMsg);
+   return 0;
+ }






More information about the llvm-commits mailing list