Merge branch 'master' of feistymeow.org:feisty_meow
[feisty_meow.git] / examples / cpp_grammar_code / CxxLexing.hxx
1 #include <CxxToken.hxx>
2
3 #include <CxxParser.hxx>
4
5 static CxxToken *yyToken;
6 static CxxToken *make_character(const char *someText, size_t aLength);
7 static CxxToken *make_string(const char *someText, size_t aLength);
8 static CxxToken *make_identifier(const char *someText, size_t aLength);
9 static void make_line(const char *yyText, size_t yyLeng);
10 static CxxToken *make_literal_character(const char *someText, size_t aLength);
11 static CxxToken *make_narrow_character(const char *someText, size_t aLength);
12 static CxxToken *make_narrow_string(const char *someText, size_t aLength);
13 static CxxToken *make_number(const char *someText, size_t aLength);
14 static CxxToken *make_token(size_t aCxxToken);
15 static CxxToken *make_wide_character(const char *someText, size_t aLength);
16 static CxxToken *make_wide_string(const char *someText, size_t aLength);
17
18 #define LEX_SAVE_LINE(yyText, yyLeng) make_line(yyText, yyLeng);
19 #define LEX_ASCII_TOKEN(a) yyToken = make_token(a); return true;
20 #define LEX_STATIC_TOKEN(a) static CxxToken theToken(PARSE_TOKEN(a)); yyToken = &theToken; return true;
21 #define LEX_C_STATIC_TOKEN(a) \
22         if (c_keywords) { LEX_IDENTIFIER_TOKEN(yytext, yyleng) } \
23         else { LEX_STATIC_TOKEN(a) } return true;
24 #define LEX_ESCAPED_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(CharacterLiteral)
25 //      yyToken = make_literal_character(yytext, yyleng); return true;
26 #define LEX_CHARACTER_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(CharacterLiteral)
27 //      yyToken = make_character(yyText, yyLeng); return true;
28 #define LEX_STRING_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(StringLiteral)
29 //      yyToken = make_string(yyText, yyLeng); return true;
30 #define LEX_IDENTIFIER_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(Identifier)
31 //      yyToken = make_identifier(yyText, yyLeng); return true;
32 #define LEX_NUMBER_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(IntegerLiteral)
33 //      yyToken = make_number(yyText, yyLeng); return true;