extern char *malloc(), *realloc();

# line 2 "lang.y"
/*
 * This is the grammar definition of LPC. Expect one shift/reduce conflict,
 * because of if-then-else. The default, to shift this conflict, is the
 * correct solution.
 */
#include <string.h>
#include <stdio.h>
#include "lint.h"
#include "lnode.h"
#include "config.h"
#include "interpret.h"
#include "object.h"

#define YYMAXDEPTH	600

struct lnode *prog, *heart_beat;
int variable_count;
void yyerror(), free_all_local_names(), add_local_name(), smart_log();
extern int yylex(), check_deklared();
static void copy_variables();
int static_variable_flag;

char *argument_name;	/* The name of the current argument. */
char *xalloc(), *string_copy();

extern int current_line;
/*
 * 'inherit_file' is used as a flag. If it is set to a string
 * after yyparse(), this string should be loaded as an object,
 * and the original object must be loaded again.
 * 'inherit_ob' will point to the super class object. This value is saved
 * so that load_object() can set up pointers to it.
 */
extern char *current_file, *inherit_file;

extern struct object *find_object2();

struct object *inherit_ob;

char *local_names[MAX_LOCAL];
int current_number_of_locals = 0;
static int num_arg;

# line 75 "lang.y"
typedef union 
{
	struct lnode *lnode;
	int number;
	char *string;
} YYSTYPE;
# define F_THIS_PLAYER 257
# define F_IF 258
# define F_IDENTIFIER 259
# define F_LAND 260
# define F_LOR 261
# define F_STATUS 262
# define F_SET_TRUE 263
# define F_SET_FALSE 264
# define F_CONS 265
# define F_RETURN 266
# define F_NOT 267
# define F_WRITE 268
# define F_STRING 269
# define F_ADD_VERB 270
# define F_ADD_ADJ 271
# define F_ADD_SUBST 272
# define F_ADD_ACTION 273
# define F_MOVE_OBJECT 274
# define F_INC 275
# define F_DEC 276
# define F_POST_INC 277
# define F_POST_DEC 278
# define F_COMMA 279
# define F_COND 280
# define F_QUERY_LOAD_AVERAGE 281
# define F_THIS_VERB 282
# define F_NUMBER 283
# define F_ASSIGN 284
# define F_INT 285
# define F_CALL_OTHER 286
# define F_ADD 287
# define F_SUBTRACT 288
# define F_MULTIPLY 289
# define F_DIVIDE 290
# define F_LT 291
# define F_GT 292
# define F_EQ 293
# define F_GE 294
# define F_LE 295
# define F_ARGUMENT 296
# define F_FUNCTION 297
# define F_CLONE_OBJECT 298
# define F_THIS_OBJECT 299
# define F_SAVE_OBJECT 300
# define F_RESTORE_OBJECT 301
# define F_NE 302
# define F_ENVIRONMENT 303
# define F_ADD_EQ 304
# define F_SUB_EQ 305
# define F_DIV_EQ 306
# define F_MULT_EQ 307
# define F_PRESENT 308
# define F_COMMAND 309
# define F_SET_LIGHT 310
# define F_DESTRUCT 311
# define F_CREATE_WIZARD 312
# define F_NEGATE 313
# define F_SAY 314
# define F_STRLEN 315
# define F_SUBSCRIPT 316
# define F_WHILE 317
# define F_BREAK 318
# define F_SHUTDOWN 319
# define F_LOG_FILE 320
# define F_DO 321
# define F_FOR 322
# define F_ADD_XVERB 323
# define F_FIND_CALL_OUT 324
# define F_READ_FILE 325
# define F_FILTER_OBJECTS 326
# define F_SSCANF 327
# define F_SHOUT 328
# define F_STRING_DECL 329
# define F_LOCAL_NAME 330
# define F_FIRST_INVENTORY 331
# define F_NEXT_INVENTORY 332
# define F_ENABLE_COMMANDS 333
# define F_RANDOM 334
# define F_INPUT_TO 335
# define F_CRYPT 336
# define F_LS 337
# define F_CAT 338
# define F_FIND_LIVING 339
# define F_TELL_OBJECT 340
# define F_PEOPLE 341
# define F_ED 342
# define F_LIVING 343
# define F_LOWER_CASE 344
# define F_ELSE 345
# define F_CAPITALIZE 346
# define F_SET_HEART_BEAT 347
# define F_SNOOP 348
# define F_TELL_ROOM 349
# define F_FIND_OBJECT 350
# define F_RM 351
# define F_CONST0 352
# define F_CONST1 353
# define F_BLOCK 354
# define F_TRANSFER 355
# define F_REGCOMP 356
# define F_REGEXEC 357
# define F_LOCALCMD 358
# define F_SWAP 359
# define F_CONTINUE 360
# define F_ADD_WORTH 361
# define F_TIME 362
# define F_MOD 363
# define F_MOD_EQ 364
# define F_QUERY_IP_NUMBER 365
# define F_INHERIT 366
# define F_COLON_COLON 367
# define F_CREATOR 368
# define F_STATIC 369
# define F_CALL_OUT 370
# define F_REMOVE_CALL_OUT 371
# define F_COMBINE_FREE_LIST 372
# define F_ALLOCATE 373
# define F_SIZEOF 374
# define F_DISABLE_COMMANDS 375
# define F_CTIME 376
# define F_INTP 377
# define F_STRINGP 378
# define F_OBJECTP 379
# define F_POINTERP 380
# define F_USERS 381
# define F_ARROW 382
# define F_PREVIOUS_OBJECT 383
# define F_AGGREGATE 384
# define F_EXTRACT 385
# define F_FILE_NAME 386
# define F_QUERY_VERB 387
# define F_TAIL 388
# define F_QUERY_HOST_NAME 389
# define F_EXPLODE 390
# define F_COMPL 391
# define F_AND 392
# define F_AND_EQ 393
# define F_OR 394
# define F_OR_EQ 395
# define F_XOR 396
# define F_XOR_EQ 397
# define F_CP 398
# define F_RENAME 399
# define F_LSH 400
# define F_LSH_EQ 401
# define F_RSH 402
# define F_RSH_EQ 403
# define F_MKDIR 404
# define F_RMDIR 405
# define F_QUERY_SNOOP 406
# define F_THROW 407
# define F_FIND_PLAYER 408
# define F_WRITE_FILE 409
# define F_FILE_SIZE 410
# define F_PARSE_COMMAND 411
# define F_IMPLODE 412
# define F_QUERY_IDLE 413
# define F_REMOTE_COMMAND 414
# define F_INTERACTIVE 415
# define F_CALLER 416
# define F_TYPEOF 417
# define F_CATCH 418
# define F_NOTIFY_FAIL 419
# define F_SET_LIVING_NAME 420
# define F_SET_BIT 421
# define F_CLEAR_BIT 422
# define F_TEST_BIT 423
# define F_REALLOCATE 424
# define F_INDEX 425
# define F_SEARCHA 426
# define F_CONTENTS 427
# define F_IN_EDITOR 428
# define F_GREP 429
#define yyclearin yychar = -1
#define yyerrok yyerrflag = 0
extern int yychar;
extern int yyerrflag;
#ifndef YYMAXDEPTH
#define YYMAXDEPTH 150
#endif
YYSTYPE yylval, yyval;
# define YYERRCODE 256

# line 484 "lang.y"


void yyerror(str)
char *str;
{
    extern int num_parse_error;

    if (num_parse_error > 5)
	return;
    (void)fprintf(stderr, "%s: %s line %d\n", current_file, str,
		  current_line);
    fflush(stderr);
    smart_log(current_file, current_line, str);
    if (num_parse_error == 0)
	save_error(str, current_file, current_line);
    num_parse_error++;
}

int check_deklared(str)
    char *str;
{
    struct lnode_var_def *p;
    char buff[100];

    for (p = prog_status; p; p = p->next) {
	if (strcmp(p->name, str) == 0)
	    return p->num_var;
    }
    (void)sprintf(buff, "Variable %s not declared !", str);
    yyerror(buff);
    return 0;
}

void free_all_local_names()
{
    int i;

    for (i=0; i<current_number_of_locals; i++) {
	free(local_names[i]);
	local_names[i] = 0;
    }
    current_number_of_locals = 0;
}

void add_local_name(str)
    char *str;
{
    if (current_number_of_locals == MAX_LOCAL)
	yyerror("Too many local variables\n");
    else
	local_names[current_number_of_locals++] = str;
}

int num_val(p)
    struct lnode_number *p;
{
    switch(p->type) {
    case F_NUMBER:
        return p->number;
    case F_CONST0:
	return 0;
    case F_CONST1:
	return 1;
    default:
	fatal("Illegal type of number.\n");
    }
    /*NOTREACHED*/
}

/*
 * It could be possible to do '#include "/etc/passwd"' in the definition
 * of an object. The compilation would fail, but the .i file would remain
 * with interesting data.
 * Prevent this by checking the name of teh include file.
 */

int illegal_include_file(str)
    char *str;
{
    char *p;
    int i;

    if (str[0] == '/')
	return 1;
    if (strlen(str) < 3)
	return 0;
    for (p = str + 3, i = 0; *p; p++)
	if (p[0] == '/' &&  p[-1] == '.' && p[-2] == '.' && p[-3] == '/')
	    i += 1;
    if (i > 3)
	return 1;
    return 0;
}

static void copy_one_variable(p)
    struct lnode_var_def *p;
{
    if (p->next)
	copy_one_variable(p->next);
    static_variable_flag = p->is_static;
    alloc_lnode_var_def(F_STATUS, string_copy(p->name), variable_count++);
}

static void copy_variables(from)
    struct object *from;
{
    if (variable_count > 0)
	yyerror("Illegal to declare variables before the inherit statement");
    if (!from->status)
	return;
    copy_one_variable(from->status);
}
int yyexca[] ={
-1, 0,
	0, 3,
	-2, 17,
-1, 1,
	0, -1,
	-2, 0,
-1, 115,
	0, 3,
	-2, 17,
-1, 149,
	125, 37,
	-2, 0,
-1, 153,
	125, 37,
	-2, 0,
-1, 170,
	59, 72,
	-2, 0,
-1, 175,
	40, 130,
	-2, 122,
-1, 233,
	59, 53,
	-2, 0,
-1, 244,
	125, 74,
	-2, 0,
-1, 247,
	41, 74,
	-2, 0,
-1, 248,
	41, 74,
	-2, 0,
-1, 265,
	382, 117,
	91, 117,
	-2, 108,
-1, 267,
	382, 117,
	91, 117,
	-2, 109,
-1, 312,
	59, 53,
	-2, 0,
-1, 315,
	41, 74,
	-2, 0,
-1, 317,
	41, 74,
	125, 74,
	-2, 0,
-1, 330,
	41, 53,
	-2, 0,
	};
# define YYNPROD 240
# define YYLAST 1925
int yyact[]={

   183,   258,   286,   259,   328,   205,   129,   124,   278,   236,
   237,   120,   226,   279,   241,   256,   239,   254,   246,   250,
   146,   143,   117,   186,   210,   128,   151,   161,   134,   316,
   125,   123,   206,   145,   127,   178,   185,     5,   249,     2,
   314,   139,   227,   130,   330,   312,   274,   223,   222,   141,
   132,   116,   313,   263,   317,   260,   227,   261,   262,   229,
   335,   142,   139,   264,   137,   331,   329,   326,   319,   318,
   310,   309,   287,   140,   126,   288,   138,   131,   315,   311,
   248,   247,   233,   145,   231,   230,   204,   122,   119,   251,
   149,   136,   135,   118,   147,     6,   115,     1,     4,   198,
   182,   193,   191,   197,   184,   159,   158,   157,   194,   195,
   192,   181,   171,   200,   160,     3,   174,   180,   156,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     5,   179,   245,   121,     0,   133,     0,     0,
     0,     0,     0,     0,     0,     0,   144,     0,     0,     0,
     0,   148,     0,     0,     0,   150,     0,   228,   207,   183,
   208,   152,     0,     0,   205,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,   235,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,   240,     0,   154,     8,   166,   175,
   272,     0,   124,    23,    10,     0,   170,   203,    11,   187,
    12,    16,    14,    20,    21,   201,   202,   266,   266,     0,
     0,    37,    32,   188,     0,   125,    18,     0,   252,   255,
   257,     0,     0,     0,     0,     0,   176,   253,    19,     9,
    24,    84,   145,    25,     0,   204,   285,     0,    26,    29,
    78,    79,    80,     0,    81,   101,     0,   167,   163,    17,
    22,   168,   169,    13,    99,   108,    38,    85,    83,   126,
   177,    76,    77,    71,    74,    70,    45,    48,    46,    55,
    60,    69,    15,    73,    59,   242,    72,    28,    75,    82,
    61,    49,   189,   190,     0,    62,    63,    64,    65,    66,
   164,    67,    68,   292,   293,    86,   323,   192,    27,   199,
    91,    98,   100,    87,    88,    90,    89,    93,    92,    94,
    95,    96,   333,    44,   334,    97,    30,    31,    39,    43,
    34,     0,   282,     0,   196,   258,     0,   259,   106,   107,
   304,   305,   302,   303,    40,    41,    42,   162,    56,    57,
    58,    33,    35,    36,   102,   103,   104,   105,   173,   113,
   112,   109,   110,   111,    50,    52,    53,    51,    54,    47,
     0,   325,     0,   327,   283,   225,     8,   166,   175,   290,
     0,     0,    23,    10,     0,   170,   203,    11,   187,    12,
    16,    14,    20,    21,   201,   202,     0,     0,     0,   183,
    37,    32,   188,     0,   205,    18,   324,     0,     0,     0,
     0,     0,     0,     0,     0,   176,     0,    19,     9,    24,
    84,     0,    25,     0,     0,     0,     0,    26,    29,    78,
    79,    80,     0,    81,   101,     0,   167,   163,    17,    22,
   168,   169,    13,    99,   108,    38,    85,    83,     0,   177,
    76,    77,    71,    74,    70,    45,    48,    46,    55,    60,
    69,    15,    73,    59,     0,    72,    28,    75,    82,    61,
    49,   189,   190,     0,    62,    63,    64,    65,    66,   164,
    67,    68,   145,     0,    86,   204,   192,    27,     0,    91,
    98,   100,    87,    88,    90,    89,    93,    92,    94,    95,
    96,     0,    44,     0,    97,    30,    31,    39,    43,    34,
     0,     0,     0,   268,   270,   271,     0,   106,   107,     0,
     0,     0,     0,    40,    41,    42,   162,    56,    57,    58,
    33,    35,    36,   102,   103,   104,   105,   173,   113,   112,
   109,   110,   111,    50,    52,    53,    51,    54,    47,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,   306,   307,   308,     0,     0,     0,   183,     0,
     0,   291,     0,   205,   294,     0,   295,   296,   297,   298,
   299,   300,   301,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,   154,     8,   166,   175,     0,
     0,     0,    23,    10,     0,   170,   203,    11,   187,    12,
    16,    14,    20,    21,   201,   202,     0,     0,     0,     0,
    37,    32,   188,     0,     0,    18,     0,     0,     0,     0,
     0,     0,     0,     0,     0,   176,     0,    19,     9,    24,
    84,   244,    25,     0,   204,     0,     0,    26,    29,    78,
    79,    80,     0,    81,   101,     0,   167,   163,    17,    22,
   168,   169,    13,    99,   108,    38,    85,    83,     0,   177,
    76,    77,    71,    74,    70,    45,    48,    46,    55,    60,
    69,    15,    73,    59,     0,    72,    28,    75,    82,    61,
    49,   189,   190,     0,    62,    63,    64,    65,    66,   164,
    67,    68,     0,     0,    86,     0,   192,    27,     0,    91,
    98,   100,    87,    88,    90,    89,    93,    92,    94,    95,
    96,     0,    44,     0,    97,    30,    31,    39,    43,    34,
     0,     0,     0,     0,   183,     0,     0,   106,   107,   205,
     0,     0,     0,    40,    41,    42,   162,    56,    57,    58,
    33,    35,    36,   102,   103,   104,   105,   173,   113,   112,
   109,   110,   111,    50,    52,    53,    51,    54,    47,     0,
     0,     0,     0,     0,   225,     8,     0,   175,     0,     0,
     0,    23,    10,     0,     0,   203,    11,   187,    12,    16,
    14,    20,    21,   201,   202,     0,     0,     0,     0,    37,
    32,   188,     0,     0,    18,     0,     0,     0,     0,     0,
     0,     0,     0,     0,   176,     0,    19,     9,    24,    84,
   204,    25,     0,     0,     0,     0,    26,    29,    78,    79,
    80,     0,    81,   101,     0,     0,     0,    17,    22,     0,
     0,    13,    99,   108,    38,    85,    83,     0,   177,    76,
    77,    71,    74,    70,    45,    48,    46,    55,    60,    69,
    15,    73,    59,     0,    72,    28,    75,    82,    61,    49,
   189,   190,     0,    62,    63,    64,    65,    66,     0,    67,
    68,     0,     0,    86,     0,   192,    27,     0,    91,    98,
   100,    87,    88,    90,    89,    93,    92,    94,    95,    96,
     0,    44,     0,    97,    30,    31,    39,    43,    34,     0,
   183,     0,     0,     0,     0,   205,   106,   107,     0,     0,
     0,     0,    40,    41,    42,     0,    56,    57,    58,    33,
    35,    36,   102,   103,   104,   105,   173,   113,   112,   109,
   110,   111,    50,    52,    53,    51,    54,    47,     0,     0,
   225,     8,     0,   175,     0,     0,     0,    23,    10,     0,
     0,   203,    11,   187,    12,    16,    14,    20,    21,   201,
   202,     0,     0,     0,     0,    37,    32,   188,     0,     0,
    18,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   176,     0,    19,     9,    24,    84,   204,    25,     0,     0,
     0,     0,    26,    29,    78,    79,    80,     0,    81,   101,
     0,     0,     0,    17,    22,     0,     0,    13,    99,   108,
    38,    85,    83,     0,   177,    76,    77,    71,    74,    70,
    45,    48,    46,    55,    60,    69,    15,    73,    59,     0,
    72,    28,    75,    82,    61,    49,   189,   190,     0,    62,
    63,    64,    65,    66,     0,    67,    68,     0,     0,    86,
     0,   192,    27,     0,    91,    98,   100,    87,    88,    90,
    89,    93,    92,    94,    95,    96,     0,    44,     0,    97,
    30,    31,    39,    43,    34,   183,     0,     0,     0,     0,
     0,     0,   106,   107,     0,     0,     0,     0,    40,    41,
    42,     0,    56,    57,    58,    33,    35,    36,   102,   103,
   104,   105,   173,   113,   112,   109,   110,   111,    50,    52,
    53,    51,    54,    47,     0,     0,     0,     8,     0,   175,
     0,     0,     0,    23,    10,     0,     0,   203,    11,   187,
    12,    16,    14,    20,    21,   201,   202,     0,     0,     0,
     0,    37,    32,   188,     0,     0,    18,     0,     0,     0,
     0,     0,     0,     0,     0,     0,   176,     0,    19,     9,
    24,    84,     0,    25,     0,     0,     0,     0,    26,    29,
    78,    79,    80,     0,    81,   101,     0,     0,     0,    17,
    22,     0,     0,    13,    99,   108,    38,    85,    83,     0,
   177,    76,    77,    71,    74,    70,    45,    48,    46,    55,
    60,    69,    15,    73,    59,     0,    72,    28,    75,    82,
    61,    49,   189,   190,     0,    62,    63,    64,    65,    66,
     0,    67,    68,     0,     0,    86,     0,   192,    27,     0,
    91,    98,   100,    87,    88,    90,    89,    93,    92,    94,
    95,    96,     0,    44,     0,    97,    30,    31,    39,    43,
    34,     0,     0,     0,     0,     0,     0,     0,   106,   107,
     0,     0,     0,     0,    40,    41,    42,     0,    56,    57,
    58,    33,    35,    36,   102,   103,   104,   105,     0,   113,
   112,   109,   110,   111,    50,    52,    53,    51,    54,    47,
     0,     0,     8,     0,   175,     0,     0,     0,    23,    10,
     0,     0,     0,    11,   187,    12,    16,    14,    20,    21,
     0,     0,     0,     0,     0,     0,    37,    32,   188,     0,
     0,    18,     0,     0,     0,     0,     0,     0,     0,     0,
     0,   176,     0,    19,     9,    24,    84,     0,    25,     0,
     0,   153,     0,    26,    29,    78,    79,    80,     0,    81,
   101,     0,     0,     0,    17,    22,     0,   211,    13,    99,
   108,    38,    85,    83,     0,   177,    76,    77,    71,    74,
    70,    45,    48,    46,    55,    60,    69,    15,    73,    59,
     0,    72,    28,    75,    82,    61,    49,   189,   190,     0,
    62,    63,    64,    65,    66,     0,    67,    68,     0,   209,
    86,   211,   192,    27,     0,    91,    98,   100,    87,    88,
    90,    89,    93,    92,    94,    95,    96,     0,    44,   211,
    97,    30,    31,    39,    43,    34,     0,     0,     0,     0,
   165,     0,     0,   106,   107,     0,     0,     0,     0,    40,
    41,    42,     0,    56,    57,    58,    33,    35,    36,   102,
   103,   104,   105,     0,   113,   112,   109,   110,   111,    50,
    52,    53,    51,    54,    47,     8,     0,     0,     0,     0,
     0,    23,    10,     0,     0,     0,    11,   155,    12,    16,
    14,    20,    21,     0,     0,     0,     0,     0,     0,    37,
    32,     0,     0,     0,    18,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,    19,     9,    24,    84,
   232,    25,     0,     0,     0,   238,    26,    29,    78,    79,
    80,     0,    81,   101,     0,     0,     0,    17,    22,     0,
     0,    13,    99,   108,    38,    85,    83,     0,     0,    76,
    77,    71,    74,    70,    45,    48,    46,    55,    60,    69,
    15,    73,    59,     0,    72,    28,    75,    82,    61,    49,
   172,     0,     0,    62,    63,    64,    65,    66,     0,    67,
    68,   236,   237,    86,   114,     0,    27,     7,    91,    98,
   100,    87,    88,    90,    89,    93,    92,    94,    95,    96,
     0,    44,     0,    97,    30,    31,    39,    43,    34,     0,
   217,   218,   221,   219,     0,     0,   106,   107,     0,     0,
     0,     0,    40,    41,    42,     0,    56,    57,    58,    33,
    35,    36,   102,   103,   104,   105,     0,   113,   112,   109,
   110,   111,    50,    52,    53,    51,    54,    47,     0,     0,
   224,   273,     0,     0,   217,   218,   221,   219,   234,     0,
     0,   320,   321,     0,     0,     0,     0,     0,     0,     0,
   220,   243,   217,   218,   221,   219,   281,     0,     0,     0,
   332,     0,     0,     0,     0,   289,     0,   336,   289,   289,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   212,
     0,   213,     0,   214,     0,     0,     0,   215,     0,   216,
     0,     0,     0,     0,   220,     0,     0,   275,   276,   277,
     0,   280,     0,     0,     0,     0,     0,     0,     0,   284,
     0,     0,   220,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,   212,     0,   213,     0,   214,     0,     0,
     0,   215,     0,   216,     0,     0,   289,     0,   289,     0,
     0,   212,     0,   213,     0,   214,     0,     0,     0,   215,
     0,   216,   265,   267,   269,   269,   269,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,   322,
   280,     0,     0,     0,     0,     0,     0,     0,     0,     0,
   269,   269,     0,     0,     0,     0,   269,   269,   280,     0,
   269,     0,   269,   269,   269,   269,   269,   269,   269,   269,
   269,   269,   269,   269,   269,   269,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,   269 };
int yypact[]={

  1258, -1000, -1000,    -8,  -237,    48, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000,  -258,  1258, -1000,    47,  -255,  -253,
    -9, -1000,  -253,    22, -1000, -1000, -1000,    35,    18, -1000,
 -1000, -1000, -1000,    32,   -10,    17,  -238, -1000,   -90,  -239,
 -1000, -1000,    22, -1000, -1000, -1000, -1000,   -90, -1000,   -40,
 -1000,   -93,  -253,   379,  1390,   -11, -1000, -1000, -1000, -1000,
   -12, -1000,   734,   -17,   -17,    15,    45,    44,   139,    42,
   734, -1000,  1346,   139,   -47, -1000, -1000, -1000,   -77, -1000,
 -1000, -1000, -1000,   558,  -106,    41,    40, -1000, -1000, -1000,
 -1000,   -56,  -240,    51, -1000, -1000,   -45,    12,    16, -1000,
 -1000,  1085,  1085,   910,   910,   910, -1000,    -3, -1000, -1000,
   734, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
 -1000, -1000, -1000, -1000,   -13,  1408, -1000, -1000, -1000,   734,
   734,   734,  -309,   734, -1000,   734, -1000, -1000, -1000,   910,
   910,   734,  -257,    31,   734,   910,   910,   734,   734,   910,
 -1000,   910,   910,   910,   910,   910,   910,   910,   910,   910,
   910,   910,   910,   910,   910, -1000,   -77, -1000, -1000,  -266,
 -1000, -1000, -1000, -1000, -1000, -1000,    30,    29,    39,   -14,
 -1000, -1000,    -6, -1000,   -53,    38, -1000, -1000,   -96,    10,
 -1000,  -399,    28,    27,  -399,  -399,  -399,  -399,  -399,  -399,
  -399,  -399,    12,    12,    16,    16, -1000, -1000, -1000,   139,
   139,   734,   734,   910, -1000,   734,    26,   734, -1000, -1000,
  -341, -1000,    25,   -15, -1000,    24, -1000, -1000,   139,   -17,
   734, -1000, -1000, -1000,    19,   139, -1000 };
int yypgo[]={

     0,   118,   112,    75,   153,   329,   117,  1610,   116,    26,
  1391,    39,   115,   114,    35,   113,   111,  1480,   103,    99,
   109,   108,   107,   106,   105,   354,   104,   102,   101,  1527,
    13,    27,   100,    36,    24,    98,    23,    97,    96,    95,
    34,    94,    93,    31,    28,    12,    25,    92,    91,    90 };
int yyr1[]={

     0,    37,    11,    11,    38,    38,    39,    32,    32,    32,
    41,    12,    12,    42,    12,    12,    35,    35,    45,    45,
    40,    40,    43,    43,    43,    44,    44,    47,    48,    48,
    31,    49,    49,    46,    46,    46,    46,     9,     9,     9,
    10,    10,    10,    10,    10,    10,    10,    10,    10,    10,
    22,    23,    24,    30,    30,    29,    29,    17,    17,    17,
    17,    34,    34,    34,    34,    34,    34,    34,    34,    34,
    34,    34,    13,    13,     3,     3,     3,     2,     2,     8,
     8,     4,     4,    26,    26,    27,    27,    28,    28,    21,
    21,    21,    20,    20,    20,    20,    20,    25,    25,    25,
    18,    18,    18,    19,    19,    19,    19,     5,     5,     5,
     5,     5,     5,    15,    15,    15,    14,    14,    14,    14,
    14,    14,     7,     7,     7,     7,    16,     6,     6,     6,
    36,    36,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,    33,    33,
    33,    33,    33,    33,    33,    33,    33,    33,     1,     1 };
int yyr2[]={

     0,     3,     7,     1,     0,     3,     7,     2,     2,     2,
     1,    15,    11,     1,    11,     3,     3,     1,     2,     1,
     0,     2,     2,     2,     2,     2,     6,     5,     2,     0,
     9,     0,     8,     3,     7,     3,     3,     1,     5,     5,
     5,     2,     2,     2,     2,     5,     2,     7,     5,     5,
    11,    15,    19,     1,     3,     3,     7,     2,     7,     5,
     7,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     5,     1,     3,     7,     2,    11,     2,
     7,     2,     7,     2,     7,     2,     7,     2,     7,     2,
     7,     7,     2,     7,     7,     7,     7,     2,     7,     7,
     2,     7,     7,     2,     7,     7,     7,     2,     5,     5,
     5,     5,     5,     2,     5,     5,     2,     2,     2,     2,
     7,    11,     3,     3,     2,     9,     3,     9,     9,    13,
     2,     5,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
     3,     3,     3,     3,     3,     3,     3,     3,    11,    15 };
int yychk[]={

 -1000,   -37,   -11,   -12,   -35,   -33,   -39,   369,   257,   299,
   264,   268,   270,   323,   272,   342,   271,   319,   286,   298,
   273,   274,   320,   263,   300,   303,   308,   368,   347,   309,
   386,   387,   282,   411,   390,   412,   413,   281,   326,   388,
   404,   405,   406,   389,   383,   336,   338,   429,   337,   351,
   424,   427,   425,   426,   428,   339,   408,   409,   410,   344,
   340,   350,   355,   356,   357,   358,   359,   361,   362,   341,
   335,   333,   346,   343,   334,   348,   331,   332,   310,   311,
   312,   314,   349,   328,   301,   327,   365,   373,   374,   376,
   375,   370,   378,   377,   379,   380,   381,   385,   371,   324,
   372,   315,   414,   415,   416,   417,   398,   399,   325,   421,
   422,   423,   420,   419,   366,   -38,    59,   259,   -42,    40,
   269,   -11,    40,   -43,   262,   285,   329,   -40,   -46,   259,
   296,   330,    59,   -40,   -44,   -47,   -48,    42,    41,    44,
    41,    59,    44,   259,   -31,   123,   259,   -41,   -44,   -49,
   -31,    -9,   -43,   -10,   256,   -29,    -1,   -22,   -23,   -24,
   -13,   -31,   407,   318,   360,   -17,   258,   317,   321,   322,
   266,    -2,    -7,   418,    -8,   259,   296,   330,   -14,    -4,
    -6,   -16,   -32,    40,   -26,   -33,   -36,   269,   283,   352,
   353,   -27,   367,   -28,   -21,   -20,   -25,   -18,   -19,    -5,
   -15,   275,   276,   267,   126,    45,   125,   -46,    -9,    59,
   -34,    61,   393,   395,   397,   401,   403,   304,   305,   307,
   364,   306,    59,    59,   -29,   256,   -45,    59,   -45,    44,
    40,    40,   -10,    40,   -29,   -34,   275,   276,   -10,    63,
   261,    91,   382,   -29,   123,   260,   124,    40,    40,    94,
   259,    38,   293,   302,    62,   294,    60,   295,   400,   402,
    43,    45,    42,    37,    47,    -7,   -14,    -7,    -5,    -7,
    -5,    -5,   -45,   -17,    59,   -29,   -29,   -29,   317,   -30,
   -29,   -17,    -2,    -4,   -29,   -36,   259,    41,    -3,   -17,
    -4,   -25,    -3,    -3,   -25,   -25,   -25,   -25,   -25,   -25,
   -25,   -25,   -18,   -18,   -19,   -19,    -5,    -5,    -5,    41,
    41,    40,    59,    58,    93,    40,   125,    44,    41,    41,
   -10,   -10,   -29,   -30,    -2,    -3,    41,    -3,   345,    41,
    59,    41,   -10,   -45,   -30,    41,   -10 };
int yydef[]={

    -2,    -2,     1,     4,    13,     0,    15,    16,   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,   170,   171,   172,   173,
   174,   175,   176,   177,   178,   179,   180,   181,   182,   183,
   184,   185,   186,   187,   188,   189,   190,   191,   192,   193,
   194,   195,   196,   197,   198,   199,   200,   201,   202,   203,
   204,   205,   206,   207,   208,   209,   210,   211,   212,   213,
   214,   215,   216,   217,   218,   219,   220,   221,   222,   223,
   224,   225,   226,   227,   228,   229,   230,   231,   232,   233,
   234,   235,   236,   237,     0,    -2,     5,     0,     0,    20,
     0,     2,    20,    29,    22,    23,    24,     0,    21,    33,
    35,    36,     6,     0,     0,    25,     0,    28,     0,     0,
    10,    14,    29,    27,    12,    31,    34,     0,    26,    -2,
    11,     0,     0,    -2,     0,     0,    41,    42,    43,    44,
     0,    46,     0,    19,    19,    55,     0,     0,     0,     0,
    -2,    57,   117,     0,    77,    -2,   123,   124,   113,    79,
   116,   118,   119,     0,    81,     0,     0,   126,     7,     8,
     9,    83,     0,    85,    87,    89,    92,    97,   100,   103,
   107,     0,     0,     0,     0,     0,    30,    19,    38,    39,
     0,    61,    62,    63,    64,    65,    66,    67,    68,    69,
    70,    71,    40,    45,     0,     0,    48,    18,    49,     0,
     0,     0,     0,    -2,    73,     0,   114,   115,    59,     0,
     0,     0,     0,     0,    -2,     0,     0,    -2,    -2,     0,
   131,     0,     0,     0,     0,     0,     0,     0,     0,     0,
     0,     0,     0,     0,     0,    -2,     0,    -2,   110,   117,
   111,   112,    32,    60,    47,    56,     0,     0,     0,     0,
    54,    58,     0,    80,     0,     0,   130,   120,     0,    75,
    82,    84,     0,     0,    86,    88,    90,    91,    93,    94,
    95,    96,    98,    99,   101,   102,   104,   105,   106,     0,
     0,     0,    -2,     0,   125,    -2,     0,    -2,   127,   128,
   238,    50,     0,     0,    78,     0,   121,    76,     0,    19,
    -2,   129,   239,    51,     0,     0,    52 };
typedef struct { char *t_name; int t_val; } yytoktype;
#ifndef YYDEBUG
#	define YYDEBUG	0	/* don't allow debugging */
#endif

#if YYDEBUG

yytoktype yytoks[] =
{
	"F_THIS_PLAYER",	257,
	"F_IF",	258,
	"F_IDENTIFIER",	259,
	"F_LAND",	260,
	"F_LOR",	261,
	"F_STATUS",	262,
	"F_SET_TRUE",	263,
	"F_SET_FALSE",	264,
	"F_CONS",	265,
	"F_RETURN",	266,
	"F_NOT",	267,
	"F_WRITE",	268,
	"F_STRING",	269,
	"F_ADD_VERB",	270,
	"F_ADD_ADJ",	271,
	"F_ADD_SUBST",	272,
	"F_ADD_ACTION",	273,
	"F_MOVE_OBJECT",	274,
	"F_INC",	275,
	"F_DEC",	276,
	"F_POST_INC",	277,
	"F_POST_DEC",	278,
	"F_COMMA",	279,
	"F_COND",	280,
	"F_QUERY_LOAD_AVERAGE",	281,
	"F_THIS_VERB",	282,
	"F_NUMBER",	283,
	"F_ASSIGN",	284,
	"F_INT",	285,
	"F_CALL_OTHER",	286,
	"F_ADD",	287,
	"F_SUBTRACT",	288,
	"F_MULTIPLY",	289,
	"F_DIVIDE",	290,
	"F_LT",	291,
	"F_GT",	292,
	"F_EQ",	293,
	"F_GE",	294,
	"F_LE",	295,
	"F_ARGUMENT",	296,
	"F_FUNCTION",	297,
	"F_CLONE_OBJECT",	298,
	"F_THIS_OBJECT",	299,
	"F_SAVE_OBJECT",	300,
	"F_RESTORE_OBJECT",	301,
	"F_NE",	302,
	"F_ENVIRONMENT",	303,
	"F_ADD_EQ",	304,
	"F_SUB_EQ",	305,
	"F_DIV_EQ",	306,
	"F_MULT_EQ",	307,
	"F_PRESENT",	308,
	"F_COMMAND",	309,
	"F_SET_LIGHT",	310,
	"F_DESTRUCT",	311,
	"F_CREATE_WIZARD",	312,
	"F_NEGATE",	313,
	"F_SAY",	314,
	"F_STRLEN",	315,
	"F_SUBSCRIPT",	316,
	"F_WHILE",	317,
	"F_BREAK",	318,
	"F_SHUTDOWN",	319,
	"F_LOG_FILE",	320,
	"F_DO",	321,
	"F_FOR",	322,
	"F_ADD_XVERB",	323,
	"F_FIND_CALL_OUT",	324,
	"F_READ_FILE",	325,
	"F_FILTER_OBJECTS",	326,
	"F_SSCANF",	327,
	"F_SHOUT",	328,
	"F_STRING_DECL",	329,
	"F_LOCAL_NAME",	330,
	"F_FIRST_INVENTORY",	331,
	"F_NEXT_INVENTORY",	332,
	"F_ENABLE_COMMANDS",	333,
	"F_RANDOM",	334,
	"F_INPUT_TO",	335,
	"F_CRYPT",	336,
	"F_LS",	337,
	"F_CAT",	338,
	"F_FIND_LIVING",	339,
	"F_TELL_OBJECT",	340,
	"F_PEOPLE",	341,
	"F_ED",	342,
	"F_LIVING",	343,
	"F_LOWER_CASE",	344,
	"F_ELSE",	345,
	"F_CAPITALIZE",	346,
	"F_SET_HEART_BEAT",	347,
	"F_SNOOP",	348,
	"F_TELL_ROOM",	349,
	"F_FIND_OBJECT",	350,
	"F_RM",	351,
	"F_CONST0",	352,
	"F_CONST1",	353,
	"F_BLOCK",	354,
	"F_TRANSFER",	355,
	"F_REGCOMP",	356,
	"F_REGEXEC",	357,
	"F_LOCALCMD",	358,
	"F_SWAP",	359,
	"F_CONTINUE",	360,
	"F_ADD_WORTH",	361,
	"F_TIME",	362,
	"F_MOD",	363,
	"F_MOD_EQ",	364,
	"F_QUERY_IP_NUMBER",	365,
	"F_INHERIT",	366,
	"F_COLON_COLON",	367,
	"F_CREATOR",	368,
	"F_STATIC",	369,
	"F_CALL_OUT",	370,
	"F_REMOVE_CALL_OUT",	371,
	"F_COMBINE_FREE_LIST",	372,
	"F_ALLOCATE",	373,
	"F_SIZEOF",	374,
	"F_DISABLE_COMMANDS",	375,
	"F_CTIME",	376,
	"F_INTP",	377,
	"F_STRINGP",	378,
	"F_OBJECTP",	379,
	"F_POINTERP",	380,
	"F_USERS",	381,
	"F_ARROW",	382,
	"F_PREVIOUS_OBJECT",	383,
	"F_AGGREGATE",	384,
	"F_EXTRACT",	385,
	"F_FILE_NAME",	386,
	"F_QUERY_VERB",	387,
	"F_TAIL",	388,
	"F_QUERY_HOST_NAME",	389,
	"F_EXPLODE",	390,
	"F_COMPL",	391,
	"F_AND",	392,
	"F_AND_EQ",	393,
	"F_OR",	394,
	"F_OR_EQ",	395,
	"F_XOR",	396,
	"F_XOR_EQ",	397,
	"F_CP",	398,
	"F_RENAME",	399,
	"F_LSH",	400,
	"F_LSH_EQ",	401,
	"F_RSH",	402,
	"F_RSH_EQ",	403,
	"F_MKDIR",	404,
	"F_RMDIR",	405,
	"F_QUERY_SNOOP",	406,
	"F_THROW",	407,
	"F_FIND_PLAYER",	408,
	"F_WRITE_FILE",	409,
	"F_FILE_SIZE",	410,
	"F_PARSE_COMMAND",	411,
	"F_IMPLODE",	412,
	"F_QUERY_IDLE",	413,
	"F_REMOTE_COMMAND",	414,
	"F_INTERACTIVE",	415,
	"F_CALLER",	416,
	"F_TYPEOF",	417,
	"F_CATCH",	418,
	"F_NOTIFY_FAIL",	419,
	"F_SET_LIVING_NAME",	420,
	"F_SET_BIT",	421,
	"F_CLEAR_BIT",	422,
	"F_TEST_BIT",	423,
	"F_REALLOCATE",	424,
	"F_INDEX",	425,
	"F_SEARCHA",	426,
	"F_CONTENTS",	427,
	"F_IN_EDITOR",	428,
	"F_GREP",	429,
	"-unknown-",	-1	/* ends search */
};

char * yyreds[] =
{
	"-no such reduction-",
	"all : program",
	"program : def possible_semi_colon program",
	"program : /* empty */",
	"possible_semi_colon : /* empty */",
	"possible_semi_colon : ';'",
	"inheritance : F_INHERIT F_STRING ';'",
	"number : F_NUMBER",
	"number : F_CONST0",
	"number : F_CONST1",
	"def : static F_IDENTIFIER '(' argument ')'",
	"def : static F_IDENTIFIER '(' argument ')' block",
	"def : name '(' argument ')' block",
	"def : static",
	"def : static type name_list ';'",
	"def : inheritance",
	"static : F_STATIC",
	"static : /* empty */",
	"req_semi : ';'",
	"req_semi : /* empty */",
	"argument : /* empty */",
	"argument : local_list",
	"type : F_STATUS",
	"type : F_INT",
	"type : F_STRING_DECL",
	"name_list : new_name",
	"name_list : new_name ',' name_list",
	"new_name : optional_star F_IDENTIFIER",
	"optional_star : '*'",
	"optional_star : /* empty */",
	"block : '{' local_declarations statements '}'",
	"local_declarations : /* empty */",
	"local_declarations : local_declarations type local_list req_semi",
	"local_list : F_IDENTIFIER",
	"local_list : local_list ',' F_IDENTIFIER",
	"local_list : F_ARGUMENT",
	"local_list : F_LOCAL_NAME",
	"statements : /* empty */",
	"statements : statement statements",
	"statements : error ';'",
	"statement : comma_expr ';'",
	"statement : cond",
	"statement : while",
	"statement : do",
	"statement : for",
	"statement : return ';'",
	"statement : block",
	"statement : F_THROW comma_expr ';'",
	"statement : F_BREAK req_semi",
	"statement : F_CONTINUE req_semi",
	"while : F_WHILE '(' comma_expr ')' statement",
	"do : F_DO statement F_WHILE '(' comma_expr ')' req_semi",
	"for : F_FOR '(' for_expr ';' for_expr ';' for_expr ')' statement",
	"for_expr : /* empty */",
	"for_expr : comma_expr",
	"comma_expr : expr0",
	"comma_expr : expr0 ',' comma_expr",
	"expr0 : expr1",
	"expr0 : variable assign expr0",
	"expr0 : F_CATCH statement",
	"expr0 : error assign expr0",
	"assign : '='",
	"assign : F_AND_EQ",
	"assign : F_OR_EQ",
	"assign : F_XOR_EQ",
	"assign : F_LSH_EQ",
	"assign : F_RSH_EQ",
	"assign : F_ADD_EQ",
	"assign : F_SUB_EQ",
	"assign : F_MULT_EQ",
	"assign : F_MOD_EQ",
	"assign : F_DIV_EQ",
	"return : F_RETURN",
	"return : F_RETURN comma_expr",
	"expr_list : /* empty */",
	"expr_list : expr0",
	"expr_list : expr0 ',' expr_list",
	"expr1 : expr11",
	"expr1 : expr11 '?' expr1 ':' expr1",
	"expr11 : expr2",
	"expr11 : expr11 F_LOR expr2",
	"expr2 : expr211",
	"expr2 : expr211 F_LAND expr2",
	"expr211 : expr212",
	"expr211 : expr211 '|' expr24",
	"expr212 : expr213",
	"expr212 : expr212 '^' expr24",
	"expr213 : expr22",
	"expr213 : expr213 '&' expr24",
	"expr22 : expr23",
	"expr22 : expr24 F_EQ expr24",
	"expr22 : expr24 F_NE expr24",
	"expr23 : expr24",
	"expr23 : expr24 '>' expr24",
	"expr23 : expr24 F_GE expr24",
	"expr23 : expr24 '<' expr24",
	"expr23 : expr24 F_LE expr24",
	"expr24 : expr25",
	"expr24 : expr24 F_LSH expr25",
	"expr24 : expr24 F_RSH expr25",
	"expr25 : expr27",
	"expr25 : expr25 '+' expr27",
	"expr25 : expr25 '-' expr27",
	"expr27 : expr3",
	"expr27 : expr27 '*' expr3",
	"expr27 : expr27 '%' expr3",
	"expr27 : expr27 '/' expr3",
	"expr3 : expr31",
	"expr3 : F_INC variable",
	"expr3 : F_DEC variable",
	"expr3 : F_NOT expr3",
	"expr3 : '~' expr3",
	"expr3 : '-' expr3",
	"expr31 : expr4",
	"expr31 : variable F_INC",
	"expr31 : variable F_DEC",
	"expr4 : function_call",
	"expr4 : variable",
	"expr4 : string",
	"expr4 : number",
	"expr4 : '(' comma_expr ')'",
	"expr4 : '(' '{' expr_list '}' ')'",
	"variable : F_IDENTIFIER",
	"variable : F_ARGUMENT",
	"variable : F_LOCAL_NAME",
	"variable : expr4 '[' comma_expr ']'",
	"string : F_STRING",
	"function_call : name '(' expr_list ')'",
	"function_call : function_name '(' expr_list ')'",
	"function_call : expr4 F_ARROW function_name '(' expr_list ')'",
	"function_name : F_IDENTIFIER",
	"function_name : F_COLON_COLON F_IDENTIFIER",
	"name : F_THIS_PLAYER",
	"name : F_THIS_OBJECT",
	"name : F_SET_FALSE",
	"name : F_WRITE",
	"name : F_ADD_VERB",
	"name : F_ADD_XVERB",
	"name : F_ADD_SUBST",
	"name : F_ED",
	"name : F_ADD_ADJ",
	"name : F_SHUTDOWN",
	"name : F_CALL_OTHER",
	"name : F_CLONE_OBJECT",
	"name : F_ADD_ACTION",
	"name : F_MOVE_OBJECT",
	"name : F_LOG_FILE",
	"name : F_SET_TRUE",
	"name : F_SAVE_OBJECT",
	"name : F_ENVIRONMENT",
	"name : F_PRESENT",
	"name : F_CREATOR",
	"name : F_SET_HEART_BEAT",
	"name : F_COMMAND",
	"name : F_FILE_NAME",
	"name : F_QUERY_VERB",
	"name : F_THIS_VERB",
	"name : F_PARSE_COMMAND",
	"name : F_EXPLODE",
	"name : F_IMPLODE",
	"name : F_QUERY_IDLE",
	"name : F_QUERY_LOAD_AVERAGE",
	"name : F_FILTER_OBJECTS",
	"name : F_TAIL",
	"name : F_MKDIR",
	"name : F_RMDIR",
	"name : F_QUERY_SNOOP",
	"name : F_QUERY_HOST_NAME",
	"name : F_PREVIOUS_OBJECT",
	"name : F_CRYPT",
	"name : F_CAT",
	"name : F_GREP",
	"name : F_LS",
	"name : F_RM",
	"name : F_REALLOCATE",
	"name : F_CONTENTS",
	"name : F_INDEX",
	"name : F_SEARCHA",
	"name : F_IN_EDITOR",
	"name : F_FIND_LIVING",
	"name : F_FIND_PLAYER",
	"name : F_WRITE_FILE",
	"name : F_FILE_SIZE",
	"name : F_LOWER_CASE",
	"name : F_TELL_OBJECT",
	"name : F_FIND_OBJECT",
	"name : F_TRANSFER",
	"name : F_REGCOMP",
	"name : F_REGEXEC",
	"name : F_LOCALCMD",
	"name : F_SWAP",
	"name : F_ADD_WORTH",
	"name : F_TIME",
	"name : F_PEOPLE",
	"name : F_INPUT_TO",
	"name : F_ENABLE_COMMANDS",
	"name : F_CAPITALIZE",
	"name : F_LIVING",
	"name : F_RANDOM",
	"name : F_SNOOP",
	"name : F_FIRST_INVENTORY",
	"name : F_NEXT_INVENTORY",
	"name : F_SET_LIGHT",
	"name : F_DESTRUCT",
	"name : F_CREATE_WIZARD",
	"name : F_SAY",
	"name : F_TELL_ROOM",
	"name : F_SHOUT",
	"name : F_RESTORE_OBJECT",
	"name : F_SSCANF",
	"name : F_QUERY_IP_NUMBER",
	"name : F_ALLOCATE",
	"name : F_SIZEOF",
	"name : F_CTIME",
	"name : F_DISABLE_COMMANDS",
	"name : F_CALL_OUT",
	"name : F_STRINGP",
	"name : F_INTP",
	"name : F_OBJECTP",
	"name : F_POINTERP",
	"name : F_USERS",
	"name : F_EXTRACT",
	"name : F_REMOVE_CALL_OUT",
	"name : F_FIND_CALL_OUT",
	"name : F_COMBINE_FREE_LIST",
	"name : F_STRLEN",
	"name : F_REMOTE_COMMAND",
	"name : F_INTERACTIVE",
	"name : F_CALLER",
	"name : F_TYPEOF",
	"name : F_CP",
	"name : F_RENAME",
	"name : F_READ_FILE",
	"name : F_SET_BIT",
	"name : F_CLEAR_BIT",
	"name : F_TEST_BIT",
	"name : F_SET_LIVING_NAME",
	"name : F_NOTIFY_FAIL",
	"cond : F_IF '(' comma_expr ')' statement",
	"cond : F_IF '(' comma_expr ')' statement F_ELSE statement",
};
#endif /* YYDEBUG */
#line 1 "/usr/lib/yaccpar"
/*	@(#)yaccpar 1.10 89/04/04 SMI; from S5R3 1.10	*/

/*
** Skeleton parser driver for yacc output
*/

/*
** yacc user known macros and defines
*/
#define YYERROR		goto yyerrlab
#define YYACCEPT	{ free(yys); free(yyv); return(0); }
#define YYABORT		{ free(yys); free(yyv); return(1); }
#define YYBACKUP( newtoken, newvalue )\
{\
	if ( yychar >= 0 || ( yyr2[ yytmp ] >> 1 ) != 1 )\
	{\
		yyerror( "syntax error - cannot backup" );\
		goto yyerrlab;\
	}\
	yychar = newtoken;\
	yystate = *yyps;\
	yylval = newvalue;\
	goto yynewstate;\
}
#define YYRECOVERING()	(!!yyerrflag)
#ifndef YYDEBUG
#	define YYDEBUG	1	/* make debugging available */
#endif

/*
** user known globals
*/
int yydebug;			/* set to 1 to get debugging */

/*
** driver internal defines
*/
#define YYFLAG		(-1000)

/*
** static variables used by the parser
*/
static YYSTYPE *yyv;			/* value stack */
static int *yys;			/* state stack */

static YYSTYPE *yypv;			/* top of value stack */
static int *yyps;			/* top of state stack */

static int yystate;			/* current state */
static int yytmp;			/* extra var (lasts between blocks) */

int yynerrs;			/* number of errors */

int yyerrflag;			/* error recovery flag */
int yychar;			/* current input token number */


/*
** yyparse - return 0 if worked, 1 if syntax error not recovered from
*/
int
yyparse()
{
	register YYSTYPE *yypvt;	/* top of value stack for $vars */
	unsigned yymaxdepth = YYMAXDEPTH;

	/*
	** Initialize externals - yyparse may be called more than once
	*/
	yyv = (YYSTYPE*)malloc(yymaxdepth*sizeof(YYSTYPE));
	yys = (int*)malloc(yymaxdepth*sizeof(int));
	if (!yyv || !yys)
	{
		yyerror( "out of memory" );
		return(1);
	}
	yypv = &yyv[-1];
	yyps = &yys[-1];
	yystate = 0;
	yytmp = 0;
	yynerrs = 0;
	yyerrflag = 0;
	yychar = -1;

	goto yystack;
	{
		register YYSTYPE *yy_pv;	/* top of value stack */
		register int *yy_ps;		/* top of state stack */
		register int yy_state;		/* current state */
		register int  yy_n;		/* internal state number info */

		/*
		** get globals into registers.
		** branch to here only if YYBACKUP was called.
		*/
	yynewstate:
		yy_pv = yypv;
		yy_ps = yyps;
		yy_state = yystate;
		goto yy_newstate;

		/*
		** get globals into registers.
		** either we just started, or we just finished a reduction
		*/
	yystack:
		yy_pv = yypv;
		yy_ps = yyps;
		yy_state = yystate;

		/*
		** top of for (;;) loop while no reductions done
		*/
	yy_stack:
		/*
		** put a state and value onto the stacks
		*/
#if YYDEBUG
		/*
		** if debugging, look up token value in list of value vs.
		** name pairs.  0 and negative (-1) are special values.
		** Note: linear search is used since time is not a real
		** consideration while debugging.
		*/
		if ( yydebug )
		{
			register int yy_i;

			(void)printf( "State %d, token ", yy_state );
			if ( yychar == 0 )
				(void)printf( "end-of-file\n" );
			else if ( yychar < 0 )
				(void)printf( "-none-\n" );
			else
			{
				for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
					yy_i++ )
				{
					if ( yytoks[yy_i].t_val == yychar )
						break;
				}
				(void)printf( "%s\n", yytoks[yy_i].t_name );
			}
		}
#endif /* YYDEBUG */
		if ( ++yy_ps >= &yys[ yymaxdepth ] )	/* room on stack? */
		{
			/*
			** reallocate and recover.  Note that pointers
			** have to be reset, or bad things will happen
			*/
			int yyps_index = (yy_ps - yys);
			int yypv_index = (yy_pv - yyv);
			int yypvt_index = (yypvt - yyv);
			yymaxdepth += YYMAXDEPTH;
			yyv = (YYSTYPE*)realloc((char*)yyv,
				yymaxdepth * sizeof(YYSTYPE));
			yys = (int*)realloc((char*)yys,
				yymaxdepth * sizeof(int));
			if (!yyv || !yys)
			{
				yyerror( "yacc stack overflow" );
				return(1);
			}
			yy_ps = yys + yyps_index;
			yy_pv = yyv + yypv_index;
			yypvt = yyv + yypvt_index;
		}
		*yy_ps = yy_state;
		*++yy_pv = yyval;

		/*
		** we have a new state - find out what to do
		*/
	yy_newstate:
		if ( ( yy_n = yypact[ yy_state ] ) <= YYFLAG )
			goto yydefault;		/* simple state */
#if YYDEBUG
		/*
		** if debugging, need to mark whether new token grabbed
		*/
		yytmp = yychar < 0;
#endif
		if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
			yychar = 0;		/* reached EOF */
#if YYDEBUG
		if ( yydebug && yytmp )
		{
			register int yy_i;

			(void)printf( "Received token " );
			if ( yychar == 0 )
				(void)printf( "end-of-file\n" );
			else if ( yychar < 0 )
				(void)printf( "-none-\n" );
			else
			{
				for ( yy_i = 0; yytoks[yy_i].t_val >= 0;
					yy_i++ )
				{
					if ( yytoks[yy_i].t_val == yychar )
						break;
				}
				(void)printf( "%s\n", yytoks[yy_i].t_name );
			}
		}
#endif /* YYDEBUG */
		if ( ( ( yy_n += yychar ) < 0 ) || ( yy_n >= YYLAST ) )
			goto yydefault;
		if ( yychk[ yy_n = yyact[ yy_n ] ] == yychar )	/*valid shift*/
		{
			yychar = -1;
			yyval = yylval;
			yy_state = yy_n;
			if ( yyerrflag > 0 )
				yyerrflag--;
			goto yy_stack;
		}

	yydefault:
		if ( ( yy_n = yydef[ yy_state ] ) == -2 )
		{
#if YYDEBUG
			yytmp = yychar < 0;
#endif
			if ( ( yychar < 0 ) && ( ( yychar = yylex() ) < 0 ) )
				yychar = 0;		/* reached EOF */
#if YYDEBUG
			if ( yydebug && yytmp )
			{
				register int yy_i;

				(void)printf( "Received token " );
				if ( yychar == 0 )
					(void)printf( "end-of-file\n" );
				else if ( yychar < 0 )
					(void)printf( "-none-\n" );
				else
				{
					for ( yy_i = 0;
						yytoks[yy_i].t_val >= 0;
						yy_i++ )
					{
						if ( yytoks[yy_i].t_val
							== yychar )
						{
							break;
						}
					}
					(void)printf( "%s\n", yytoks[yy_i].t_name );
				}
			}
#endif /* YYDEBUG */
			/*
			** look through exception table
			*/
			{
				register int *yyxi = yyexca;

				while ( ( *yyxi != -1 ) ||
					( yyxi[1] != yy_state ) )
				{
					yyxi += 2;
				}
				while ( ( *(yyxi += 2) >= 0 ) &&
					( *yyxi != yychar ) )
					;
				if ( ( yy_n = yyxi[1] ) < 0 )
					YYACCEPT;
			}
		}

		/*
		** check for syntax error
		*/
		if ( yy_n == 0 )	/* have an error */
		{
			/* no worry about speed here! */
			switch ( yyerrflag )
			{
			case 0:		/* new error */
				yyerror( "syntax error" );
				goto skip_init;
			yyerrlab:
				/*
				** get globals into registers.
				** we have a user generated syntax type error
				*/
				yy_pv = yypv;
				yy_ps = yyps;
				yy_state = yystate;
				yynerrs++;
			skip_init:
			case 1:
			case 2:		/* incompletely recovered error */
					/* try again... */
				yyerrflag = 3;
				/*
				** find state where "error" is a legal
				** shift action
				*/
				while ( yy_ps >= yys )
				{
					yy_n = yypact[ *yy_ps ] + YYERRCODE;
					if ( yy_n >= 0 && yy_n < YYLAST &&
						yychk[yyact[yy_n]] == YYERRCODE)					{
						/*
						** simulate shift of "error"
						*/
						yy_state = yyact[ yy_n ];
						goto yy_stack;
					}
					/*
					** current state has no shift on
					** "error", pop stack
					*/
#if YYDEBUG
#	define _POP_ "Error recovery pops state %d, uncovers state %d\n"
					if ( yydebug )
						(void)printf( _POP_, *yy_ps,
							yy_ps[-1] );
#	undef _POP_
#endif
					yy_ps--;
					yy_pv--;
				}
				/*
				** there is no state on stack with "error" as
				** a valid shift.  give up.
				*/
				YYABORT;
			case 3:		/* no shift yet; eat a token */
#if YYDEBUG
				/*
				** if debugging, look up token in list of
				** pairs.  0 and negative shouldn't occur,
				** but since timing doesn't matter when
				** debugging, it doesn't hurt to leave the
				** tests here.
				*/
				if ( yydebug )
				{
					register int yy_i;

					(void)printf( "Error recovery discards " );
					if ( yychar == 0 )
						(void)printf( "token end-of-file\n" );
					else if ( yychar < 0 )
						(void)printf( "token -none-\n" );
					else
					{
						for ( yy_i = 0;
							yytoks[yy_i].t_val >= 0;
							yy_i++ )
						{
							if ( yytoks[yy_i].t_val
								== yychar )
							{
								break;
							}
						}
						(void)printf( "token %s\n",
							yytoks[yy_i].t_name );
					}
				}
#endif /* YYDEBUG */
				if ( yychar == 0 )	/* reached EOF. quit */
					YYABORT;
				yychar = -1;
				goto yy_newstate;
			}
		}/* end if ( yy_n == 0 ) */
		/*
		** reduction by production yy_n
		** put stack tops, etc. so things right after switch
		*/
#if YYDEBUG
		/*
		** if debugging, print the string that is the user's
		** specification of the reduction which is just about
		** to be done.
		*/
		if ( yydebug )
			(void)printf( "Reduce by (%d) \"%s\"\n",
				yy_n, yyreds[ yy_n ] );
#endif
		yytmp = yy_n;			/* value to switch over */
		yypvt = yy_pv;			/* $vars top of value stack */
		/*
		** Look in goto table for next state
		** Sorry about using yy_state here as temporary
		** register variable, but why not, if it works...
		** If yyr2[ yy_n ] doesn't have the low order bit
		** set, then there is no action to be done for
		** this reduction.  So, no saving & unsaving of
		** registers done.  The only difference between the
		** code just after the if and the body of the if is
		** the goto yy_stack in the body.  This way the test
		** can be made before the choice of what to do is needed.
		*/
		{
			/* length of production doubled with extra bit */
			register int yy_len = yyr2[ yy_n ];

			if ( !( yy_len & 01 ) )
			{
				yy_len >>= 1;
				yyval = ( yy_pv -= yy_len )[1];	/* $$ = $1 */
				yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
					*( yy_ps -= yy_len ) + 1;
				if ( yy_state >= YYLAST ||
					yychk[ yy_state =
					yyact[ yy_state ] ] != -yy_n )
				{
					yy_state = yyact[ yypgo[ yy_n ] ];
				}
				goto yy_stack;
			}
			yy_len >>= 1;
			yyval = ( yy_pv -= yy_len )[1];	/* $$ = $1 */
			yy_state = yypgo[ yy_n = yyr1[ yy_n ] ] +
				*( yy_ps -= yy_len ) + 1;
			if ( yy_state >= YYLAST ||
				yychk[ yy_state = yyact[ yy_state ] ] != -yy_n )
			{
				yy_state = yyact[ yypgo[ yy_n ] ];
			}
		}
					/* save until reenter driver code */
		yystate = yy_state;
		yyps = yy_ps;
		yypv = yy_pv;
	}
	/*
	** code supplied by user is placed in this switch
	*/
	switch( yytmp )
	{
		
case 1:
# line 95 "lang.y"
{ prog = yypvt[-0].lnode; } break;
case 2:
# line 98 "lang.y"
{ if (yypvt[-2].lnode != 0) {
	    struct lnode_def *p = (struct lnode_def *)yypvt[-2].lnode;
	    p->next = (struct lnode_def *)yypvt[-0].lnode;
	    yyval.lnode = (struct lnode *)p;
	  } else
	    yyval.lnode = yypvt[-0].lnode;
        } break;
case 3:
# line 105 "lang.y"
{ yyval.lnode = 0; } break;
case 5:
# line 108 "lang.y"
{ yyerror("Extra ';'. Ignored."); } break;
case 6:
# line 111 "lang.y"
{
		    if (inherit_ob || inherit_file) {
			yyerror("Multiple inheritance not allowed.\n");
			free(yypvt[-1].string);
		    } else if (prog) {
			yyerror("inherit must come first.\n");
			free(yypvt[-1].string);
		    } else {
			inherit_ob = find_object2(yypvt[-1].string);
			if (inherit_ob == 0) {
			    inherit_file = yypvt[-1].string;
			    return 0;
			}
			free(yypvt[-1].string);
			copy_variables(inherit_ob);
		    }
		} break;
case 10:
# line 132 "lang.y"
{ num_arg = current_number_of_locals; } break;
case 11:
# line 134 "lang.y"
{ struct lnode_def *p;
	  p = alloc_lnode_def(F_IDENTIFIER,yypvt[-5].string,yypvt[-0].lnode,
			      current_number_of_locals);
	  p->num_arg = num_arg;
	  if (yypvt[-6].number)
	      p->is_static = 1;
	  yyval.lnode = (struct lnode *)p;
	  if (strcmp(p->name, "heart_beat") == 0) heart_beat = yyval.lnode;
	  if (argument_name) free(argument_name);
	  argument_name = 0; free_all_local_names(); } break;
case 12:
# line 145 "lang.y"
{ yyerror("Predefined function name.\n"); yyval.lnode = 0; } break;
case 13:
# line 146 "lang.y"
{ static_variable_flag = yypvt[-0].number; } break;
case 14:
# line 147 "lang.y"
{ yyval.lnode = 0; static_variable_flag = 0; } break;
case 15:
# line 148 "lang.y"
{ yyval.lnode = 0; } break;
case 16:
# line 150 "lang.y"
{ yyval.number = 1; } break;
case 17:
# line 151 "lang.y"
{ yyval.number = 0; } break;
case 19:
# line 155 "lang.y"
{ yyerror("Missing ';'"); } break;
case 27:
# line 166 "lang.y"
{ alloc_lnode_var_def(F_STATUS, yypvt[-0].string, variable_count++); } break;
case 30:
# line 171 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_block(yypvt[-1].lnode); } break;
case 33:
# line 176 "lang.y"
{ add_local_name(yypvt[-0].string); } break;
case 34:
# line 177 "lang.y"
{ add_local_name(yypvt[-0].string); } break;
case 35:
# line 178 "lang.y"
{ yyerror("Illegal to redeclare argument"); } break;
case 36:
# line 179 "lang.y"
{ yyerror("Illegal to redeclare local name"); } break;
case 37:
# line 181 "lang.y"
{ yyval.lnode = 0; } break;
case 38:
# line 183 "lang.y"
{ if (yypvt[-1].lnode == 0)
		      yyval.lnode = yypvt[-0].lnode;
		  else
		      yyval.lnode = (struct lnode *)alloc_lnode_2(F_CONS, yypvt[-1].lnode, yypvt[-0].lnode);
	        } break;
case 39:
# line 188 "lang.y"
{ yyval.lnode = 0; } break;
case 40:
# line 190 "lang.y"
{ yyval.lnode = yypvt[-1].lnode; } break;
case 45:
# line 191 "lang.y"
{ yyval.lnode = yypvt[-1].lnode; } break;
case 47:
# line 194 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_THROW, yypvt[-1].lnode); } break;
case 48:
# line 195 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_single(F_BREAK);
			    } break;
case 49:
# line 197 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_single(F_CONTINUE);
			    } break;
case 50:
# line 201 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_WHILE, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 51:
# line 204 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_DO, yypvt[-5].lnode, yypvt[-2].lnode); } break;
case 52:
# line 207 "lang.y"
{ yyval.lnode = (struct lnode *)
           alloc_lnode_2(F_CONS,yypvt[-6].lnode,
			 (struct lnode *)
			 alloc_lnode_2(F_CONS,
				       (struct lnode *)alloc_lnode_3(F_FOR,yypvt[-4].lnode,
								     yypvt[-2].lnode,yypvt[-0].lnode),
				       (struct lnode *)0)); } break;
case 53:
# line 216 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_single(F_CONST1); } break;
case 54:
# line 218 "lang.y"
{ yyval.lnode=yypvt[-0].lnode; } break;
case 55:
# line 221 "lang.y"
{ yyval.lnode=yypvt[-0].lnode; } break;
case 56:
# line 223 "lang.y"
{ 
	  if(yypvt[-0].lnode->type==F_COMMA)
	    yyval.lnode = (struct lnode *)alloc_lnode_2(F_COMMA, yypvt[-2].lnode, yypvt[-0].lnode);
	  else
	    yyval.lnode = (struct lnode *)alloc_lnode_2(F_COMMA, yypvt[-2].lnode,
			      (struct lnode *)alloc_lnode_2(F_COMMA, yypvt[-0].lnode, 0));
	} break;
case 58:
# line 233 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(yypvt[-1].number, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 59:
# line 235 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_CATCH, yypvt[-0].lnode); } break;
case 60:
# line 236 "lang.y"
{ yyerror("Illegal LHS"); yyval.lnode = 0; } break;
case 61:
# line 238 "lang.y"
{ yyval.number = F_ASSIGN; } break;
case 62:
# line 239 "lang.y"
{ yyval.number = F_AND_EQ; } break;
case 63:
# line 240 "lang.y"
{ yyval.number = F_OR_EQ; } break;
case 64:
# line 241 "lang.y"
{ yyval.number = F_XOR_EQ; } break;
case 65:
# line 242 "lang.y"
{ yyval.number = F_LSH_EQ; } break;
case 66:
# line 243 "lang.y"
{ yyval.number = F_RSH_EQ; } break;
case 67:
# line 244 "lang.y"
{ yyval.number = F_ADD_EQ; } break;
case 68:
# line 245 "lang.y"
{ yyval.number = F_SUB_EQ; } break;
case 69:
# line 246 "lang.y"
{ yyval.number = F_MULT_EQ; } break;
case 70:
# line 247 "lang.y"
{ yyval.number = F_MOD; } break;
case 71:
# line 248 "lang.y"
{ yyval.number = F_DIV_EQ; } break;
case 72:
# line 250 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_RETURN, 0); } break;
case 73:
# line 251 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_RETURN, yypvt[-0].lnode); } break;
case 74:
# line 253 "lang.y"
{ yyval.lnode = 0; } break;
case 75:
# line 255 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_CONS, yypvt[-0].lnode, 0); } break;
case 76:
# line 257 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_CONS, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 78:
# line 261 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_3(F_COND, yypvt[-4].lnode, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 80:
# line 265 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_LOR, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 82:
# line 269 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_LAND, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 84:
# line 273 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_OR, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 86:
# line 277 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_XOR, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 88:
# line 281 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_AND, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 90:
# line 285 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_EQ, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 91:
# line 287 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_NE, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 93:
# line 291 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_GT, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 94:
# line 293 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_GE, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 95:
# line 295 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_LT, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 96:
# line 297 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_LE, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 98:
# line 301 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_LSH, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 99:
# line 303 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_RSH, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 101:
# line 307 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_ADD, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 102:
# line 309 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_SUBTRACT, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 104:
# line 313 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_MULTIPLY, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 105:
# line 315 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_MOD, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 106:
# line 317 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_DIVIDE, yypvt[-2].lnode, yypvt[-0].lnode); } break;
case 108:
# line 321 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_INC, yypvt[-0].lnode); } break;
case 109:
# line 323 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_DEC, yypvt[-0].lnode); } break;
case 110:
# line 325 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_NOT, yypvt[-0].lnode); } break;
case 111:
# line 327 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_COMPL, yypvt[-0].lnode); } break;
case 112:
# line 329 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_NEGATE, yypvt[-0].lnode); } break;
case 114:
# line 333 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_POST_INC, yypvt[-1].lnode); } break;
case 115:
# line 335 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_POST_DEC, yypvt[-1].lnode); } break;
case 120:
# line 338 "lang.y"
{ yyval.lnode = yypvt[-1].lnode; } break;
case 121:
# line 339 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(F_AGGREGATE, yypvt[-2].lnode); } break;
case 122:
# line 342 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_number(F_IDENTIFIER,
						    check_deklared(yypvt[-0].string));
						    free(yypvt[-0].string); } break;
case 123:
# line 345 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_single(F_ARGUMENT); } break;
case 125:
# line 348 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_2(F_SUBSCRIPT, yypvt[-3].lnode, yypvt[-1].lnode); } break;
case 126:
# line 351 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_name(F_STRING, yypvt[-0].string); } break;
case 127:
# line 354 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_1(yypvt[-3].number, yypvt[-1].lnode); } break;
case 128:
# line 356 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_funcall(F_FUNCTION, yypvt[-3].string, yypvt[-1].lnode); } break;
case 129:
# line 358 "lang.y"
{
		    struct lnode *p;
		    p = (struct lnode *)alloc_lnode_name(F_STRING, yypvt[-3].string),
		    p = (struct lnode *)alloc_lnode_2(F_CONS, p, yypvt[-1].lnode);
		    p = (struct lnode *)alloc_lnode_2(F_CONS, yypvt[-5].lnode, p);
		    yyval.lnode = (struct lnode *)alloc_lnode_1(F_CALL_OTHER, p);
		} break;
case 131:
# line 368 "lang.y"
{
		    char *p = xalloc(strlen(yypvt[-0].string) + 3);
		    strcpy(p, "::"); strcat(p, yypvt[-0].string); free(yypvt[-0].string);
		    yyval.string = p;
		} break;
case 132:
# line 374 "lang.y"
{ yyval.number = F_THIS_PLAYER; } break;
case 133:
# line 375 "lang.y"
{ yyval.number = F_THIS_OBJECT; } break;
case 134:
# line 376 "lang.y"
{ yyval.number = F_SET_FALSE; } break;
case 135:
# line 377 "lang.y"
{ yyval.number = F_WRITE; } break;
case 136:
# line 378 "lang.y"
{ yyval.number = F_ADD_VERB; } break;
case 137:
# line 379 "lang.y"
{ yyval.number = F_ADD_XVERB; } break;
case 138:
# line 380 "lang.y"
{ yyval.number = F_ADD_SUBST; } break;
case 139:
# line 381 "lang.y"
{ yyval.number = F_ED; } break;
case 140:
# line 382 "lang.y"
{ yyval.number = F_ADD_ADJ; } break;
case 141:
# line 383 "lang.y"
{ yyval.number = F_SHUTDOWN; } break;
case 142:
# line 384 "lang.y"
{ yyval.number = F_CALL_OTHER; } break;
case 143:
# line 385 "lang.y"
{ yyval.number = F_CLONE_OBJECT; } break;
case 144:
# line 386 "lang.y"
{ yyval.number = F_ADD_ACTION; } break;
case 145:
# line 387 "lang.y"
{ yyval.number = F_MOVE_OBJECT; } break;
case 146:
# line 388 "lang.y"
{ yyval.number = F_LOG_FILE; } break;
case 147:
# line 389 "lang.y"
{ yyval.number = F_SET_TRUE; } break;
case 148:
# line 390 "lang.y"
{ yyval.number = F_SAVE_OBJECT; } break;
case 149:
# line 391 "lang.y"
{ yyval.number = F_ENVIRONMENT; } break;
case 150:
# line 392 "lang.y"
{ yyval.number = F_PRESENT; } break;
case 151:
# line 393 "lang.y"
{ yyval.number = F_CREATOR; } break;
case 152:
# line 394 "lang.y"
{ yyval.number = F_SET_HEART_BEAT; } break;
case 153:
# line 395 "lang.y"
{ yyval.number = F_COMMAND; } break;
case 154:
# line 396 "lang.y"
{ yyval.number = F_FILE_NAME; } break;
case 155:
# line 397 "lang.y"
{ yyval.number = F_QUERY_VERB; } break;
case 156:
# line 398 "lang.y"
{ yyval.number = F_QUERY_VERB; } break;
case 157:
# line 399 "lang.y"
{ yyval.number = F_PARSE_COMMAND; } break;
case 158:
# line 400 "lang.y"
{ yyval.number = F_EXPLODE; } break;
case 159:
# line 401 "lang.y"
{ yyval.number = F_IMPLODE; } break;
case 160:
# line 402 "lang.y"
{ yyval.number = F_QUERY_IDLE; } break;
case 161:
# line 403 "lang.y"
{ yyval.number = F_QUERY_LOAD_AVERAGE; } break;
case 162:
# line 404 "lang.y"
{ yyval.number = F_FILTER_OBJECTS; } break;
case 163:
# line 405 "lang.y"
{ yyval.number = F_TAIL; } break;
case 164:
# line 406 "lang.y"
{ yyval.number = F_MKDIR; } break;
case 165:
# line 407 "lang.y"
{ yyval.number = F_RMDIR; } break;
case 166:
# line 408 "lang.y"
{ yyval.number = F_QUERY_SNOOP; } break;
case 167:
# line 409 "lang.y"
{ yyval.number = F_QUERY_HOST_NAME; } break;
case 168:
# line 410 "lang.y"
{ yyval.number = F_PREVIOUS_OBJECT; } break;
case 169:
# line 411 "lang.y"
{ yyval.number = F_CRYPT; } break;
case 170:
# line 412 "lang.y"
{ yyval.number = F_CAT; } break;
case 171:
# line 413 "lang.y"
{ yyval.number = F_GREP; } break;
case 172:
# line 414 "lang.y"
{ yyval.number = F_LS; } break;
case 173:
# line 415 "lang.y"
{ yyval.number = F_RM; } break;
case 174:
# line 416 "lang.y"
{ yyval.number = F_REALLOCATE; } break;
case 175:
# line 417 "lang.y"
{ yyval.number = F_CONTENTS; } break;
case 176:
# line 418 "lang.y"
{ yyval.number = F_INDEX; } break;
case 177:
# line 419 "lang.y"
{ yyval.number = F_SEARCHA; } break;
case 178:
# line 420 "lang.y"
{ yyval.number = F_IN_EDITOR; } break;
case 179:
# line 421 "lang.y"
{ yyval.number = F_FIND_LIVING; } break;
case 180:
# line 422 "lang.y"
{ yyval.number = F_FIND_PLAYER; } break;
case 181:
# line 423 "lang.y"
{ yyval.number = F_WRITE_FILE; } break;
case 182:
# line 424 "lang.y"
{ yyval.number = F_FILE_SIZE; } break;
case 183:
# line 425 "lang.y"
{ yyval.number = F_LOWER_CASE; } break;
case 184:
# line 426 "lang.y"
{ yyval.number = F_TELL_OBJECT; } break;
case 185:
# line 427 "lang.y"
{ yyval.number = F_FIND_OBJECT; } break;
case 186:
# line 428 "lang.y"
{ yyval.number = F_TRANSFER; } break;
case 187:
# line 429 "lang.y"
{ yyval.number = F_REGCOMP; } break;
case 188:
# line 430 "lang.y"
{ yyval.number = F_REGEXEC; } break;
case 189:
# line 431 "lang.y"
{ yyval.number = F_LOCALCMD; } break;
case 190:
# line 432 "lang.y"
{ yyval.number = F_SWAP; } break;
case 191:
# line 433 "lang.y"
{ yyval.number = F_ADD_WORTH; } break;
case 192:
# line 434 "lang.y"
{ yyval.number = F_TIME; } break;
case 193:
# line 435 "lang.y"
{ yyval.number = F_PEOPLE; } break;
case 194:
# line 436 "lang.y"
{ yyval.number = F_INPUT_TO; } break;
case 195:
# line 437 "lang.y"
{ yyval.number = F_ENABLE_COMMANDS; } break;
case 196:
# line 438 "lang.y"
{ yyval.number = F_CAPITALIZE; } break;
case 197:
# line 439 "lang.y"
{ yyval.number = F_LIVING; } break;
case 198:
# line 440 "lang.y"
{ yyval.number = F_RANDOM; } break;
case 199:
# line 441 "lang.y"
{ yyval.number = F_SNOOP; } break;
case 200:
# line 442 "lang.y"
{ yyval.number = F_FIRST_INVENTORY; } break;
case 201:
# line 443 "lang.y"
{ yyval.number = F_NEXT_INVENTORY; } break;
case 202:
# line 444 "lang.y"
{ yyval.number = F_SET_LIGHT; } break;
case 203:
# line 445 "lang.y"
{ yyval.number = F_DESTRUCT; } break;
case 204:
# line 446 "lang.y"
{ yyval.number = F_CREATE_WIZARD; } break;
case 205:
# line 447 "lang.y"
{ yyval.number = F_SAY; } break;
case 206:
# line 448 "lang.y"
{ yyval.number = F_TELL_ROOM; } break;
case 207:
# line 449 "lang.y"
{ yyval.number = F_SHOUT; } break;
case 208:
# line 450 "lang.y"
{ yyval.number = F_RESTORE_OBJECT; } break;
case 209:
# line 451 "lang.y"
{ yyval.number = F_SSCANF; } break;
case 210:
# line 452 "lang.y"
{ yyval.number = F_QUERY_IP_NUMBER; } break;
case 211:
# line 453 "lang.y"
{ yyval.number = F_ALLOCATE; } break;
case 212:
# line 454 "lang.y"
{ yyval.number = F_SIZEOF; } break;
case 213:
# line 455 "lang.y"
{ yyval.number = F_CTIME; } break;
case 214:
# line 456 "lang.y"
{ yyval.number = F_DISABLE_COMMANDS; } break;
case 215:
# line 457 "lang.y"
{ yyval.number = F_CALL_OUT; } break;
case 216:
# line 458 "lang.y"
{ yyval.number = F_STRINGP; } break;
case 217:
# line 459 "lang.y"
{ yyval.number = F_INTP; } break;
case 218:
# line 460 "lang.y"
{ yyval.number = F_OBJECTP; } break;
case 219:
# line 461 "lang.y"
{ yyval.number = F_POINTERP; } break;
case 220:
# line 462 "lang.y"
{ yyval.number = F_USERS; } break;
case 221:
# line 463 "lang.y"
{ yyval.number = F_EXTRACT; } break;
case 222:
# line 464 "lang.y"
{ yyval.number = F_REMOVE_CALL_OUT; } break;
case 223:
# line 465 "lang.y"
{ yyval.number = F_FIND_CALL_OUT; } break;
case 224:
# line 466 "lang.y"
{ yyval.number = F_COMBINE_FREE_LIST; } break;
case 225:
# line 467 "lang.y"
{ yyval.number = F_STRLEN; } break;
case 226:
# line 468 "lang.y"
{ yyval.number = F_REMOTE_COMMAND; } break;
case 227:
# line 469 "lang.y"
{ yyval.number = F_INTERACTIVE; } break;
case 228:
# line 470 "lang.y"
{ yyval.number = F_CALLER; } break;
case 229:
# line 471 "lang.y"
{ yyval.number = F_TYPEOF; } break;
case 230:
# line 472 "lang.y"
{ yyval.number = F_CP; } break;
case 231:
# line 473 "lang.y"
{ yyval.number = F_RENAME; } break;
case 232:
# line 474 "lang.y"
{ yyval.number = F_READ_FILE; } break;
case 233:
# line 475 "lang.y"
{ yyval.number = F_SET_BIT; } break;
case 234:
# line 476 "lang.y"
{ yyval.number = F_CLEAR_BIT; } break;
case 235:
# line 477 "lang.y"
{ yyval.number = F_TEST_BIT; } break;
case 236:
# line 478 "lang.y"
{ yyval.number = F_SET_LIVING_NAME; } break;
case 237:
# line 479 "lang.y"
{ yyval.number = F_NOTIFY_FAIL; } break;
case 238:
# line 481 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_3(F_IF, yypvt[-2].lnode, yypvt[-0].lnode, 0); } break;
case 239:
# line 483 "lang.y"
{ yyval.lnode = (struct lnode *)alloc_lnode_3(F_IF, yypvt[-4].lnode, yypvt[-2].lnode, yypvt[-0].lnode); } break;
	}
	goto yystack;		/* reset registers in driver code */
}