1 /*
2  * Motif Tools Library, Version 3.1
3  * $Id: Lexer.h,v 1.1.1.1 2001/02/10 13:47:18 motiftools Exp $
4  *
5  * Written by David Flanagan.
6  * Copyright (c) 1992-2001 by David Flanagan.
7  * All Rights Reserved.  See the file COPYRIGHT for details.
8  * This is open source software.  See the file LICENSE for details.
9  * There is no warranty for this software.  See NO_WARRANTY for details.
10  *
11  * $Log: Lexer.h,v $
12  * Revision 1.1.1.1  2001/02/10 13:47:18  motiftools
13  * Initial import of Xmt310 to CVS
14  *
15  *
16  */
17 
18 #ifndef _XmtLexer_h
19 #define _XmtLexer_h
20 
21 #include <ctype.h>
22 
23 typedef enum {
24     XmtLexerNone,
25 
26     XmtLexerString,
27     XmtLexerIdent,
28     XmtLexerKeyword,
29     XmtLexerInteger,
30 
31     XmtLexerLParen,
32     XmtLexerRParen,
33     XmtLexerLBracket,
34     XmtLexerRBracket,
35     XmtLexerLBrace,
36     XmtLexerRBrace,
37     XmtLexerLess,
38     XmtLexerGreater,
39     XmtLexerPlus,
40     XmtLexerMinus,
41     XmtLexerAsterisk,
42     XmtLexerSlash,
43     XmtLexerBar,
44     XmtLexerEqual,
45     XmtLexerSharp,
46     XmtLexerTwiddle,
47     XmtLexerPercent,
48     XmtLexerDollar,
49     XmtLexerPeriod,
50     XmtLexerCaret,
51     XmtLexerColon,
52     XmtLexerSemicolon,
53     XmtLexerComma,
54 
55     XmtLexerEndOfString,
56     XmtLexerError
57 } XmtLexerToken;
58 
59 typedef struct {
60     _Xconst char *c;
61     XmtLexerToken token;
62     int intval;
63     String strval;
64     String *keywords;  /* must be in alphabetical order */
65     int num_keywords;
66 } XmtLexerRec, *XmtLexer;
67 
68 #define XmtLexerIntValue(l) ((l)->intval)
69 #define XmtLexerStrValue(l) ((l)->strval)
70 #define XmtLexerStrLength(l) ((l)->intval)
71 #define XmtLexerKeyValue(l) ((l)->intval)
72 #define XmtLexerGetToken(l) \
73     (((l)->token != XmtLexerNone)?(l)->token:_XmtLexerGetToken(l))
74 #define XmtLexerConsumeToken(l) ((l)->token = XmtLexerNone)
75 #define XmtLexerSkipWhite(l) while (isspace((int)*(l)->c)) (l)->c++
76 /* ConsumeToken immediately followed by GetToken */
77 #define XmtLexerNextToken(l) _XmtLexerGetToken(l)
78 
79 _XFUNCPROTOBEGIN
80 #if NeedFunctionPrototypes
81 extern XmtLexer XmtLexerCreate(String *, int);
82 extern void XmtLexerDestroy(XmtLexer);
83 extern void XmtLexerInit(XmtLexer, StringConst);
84 extern XmtLexerToken _XmtLexerGetToken(XmtLexer);
85 extern XmtLexerToken XmtLexerScan(XmtLexer, StringConst, XmtWideBoolean);
86 extern Boolean XmtLexerGetArgList(XmtLexer, String *, Cardinal, Cardinal *);
87 #else
88 extern XmtLexer XmtLexerCreate();
89 extern void XmtLexerDestroy();
90 extern void XmtLexerInit();
91 extern XmtLexerToken _XmtLexerGetToken();
92 extern XmtLexerToken XmtLexerScan();
93 extern Boolean XmtLexerGetArgList();
94 #endif
95 _XFUNCPROTOEND
96 
97 #endif
98