1 /* Copyright (c) 2003, Steve Dekorte
2 docLicense("BSD revised")
4 * The lexer takes source code and produces a token stream.
7 #ifndef IOLEXER_DEFINED
8 #define IOLEXER_DEFINED 1
32 char *errorDescription
;
35 IoLexer
*IoLexer_new(void);
36 void IoLexer_free(IoLexer
*self
);
37 void IoLexer_clear(IoLexer
*self
);
39 IoToken
*IoLexer_errorToken(IoLexer
*self
);
41 /* --- lexing --------------- */
42 void IoLexer_string_(IoLexer
*self
, const char *string
);
43 int IoLexer_lex(IoLexer
*self
);
44 void IoLexer_print(IoLexer
*self
);
45 void IoLexer_printTokens(IoLexer
*self
);
46 char *IoLexer_errorDescription(IoLexer
*self
);
48 /* --- getting results ------ */
49 IoToken
*IoLexer_top(IoLexer
*self
);
50 IoTokenType
IoLexer_topType(IoLexer
*self
);
51 IoToken
*IoLexer_pop(IoLexer
*self
);
53 /* --- stack management ----- */
54 char *IoLexer_lastPos(IoLexer
*self
);
55 void IoLexer_pushPos(IoLexer
*self
);
56 void IoLexer_popPos(IoLexer
*self
);
57 void IoLexer_popPosBack(IoLexer
*self
);
59 /* --- next/prev character --- */
60 uchar_t
IoLexer_nextChar(IoLexer
*self
);
61 uchar_t
IoLexer_prevChar(IoLexer
*self
);
63 char *IoLexer_current(IoLexer
*self
);
64 int IoLexer_onNULL(IoLexer
*self
);
68 int IoToken_grabLength(IoLexer
*self
);
69 void IoToken_grabTokenType_(IoLexer
*self
, IoTokenType type
);
70 IoToken
*IoLexer_addTokenString_length_type_(IoLexer
*self
, const char *s1
, size_t len
, IoTokenType type
);
74 int IoLexer_read(IoLexer
*self
);
75 void IoLexer_messageChain(IoLexer
*self
);
79 int IoLexer_readMessage(IoLexer
*self
);
80 int IoLexer_readPadding(IoLexer
*self
);
81 int IoLexer_readOpenParen(IoLexer
*self
);
82 int IoLexer_readCloseParen(IoLexer
*self
);
86 int IoLexer_readSymbol(IoLexer
*self
);
87 int IoLexer_readIdentifier(IoLexer
*self
);
88 int IoLexer_readOperator(IoLexer
*self
);
92 int IoLexer_readComment(IoLexer
*self
);
93 int IoLexer_readSlashStarComment(IoLexer
*self
);
94 int IoLexer_readSlashSlashComment(IoLexer
*self
);
95 int IoLexer_readPoundComment(IoLexer
*self
);
99 int IoLexer_readQuote(IoLexer
*self
);
100 int IoLexer_readMonoQuote(IoLexer
*self
);
101 int IoLexer_readTriQuote(IoLexer
*self
);
105 int IoLexer_readTokenChar_type_(IoLexer
*self
, char c
, IoTokenType type
);
106 int IoLexer_readTokenString_(IoLexer
*self
, const char *s
);
108 int IoLexer_readString_(IoLexer
*self
, const char *s
);
109 int IoLexer_readChar_(IoLexer
*self
, char c
);
110 int IoLexer_readCharIn_(IoLexer
*self
, const char *s
);
112 int IoLexer_readNonReturn(IoLexer
*self
);
113 int IoLexer_readNonQuote(IoLexer
*self
);
115 // character definitions
117 int IoLexer_readCharacter(IoLexer
*self
);
119 int IoLexer_readOpChar(IoLexer
*self
);
120 int IoLexer_readSpecialChar(IoLexer
*self
);
121 int IoLexer_readNonColonSpecialChar(IoLexer
*self
);
122 int IoLexer_readDigit(IoLexer
*self
);
123 int IoLexer_readLetter(IoLexer
*self
);
124 int IoLexer_readDigit(IoLexer
*self
);
126 int IoLexer_readTerminator(IoLexer
*self
);
127 int IoLexer_readTerminatorChar(IoLexer
*self
);
129 int IoLexer_readSeparator(IoLexer
*self
);
130 int IoLexer_readSeparatorChar(IoLexer
*self
);
132 int IoLexer_readWhitespace(IoLexer
*self
);
133 int IoLexer_readWhitespaceChar(IoLexer
*self
);
135 int IoLexer_readNumber(IoLexer
*self
);
136 int IoLexer_readDecimal(IoLexer
*self
);
137 int IoLexer_readHexNumber(IoLexer
*self
);
141 IoToken
*IoLexer_rootMessageToken(IoLexer
*self
, IoToken
**error
);