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