X-Git-Url: https://feistymeow.org/gitweb/?a=blobdiff_plain;f=infobase%2Fexamples%2Fcpp_grammar_code%2FCxxLexing.hxx;fp=infobase%2Fexamples%2Fcpp_grammar_code%2FCxxLexing.hxx;h=03c122d027573f450a6736306013160ad53019c5;hb=5af202498131eb5eed099b84187e59889303faa8;hp=0000000000000000000000000000000000000000;hpb=a4d12589f1cd01826814842cde0b3eac95890bc9;p=feisty_meow.git diff --git a/infobase/examples/cpp_grammar_code/CxxLexing.hxx b/infobase/examples/cpp_grammar_code/CxxLexing.hxx new file mode 100644 index 00000000..03c122d0 --- /dev/null +++ b/infobase/examples/cpp_grammar_code/CxxLexing.hxx @@ -0,0 +1,33 @@ +#include + +#include + +static CxxToken *yyToken; +static CxxToken *make_character(const char *someText, size_t aLength); +static CxxToken *make_string(const char *someText, size_t aLength); +static CxxToken *make_identifier(const char *someText, size_t aLength); +static void make_line(const char *yyText, size_t yyLeng); +static CxxToken *make_literal_character(const char *someText, size_t aLength); +static CxxToken *make_narrow_character(const char *someText, size_t aLength); +static CxxToken *make_narrow_string(const char *someText, size_t aLength); +static CxxToken *make_number(const char *someText, size_t aLength); +static CxxToken *make_token(size_t aCxxToken); +static CxxToken *make_wide_character(const char *someText, size_t aLength); +static CxxToken *make_wide_string(const char *someText, size_t aLength); + +#define LEX_SAVE_LINE(yyText, yyLeng) make_line(yyText, yyLeng); +#define LEX_ASCII_TOKEN(a) yyToken = make_token(a); return true; +#define LEX_STATIC_TOKEN(a) static CxxToken theToken(PARSE_TOKEN(a)); yyToken = &theToken; return true; +#define LEX_C_STATIC_TOKEN(a) \ + if (c_keywords) { LEX_IDENTIFIER_TOKEN(yytext, yyleng) } \ + else { LEX_STATIC_TOKEN(a) } return true; +#define LEX_ESCAPED_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(CharacterLiteral) +// yyToken = make_literal_character(yytext, yyleng); return true; +#define LEX_CHARACTER_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(CharacterLiteral) +// yyToken = make_character(yyText, yyLeng); return true; +#define LEX_STRING_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(StringLiteral) +// yyToken = make_string(yyText, yyLeng); return true; +#define LEX_IDENTIFIER_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(Identifier) +// yyToken = make_identifier(yyText, yyLeng); return true; +#define LEX_NUMBER_TOKEN(yyText, yyLeng) LEX_STATIC_TOKEN(IntegerLiteral) +// yyToken = make_number(yyText, yyLeng); return true;