~ubuntu-branches/ubuntu/intrepid/nethack/intrepid

« back to all changes in this revision

Viewing changes to util/dgn_comp.l

  • Committer: Bazaar Package Importer
  • Author(s): Joshua Kwan
  • Date: 2004-04-28 22:20:28 UTC
  • Revision ID: james.westby@ubuntu.com-20040428222028-xxg55fuf5dxiaogu
Tags: upstream-3.4.3
ImportĀ upstreamĀ versionĀ 3.4.3

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
%{
 
2
/*      SCCS Id: @(#)dgn_lex.c  3.4     2002/03/27      */
 
3
/*      Copyright (c) 1989 by Jean-Christophe Collet */
 
4
/*      Copyright (c) 1990 by M. Stephenson          */
 
5
/* NetHack may be freely redistributed.  See license for details. */
 
6
 
 
7
#define DGN_COMP
 
8
 
 
9
#include "config.h"
 
10
#include "dgn_comp.h"
 
11
#include "dgn_file.h"
 
12
 
 
13
/*
 
14
 * Most of these don't exist in flex, yywrap is macro and
 
15
 * yyunput is properly declared in flex.skel.
 
16
 */
 
17
#if !defined(FLEX_SCANNER) && !defined(FLEXHACK_SCANNER)
 
18
int FDECL(yyback, (int *,int));
 
19
int NDECL(yylook);
 
20
int NDECL(yyinput);
 
21
int NDECL(yywrap);
 
22
int NDECL(yylex);
 
23
        /* Traditional lexes let yyunput() and yyoutput() default to int;
 
24
         * newer ones may declare them as void since they don't return
 
25
         * values.  For even more fun, the lex supplied as part of the
 
26
         * newer unbundled compiler for SunOS 4.x adds the void declarations
 
27
         * (under __STDC__ or _cplusplus ifdefs -- otherwise they remain
 
28
         * int) while the bundled lex and the one with the older unbundled
 
29
         * compiler do not.  To detect this, we need help from outside --
 
30
         * sys/unix/Makefile.utl.
 
31
         *
 
32
         * Digital UNIX is difficult and still has int in spite of all
 
33
         * other signs.
 
34
         */
 
35
# if defined(NeXT) || defined(SVR4) || defined(_AIX32)
 
36
#  define VOIDYYPUT
 
37
# endif
 
38
# if !defined(VOIDYYPUT) && defined(POSIX_TYPES)
 
39
#  if !defined(BOS) && !defined(HISX) && !defined(_M_UNIX) && !defined(VMS)
 
40
#   define VOIDYYPUT
 
41
#  endif
 
42
# endif
 
43
# if !defined(VOIDYYPUT) && defined(WEIRD_LEX)
 
44
#  if defined(SUNOS4) && defined(__STDC__) && (WEIRD_LEX > 1)
 
45
#   define VOIDYYPUT
 
46
#  endif
 
47
# endif
 
48
# if defined(VOIDYYPUT) && defined(__osf__)
 
49
#  undef VOIDYYPUT
 
50
# endif
 
51
# ifdef VOIDYYPUT
 
52
void FDECL(yyunput, (int));
 
53
void FDECL(yyoutput, (int));
 
54
# else
 
55
int FDECL(yyunput, (int));
 
56
int FDECL(yyoutput, (int));
 
57
# endif
 
58
#endif  /* !FLEX_SCANNER && !FLEXHACK_SCANNER */
 
59
 
 
60
#ifdef FLEX_SCANNER
 
61
#define YY_MALLOC_DECL \
 
62
               genericptr_t FDECL(malloc, (size_t)); \
 
63
               genericptr_t FDECL(realloc, (genericptr_t,size_t));
 
64
#endif
 
65
 
 
66
 
 
67
void FDECL(init_yyin, (FILE *));
 
68
void FDECL(init_yyout, (FILE *));
 
69
 
 
70
/* this doesn't always get put in dgn_comp.h
 
71
 * (esp. when using older versions of bison)
 
72
 */
 
73
 
 
74
extern YYSTYPE yylval;
 
75
 
 
76
int line_number = 1;
 
77
 
 
78
%}
 
79
%%
 
80
DUNGEON         return(A_DUNGEON);
 
81
up              { yylval.i=1; return(UP_OR_DOWN); }
 
82
down            { yylval.i=0; return(UP_OR_DOWN); }
 
83
ENTRY           return(ENTRY);
 
84
stair           return(STAIR);
 
85
no_up           return(NO_UP);
 
86
no_down         return(NO_DOWN);
 
87
portal          return(PORTAL);
 
88
PROTOFILE       return(PROTOFILE);
 
89
DESCRIPTION     return(DESCRIPTION);
 
90
LEVELDESC       return(LEVELDESC);
 
91
ALIGNMENT       return(ALIGNMENT);
 
92
LEVALIGN        return(LEVALIGN);
 
93
town            { yylval.i=TOWN ; return(DESCRIPTOR); }
 
94
hellish         { yylval.i=HELLISH ; return(DESCRIPTOR); }
 
95
mazelike        { yylval.i=MAZELIKE ; return(DESCRIPTOR); }
 
96
roguelike       { yylval.i=ROGUELIKE ; return(DESCRIPTOR); }
 
97
unaligned       { yylval.i=D_ALIGN_NONE ; return(DESCRIPTOR); }
 
98
noalign         { yylval.i=D_ALIGN_NONE ; return(DESCRIPTOR); }
 
99
lawful          { yylval.i=D_ALIGN_LAWFUL ; return(DESCRIPTOR); }
 
100
neutral         { yylval.i=D_ALIGN_NEUTRAL ; return(DESCRIPTOR); }
 
101
chaotic         { yylval.i=D_ALIGN_CHAOTIC ; return(DESCRIPTOR); }
 
102
BRANCH          return(BRANCH);
 
103
CHAINBRANCH     return(CHBRANCH);
 
104
LEVEL           return(LEVEL);
 
105
RNDLEVEL        return(RNDLEVEL);
 
106
CHAINLEVEL      return(CHLEVEL);
 
107
RNDCHLEVEL      return(RNDCHLEVEL);
 
108
[-0-9]+         { yylval.i=atoi(yytext); return(INTEGER); }
 
109
\"[^"]*\"       { yytext[yyleng-1] = 0; /* Discard the trailing \" */
 
110
                  yylval.str = (char *) alloc(strlen(yytext+1)+1);
 
111
                  Strcpy(yylval.str, yytext+1); /* Discard the first \" */
 
112
                  return(STRING); }
 
113
^#.*\n          { line_number++; }
 
114
\r?\n           { line_number++; }
 
115
[ \t]+          ;       /* skip trailing tabs & spaces */
 
116
.               { return yytext[0]; }
 
117
%%
 
118
 
 
119
/* routine to switch to another input file; needed for flex */
 
120
void init_yyin( input_f )
 
121
FILE *input_f;
 
122
{
 
123
#if defined(FLEX_SCANNER) || defined(FLEXHACK_SCANNER)
 
124
        if (yyin)
 
125
            yyrestart(input_f);
 
126
        else
 
127
#endif
 
128
            yyin = input_f;
 
129
}
 
130
/* analogous routine (for completeness) */
 
131
void init_yyout( output_f )
 
132
FILE *output_f;
 
133
{
 
134
        yyout = output_f;
 
135
}
 
136
 
 
137
/*dgn_comp.l*/