Subversion Repositories tendra.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
                 Crown Copyright (c) 1997
    
    This TenDRA(r) Computer Program is subject to Copyright
    owned by the United Kingdom Secretary of State for Defence
    acting through the Defence Evaluation and Research Agency
    (DERA).  It is made available to Recipients with a
    royalty-free licence for its use, reproduction, transfer
    to other parties and amendment for any purpose not excluding
    product development provided that any such use et cetera
    shall be deemed to be acceptance of the following conditions:-
    
        (1) Its Recipients shall ensure that this Notice is
        reproduced upon any copies or amended versions of it;
    
        (2) Any amended version of it shall be clearly marked to
        show both the nature of and the organisation responsible
        for the relevant amendment or amendments;
    
        (3) Its onward transfer from a recipient to another
        party shall be deemed to be that party's acceptance of
        these conditions;
    
        (4) DERA gives no warranty or assurance as to its
        quality or suitability for any purpose and DERA accepts
        no liability whatsoever in relation to any use to which
        it may be put.
*/


/*
    LEXICAL TOKEN TABLES

    This file gives the list of lexical tokens.  It is included from several
    points with the macro LEX_TOKEN defined so as to extract the desired
    information.  The arguments are as follows:

        1.  The token number, corresponding to the values given in syntax.h.
        2.  The associated token name, if any.
        3.  A value indicating the semantic class the token is likely to
            start (see predict.c).

    The list of tokens in the grammars, syntax.sid and psyntax.sid, need
    to kept in step with this list.
*/


#ifdef LEX_TOKEN


/*
    MISCELLANEOUS TOKENS

    These tokens describe the identifiers, literals and other miscellaneous
    lexical tokens.  The target dependent conditionals are included in this
    group because they have an associated value.
*/

LEX_TOKEN ( lex_unknown, "<unknown>", TOK_NONE )

LEX_TOKEN ( lex_identifier, "<id>", TOK_EXP )
LEX_TOKEN ( lex_type_Hname, "<type>", TOK_TYPE )
LEX_TOKEN ( lex_namespace_Hname, "<namespace>", TOK_NONE )
LEX_TOKEN ( lex_statement_Hname, "<stmt>", TOK_STATEMENT )
LEX_TOKEN ( lex_destructor_Hname, "<destructor>", TOK_EXP )
LEX_TOKEN ( lex_template_Hid, "<id>", TOK_EXP )
LEX_TOKEN ( lex_template_Htype, "<type>", TOK_TYPE )

LEX_TOKEN ( lex_nested_Hname, "<name>::", TOK_NESTED_NAME )
LEX_TOKEN ( lex_full_Hname, "::<name>::", TOK_FULL_NAME )
LEX_TOKEN ( lex_nested_Hname_Hstar, "<class>::*", TOK_NONE )
LEX_TOKEN ( lex_full_Hname_Hstar, "::<class>::*", TOK_NONE )

LEX_TOKEN ( lex_char_Hlit, "<char>", TOK_EXP )
LEX_TOKEN ( lex_wchar_Hlit, "<wchar>", TOK_EXP )
LEX_TOKEN ( lex_string_Hlit, "<string>", TOK_EXP )
LEX_TOKEN ( lex_wstring_Hlit, "<wstring>", TOK_EXP )
LEX_TOKEN ( lex_integer_Hlit, "<int>", TOK_EXP )

LEX_TOKEN ( lex_char_Hexp, "<char>", TOK_EXP )
LEX_TOKEN ( lex_wchar_Hexp, "<wchar>", TOK_EXP )
LEX_TOKEN ( lex_string_Hexp, "<string>", TOK_EXP )
LEX_TOKEN ( lex_wstring_Hexp, "<wstring>", TOK_EXP )
LEX_TOKEN ( lex_integer_Hexp, "<int>", TOK_EXP )
LEX_TOKEN ( lex_floating_Hexp, "<float>", TOK_EXP )

LEX_TOKEN ( lex_complex_Hexp, "<exp>", TOK_EXP )
LEX_TOKEN ( lex_complex_Hstmt, "<stmt>", TOK_STATEMENT )
LEX_TOKEN ( lex_complex_Htype, "<type>", TOK_TYPE )

LEX_TOKEN ( lex_hash_Hif, "#if", TOK_STATEMENT )
LEX_TOKEN ( lex_hash_Helif, "#elif", TOK_STATEMENT )
LEX_TOKEN ( lex_hash_Helse, "#else", TOK_STATEMENT )
LEX_TOKEN ( lex_hash_Hendif, "#endif", TOK_STATEMENT )
LEX_TOKEN ( lex_hash_Hpragma, "#pragma", TOK_DECLARATION )

LEX_TOKEN ( lex_newline, "<newline>", TOK_NONE )
LEX_TOKEN ( lex_eof, "<eof>", TOK_NONE )


/*
    C SYMBOL TOKENS

    These tokens describe the C symbols and punctuation.
*/

LEX_TOKEN ( lex_and_H1, "&", TOK_EXP )
LEX_TOKEN ( lex_and_Heq_H1, "&=", TOK_NONE )
LEX_TOKEN ( lex_arrow, "->", TOK_NONE )
LEX_TOKEN ( lex_assign, "=", TOK_NONE )
LEX_TOKEN ( lex_backslash, "\\", TOK_NONE )
LEX_TOKEN ( lex_close_Hbrace_H1, "}", TOK_NONE )
LEX_TOKEN ( lex_close_Hround, ")", TOK_NONE )
LEX_TOKEN ( lex_close_Hsquare_H1, "]", TOK_NONE )
LEX_TOKEN ( lex_colon, ":", TOK_NONE )
LEX_TOKEN ( lex_comma, ",", TOK_NONE )
LEX_TOKEN ( lex_compl_H1, "~", TOK_EXP )
LEX_TOKEN ( lex_div, "/", TOK_NONE )
LEX_TOKEN ( lex_div_Heq, "/=", TOK_NONE )
LEX_TOKEN ( lex_dot, ".", TOK_NONE )
LEX_TOKEN ( lex_ellipsis, "...", TOK_NONE )
LEX_TOKEN ( lex_eq, "==", TOK_NONE )
LEX_TOKEN ( lex_greater, ">", TOK_NONE )
LEX_TOKEN ( lex_greater_Heq, ">=", TOK_NONE )
LEX_TOKEN ( lex_hash_H1, "#", TOK_NONE )
LEX_TOKEN ( lex_hash_Hhash_H1, "##", TOK_NONE )
LEX_TOKEN ( lex_less, "<", TOK_NONE )
LEX_TOKEN ( lex_less_Heq, "<=", TOK_NONE )
LEX_TOKEN ( lex_logical_Hand_H1, "&&", TOK_NONE )
LEX_TOKEN ( lex_logical_Hor_H1, "||", TOK_NONE )
LEX_TOKEN ( lex_lshift, "<<", TOK_NONE )
LEX_TOKEN ( lex_lshift_Heq, "<<=", TOK_NONE )
LEX_TOKEN ( lex_minus, "-", TOK_EXP )
LEX_TOKEN ( lex_minus_Heq, "-=", TOK_NONE )
LEX_TOKEN ( lex_minus_Hminus, "--", TOK_EXP )
LEX_TOKEN ( lex_not_H1, "!", TOK_EXP )
LEX_TOKEN ( lex_not_Heq_H1, "!=", TOK_NONE )
LEX_TOKEN ( lex_open_Hbrace_H1, "{", TOK_NONE )
LEX_TOKEN ( lex_open_Hround, "(", TOK_NONE )
LEX_TOKEN ( lex_open_Hsquare_H1, "[", TOK_NONE )
LEX_TOKEN ( lex_or_H1, "|", TOK_NONE )
LEX_TOKEN ( lex_or_Heq_H1, "|=", TOK_NONE )
LEX_TOKEN ( lex_plus, "+", TOK_EXP )
LEX_TOKEN ( lex_plus_Heq, "+=", TOK_NONE )
LEX_TOKEN ( lex_plus_Hplus, "++", TOK_EXP )
LEX_TOKEN ( lex_question, "?", TOK_NONE )
LEX_TOKEN ( lex_rem, "%", TOK_NONE )
LEX_TOKEN ( lex_rem_Heq, "%=", TOK_NONE )
LEX_TOKEN ( lex_rshift, ">>", TOK_NONE )
LEX_TOKEN ( lex_rshift_Heq, ">>=", TOK_NONE )
LEX_TOKEN ( lex_semicolon, ";", TOK_NONE )
LEX_TOKEN ( lex_star, "*", TOK_EXP )
LEX_TOKEN ( lex_star_Heq, "*=", TOK_NONE )
LEX_TOKEN ( lex_xor_H1, "^", TOK_NONE )
LEX_TOKEN ( lex_xor_Heq_H1, "^=", TOK_NONE )


/*
    ADDITIONAL C++ SYMBOL TOKENS

    These tokens describe the additional C++ symbols.
*/

LEX_TOKEN ( lex_arrow_Hstar, "->*", TOK_NONE )
LEX_TOKEN ( lex_colon_Hcolon, "::", TOK_FULL_NAME )
LEX_TOKEN ( lex_dot_Hstar, ".*", TOK_NONE )


/*
    ADDITIONAL SYMBOL TOKENS

    These tokens describe the additional extension symbols.
*/

LEX_TOKEN ( lex_abs, "+?", TOK_EXP )
LEX_TOKEN ( lex_max, ">?", TOK_NONE )
LEX_TOKEN ( lex_min, "<?", TOK_NONE )


/*
    DIGRAPH TOKENS

    These tokens describe the digraphs.
*/

LEX_TOKEN ( lex_close_Hbrace_H2, "%>", TOK_NONE )
LEX_TOKEN ( lex_close_Hsquare_H2, ":>", TOK_NONE )
LEX_TOKEN ( lex_hash_H2, "%:", TOK_NONE )
LEX_TOKEN ( lex_hash_Hhash_H2, "%:%:", TOK_NONE )
LEX_TOKEN ( lex_open_Hbrace_H2, "<%", TOK_NONE )
LEX_TOKEN ( lex_open_Hsquare_H2, "<:", TOK_NONE )


/*
    C KEYWORD TOKENS

    These tokens describe the C keywords.
*/

LEX_TOKEN ( lex_auto, "auto", TOK_DECL_SPEC )
LEX_TOKEN ( lex_break, "break", TOK_STATEMENT )
LEX_TOKEN ( lex_case, "case", TOK_STATEMENT )
LEX_TOKEN ( lex_char, "char", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_const, "const", TOK_TYPE_SPEC )
LEX_TOKEN ( lex_continue, "continue", TOK_STATEMENT )
LEX_TOKEN ( lex_default, "default", TOK_STATEMENT )
LEX_TOKEN ( lex_do, "do", TOK_STATEMENT )
LEX_TOKEN ( lex_double, "double", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_else, "else", TOK_STATEMENT )
LEX_TOKEN ( lex_enum, "enum", TOK_TYPE_KEY )
LEX_TOKEN ( lex_extern, "extern", TOK_EXTERN )
LEX_TOKEN ( lex_float, "float", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_for, "for", TOK_STATEMENT )
LEX_TOKEN ( lex_goto, "goto", TOK_STATEMENT )
LEX_TOKEN ( lex_if, "if", TOK_STATEMENT )
LEX_TOKEN ( lex_int, "int", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_long, "long", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_register, "register", TOK_DECL_SPEC )
LEX_TOKEN ( lex_return, "return", TOK_STATEMENT )
LEX_TOKEN ( lex_short, "short", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_signed, "signed", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_sizeof, "sizeof", TOK_EXP )
LEX_TOKEN ( lex_static, "static", TOK_DECL_SPEC )
LEX_TOKEN ( lex_struct, "struct", TOK_TYPE_KEY )
LEX_TOKEN ( lex_switch, "switch", TOK_STATEMENT )
LEX_TOKEN ( lex_typedef, "typedef", TOK_DECL_SPEC )
LEX_TOKEN ( lex_union, "union", TOK_TYPE_KEY )
LEX_TOKEN ( lex_unsigned, "unsigned", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_void, "void", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_volatile, "volatile", TOK_TYPE_SPEC )
LEX_TOKEN ( lex_while, "while", TOK_STATEMENT )


/*
    ADDITIONAL C++ KEYWORD TOKENS

    These tokens describe the additional C++ keywords.
*/

LEX_TOKEN ( lex_asm, "asm", TOK_ASM )
LEX_TOKEN ( lex_bool, "bool", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_catch, "catch", TOK_STATEMENT )
LEX_TOKEN ( lex_class, "class", TOK_TYPE_KEY )
LEX_TOKEN ( lex_const_Hcast, "const_cast", TOK_EXP )
LEX_TOKEN ( lex_delete, "delete", TOK_EXP )
LEX_TOKEN ( lex_dynamic_Hcast, "dynamic_cast", TOK_EXP )
LEX_TOKEN ( lex_explicit, "explicit", TOK_DECL_SPEC )
LEX_TOKEN ( lex_export, "export", TOK_DECLARATION )
LEX_TOKEN ( lex_false, "false", TOK_EXP )
LEX_TOKEN ( lex_friend, "friend", TOK_DECL_SPEC )
LEX_TOKEN ( lex_inline, "inline", TOK_DECL_SPEC )
LEX_TOKEN ( lex_mutable, "mutable", TOK_DECL_SPEC )
LEX_TOKEN ( lex_namespace, "namespace", TOK_DECLARATION )
LEX_TOKEN ( lex_new, "new", TOK_EXP )
LEX_TOKEN ( lex_operator, "operator", TOK_EXP )
LEX_TOKEN ( lex_private, "private", TOK_NONE )
LEX_TOKEN ( lex_protected, "protected", TOK_NONE )
LEX_TOKEN ( lex_public, "public", TOK_NONE )
LEX_TOKEN ( lex_reinterpret_Hcast, "reinterpret_cast", TOK_EXP )
LEX_TOKEN ( lex_static_Hcast, "static_cast", TOK_EXP )
LEX_TOKEN ( lex_template, "template", TOK_DECLARATION )
LEX_TOKEN ( lex_this, "this", TOK_EXP )
LEX_TOKEN ( lex_throw, "throw", TOK_NONE )
LEX_TOKEN ( lex_true, "true", TOK_EXP )
LEX_TOKEN ( lex_try, "try", TOK_STATEMENT )
LEX_TOKEN ( lex_typeid, "typeid", TOK_EXP )
LEX_TOKEN ( lex_typename, "typename", TOK_TYPE_KEY )
LEX_TOKEN ( lex_using, "using", TOK_DECLARATION )
LEX_TOKEN ( lex_virtual, "virtual", TOK_DECL_SPEC )
LEX_TOKEN ( lex_wchar_Ht, "wchar_t", TOK_SIMPLE_TYPE )


/*
    ISO KEYWORD TOKENS

    These tokens describe the ISO keywords which give alternative
    representations of various symbols.
*/

LEX_TOKEN ( lex_and_H2, "bitand", TOK_EXP )
LEX_TOKEN ( lex_and_Heq_H2, "and_eq", TOK_NONE )
LEX_TOKEN ( lex_compl_H2, "compl", TOK_EXP )
LEX_TOKEN ( lex_logical_Hand_H2, "and", TOK_NONE )
LEX_TOKEN ( lex_logical_Hor_H2, "or", TOK_NONE )
LEX_TOKEN ( lex_not_H2, "not", TOK_EXP )
LEX_TOKEN ( lex_not_Heq_H2, "not_eq", TOK_NONE )
LEX_TOKEN ( lex_or_H2, "bitor", TOK_NONE )
LEX_TOKEN ( lex_or_Heq_H2, "or_eq", TOK_NONE )
LEX_TOKEN ( lex_xor_H2, "xor", TOK_NONE )
LEX_TOKEN ( lex_xor_Heq_H2, "xor_eq", TOK_NONE )


/*
    NON-STANDARD KEYWORD TOKENS

    These keywords represent the non-standard keywords.
*/

LEX_TOKEN ( lex_accept, "accept", TOK_NONE )
LEX_TOKEN ( lex_after, "after", TOK_NONE )
LEX_TOKEN ( lex_alignof, "alignof", TOK_EXP )
LEX_TOKEN ( lex_all, "all", TOK_NONE )
LEX_TOKEN ( lex_allow, "allow", TOK_NONE )
LEX_TOKEN ( lex_ambiguous, "ambiguous", TOK_NONE )
LEX_TOKEN ( lex_analysis, "analysis", TOK_NONE )
LEX_TOKEN ( lex_argument, "argument", TOK_NONE )
LEX_TOKEN ( lex_arith_Hcap, "ARITHMETIC", TOK_NONE )
LEX_TOKEN ( lex_array, "array", TOK_NONE )
LEX_TOKEN ( lex_as, "as", TOK_NONE )
LEX_TOKEN ( lex_assert, "assert", TOK_NONE )
LEX_TOKEN ( lex_assignment, "assignment", TOK_NONE )
LEX_TOKEN ( lex_begin, "begin", TOK_NONE )
LEX_TOKEN ( lex_bitfield, "bitfield", TOK_NONE )
LEX_TOKEN ( lex_block, "block", TOK_NONE )
LEX_TOKEN ( lex_bottom, "bottom", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_cast, "cast", TOK_NONE )
LEX_TOKEN ( lex_character, "character", TOK_NONE )
LEX_TOKEN ( lex_class_Hcap, "CLASS", TOK_NONE )
LEX_TOKEN ( lex_code, "code", TOK_NONE )
LEX_TOKEN ( lex_comment, "comment", TOK_NONE )
LEX_TOKEN ( lex_compatible, "compatible", TOK_NONE )
LEX_TOKEN ( lex_complete, "complete", TOK_NONE )
LEX_TOKEN ( lex_compute, "compute", TOK_NONE )
LEX_TOKEN ( lex_conditional, "conditional", TOK_NONE )
LEX_TOKEN ( lex_conversion, "conversion", TOK_NONE )
LEX_TOKEN ( lex_decimal, "decimal", TOK_NONE )
LEX_TOKEN ( lex_decl, "declaration", TOK_NONE )
LEX_TOKEN ( lex_define, "define", TOK_NONE )
LEX_TOKEN ( lex_define_Hcap, "DEFINE", TOK_NONE )
LEX_TOKEN ( lex_defined, "defined", TOK_EXP )
LEX_TOKEN ( lex_definition, "definition", TOK_NONE )
LEX_TOKEN ( lex_depth, "depth", TOK_NONE )
LEX_TOKEN ( lex_directive, "directive", TOK_NONE )
LEX_TOKEN ( lex_directory, "directory", TOK_NONE )
LEX_TOKEN ( lex_disallow, "disallow", TOK_NONE )
LEX_TOKEN ( lex_discard, "discard", TOK_EXP )
LEX_TOKEN ( lex_dollar, "dollar", TOK_NONE )
LEX_TOKEN ( lex_either, "either", TOK_NONE )
LEX_TOKEN ( lex_elif, "elif", TOK_EXP )
LEX_TOKEN ( lex_ellipsis_Hexp, "...", TOK_NONE )
LEX_TOKEN ( lex_end, "end", TOK_NONE )
LEX_TOKEN ( lex_endif, "endif", TOK_EXP )
LEX_TOKEN ( lex_environment, "environment", TOK_NONE )
LEX_TOKEN ( lex_equality, "equality", TOK_NONE )
LEX_TOKEN ( lex_error, "error", TOK_NONE )
LEX_TOKEN ( lex_escape, "escape", TOK_NONE )
LEX_TOKEN ( lex_exhaustive, "exhaustive", TOK_NONE )
LEX_TOKEN ( lex_exp_Hcap, "EXP", TOK_NONE )
LEX_TOKEN ( lex_explain, "explain", TOK_DECLARATION )
LEX_TOKEN ( lex_extend, "extend", TOK_NONE )
LEX_TOKEN ( lex_external, "external", TOK_NONE )
LEX_TOKEN ( lex_extra, "extra", TOK_NONE )
LEX_TOKEN ( lex_fall, "fall", TOK_NONE )
LEX_TOKEN ( lex_file, "file", TOK_NONE )
LEX_TOKEN ( lex_float_Hcap, "FLOAT", TOK_NONE )
LEX_TOKEN ( lex_forward, "forward", TOK_NONE )
LEX_TOKEN ( lex_func_Hcap, "FUNC", TOK_NONE )
LEX_TOKEN ( lex_function, "function", TOK_NONE )
LEX_TOKEN ( lex_hexadecimal, "hexadecimal", TOK_NONE )
LEX_TOKEN ( lex_hiding, "hiding", TOK_NONE )
LEX_TOKEN ( lex_ident, "ident", TOK_NONE )
LEX_TOKEN ( lex_identif, "identifier", TOK_NONE )
LEX_TOKEN ( lex_ifdef, "ifdef", TOK_EXP )
LEX_TOKEN ( lex_ifndef, "ifndef", TOK_EXP )
LEX_TOKEN ( lex_ignore, "ignore", TOK_NONE )
LEX_TOKEN ( lex_implement, "implement", TOK_NONE )
LEX_TOKEN ( lex_implicit, "implicit", TOK_NONE )
LEX_TOKEN ( lex_import, "import", TOK_NONE )
LEX_TOKEN ( lex_include, "include", TOK_NONE )
LEX_TOKEN ( lex_includes, "includes", TOK_NONE )
LEX_TOKEN ( lex_include_Hnext, "include_next", TOK_NONE )
LEX_TOKEN ( lex_incompatible, "incompatible", TOK_NONE )
LEX_TOKEN ( lex_incomplete, "incomplete", TOK_NONE )
LEX_TOKEN ( lex_indented, "indented", TOK_NONE )
LEX_TOKEN ( lex_initialization, "initialization", TOK_NONE )
LEX_TOKEN ( lex_integer, "integer", TOK_NONE )
LEX_TOKEN ( lex_interface, "interface", TOK_NONE )
LEX_TOKEN ( lex_internal, "internal", TOK_NONE )
LEX_TOKEN ( lex_into, "into", TOK_NONE )
LEX_TOKEN ( lex_int_Hcap, "INTEGER", TOK_NONE )
LEX_TOKEN ( lex_keyword, "keyword", TOK_NONE )
LEX_TOKEN ( lex_limit, "limit", TOK_NONE )
LEX_TOKEN ( lex_line, "line", TOK_NONE )
LEX_TOKEN ( lex_linkage, "linkage", TOK_NONE )
LEX_TOKEN ( lex_lit, "literal", TOK_NONE )
LEX_TOKEN ( lex_longlong, "longlong", TOK_NONE )
LEX_TOKEN ( lex_lvalue, "lvalue", TOK_NONE )
LEX_TOKEN ( lex_macro, "macro", TOK_NONE )
LEX_TOKEN ( lex_main, "main", TOK_NONE )
LEX_TOKEN ( lex_member, "member", TOK_NONE )
LEX_TOKEN ( lex_member_Hcap, "MEMBER", TOK_NONE )
LEX_TOKEN ( lex_name, "name", TOK_NONE )
LEX_TOKEN ( lex_nat_Hcap, "NAT", TOK_NONE )
LEX_TOKEN ( lex_nested, "nested", TOK_NONE )
LEX_TOKEN ( lex_nline, "nline", TOK_NONE )
LEX_TOKEN ( lex_no, "no", TOK_NONE )
LEX_TOKEN ( lex_no_Hdef, "no_def", TOK_NONE )
LEX_TOKEN ( lex_object, "object", TOK_NONE )
LEX_TOKEN ( lex_octal, "octal", TOK_NONE )
LEX_TOKEN ( lex_of, "of", TOK_NONE )
LEX_TOKEN ( lex_off, "off", TOK_NONE )
LEX_TOKEN ( lex_on, "on", TOK_NONE )
LEX_TOKEN ( lex_option, "option", TOK_NONE )
LEX_TOKEN ( lex_overflow, "overflow", TOK_NONE )
LEX_TOKEN ( lex_overload, "overload", TOK_DECL_SPEC )
LEX_TOKEN ( lex_pointer, "pointer", TOK_NONE )
LEX_TOKEN ( lex_postpone, "postpone", TOK_NONE )
LEX_TOKEN ( lex_pragma, "pragma", TOK_NONE )
LEX_TOKEN ( lex_precedence, "precedence", TOK_NONE )
LEX_TOKEN ( lex_preserve, "preserve", TOK_NONE )
LEX_TOKEN ( lex_printf, "printf", TOK_NONE )
LEX_TOKEN ( lex_proc_Hcap, "PROC", TOK_NONE )
LEX_TOKEN ( lex_promote, "promote", TOK_NONE )
LEX_TOKEN ( lex_promoted, "promoted", TOK_NONE )
LEX_TOKEN ( lex_prototype, "prototype", TOK_NONE )
LEX_TOKEN ( lex_ptrdiff_Ht, "ptrdiff_t", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_qualifier, "qualifier", TOK_NONE )
LEX_TOKEN ( lex_quote, "quote", TOK_NONE )
LEX_TOKEN ( lex_reachable, "reachable", TOK_STATEMENT )
LEX_TOKEN ( lex_reference, "reference", TOK_NONE )
LEX_TOKEN ( lex_reject, "reject", TOK_NONE )
LEX_TOKEN ( lex_representation, "representation", TOK_NONE )
LEX_TOKEN ( lex_reset, "reset", TOK_NONE )
LEX_TOKEN ( lex_resolution, "resolution", TOK_NONE )
LEX_TOKEN ( lex_rvalue, "rvalue", TOK_NONE )
LEX_TOKEN ( lex_scalar_Hcap, "SCALAR", TOK_NONE )
LEX_TOKEN ( lex_scanf, "scanf", TOK_NONE )
LEX_TOKEN ( lex_set, "set", TOK_EXP )
LEX_TOKEN ( lex_size_Ht, "size_t", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_size_Ht_H2, "__size_t", TOK_SIMPLE_TYPE )
LEX_TOKEN ( lex_sort, "sort", TOK_NONE )
LEX_TOKEN ( lex_std, "std", TOK_NONE )
LEX_TOKEN ( lex_stmt_Hcap, "STATEMENT", TOK_NONE )
LEX_TOKEN ( lex_string, "string", TOK_NONE )
LEX_TOKEN ( lex_struct_Hcap, "STRUCT", TOK_NONE )
LEX_TOKEN ( lex_suspend, "suspend", TOK_NONE )
LEX_TOKEN ( lex_tag, "tag", TOK_NONE )
LEX_TOKEN ( lex_tag_Hcap, "TAG", TOK_NONE )
LEX_TOKEN ( lex_tendra, "TenDRA", TOK_NONE )
LEX_TOKEN ( lex_text, "text", TOK_NONE )
LEX_TOKEN ( lex_this_Hname, "<this>", TOK_EXP )
LEX_TOKEN ( lex_token, "token", TOK_NONE )
LEX_TOKEN ( lex_type, "type", TOK_NONE )
LEX_TOKEN ( lex_type_Hcap, "TYPE", TOK_NONE )
LEX_TOKEN ( lex_typeof, "typeof", TOK_NONE )
LEX_TOKEN ( lex_un_Hknown, "unknown", TOK_NONE )
LEX_TOKEN ( lex_unassert, "unassert", TOK_NONE )
LEX_TOKEN ( lex_undef, "undef", TOK_NONE )
LEX_TOKEN ( lex_unify, "unify", TOK_NONE )
LEX_TOKEN ( lex_union_Hcap, "UNION", TOK_NONE )
LEX_TOKEN ( lex_unmatched, "unmatched", TOK_NONE )
LEX_TOKEN ( lex_unpostpone, "unpostpone", TOK_NONE )
LEX_TOKEN ( lex_unreachable, "unreachable", TOK_STATEMENT )
LEX_TOKEN ( lex_unused, "unused", TOK_EXP )
LEX_TOKEN ( lex_use, "use", TOK_NONE )
LEX_TOKEN ( lex_value, "value", TOK_NONE )
LEX_TOKEN ( lex_variable, "variable", TOK_NONE )
LEX_TOKEN ( lex_variety_Hcap, "VARIETY", TOK_NONE )
LEX_TOKEN ( lex_volatile_Ht, "volatile_t", TOK_NONE )
LEX_TOKEN ( lex_vtable, "vtable", TOK_EXP )
LEX_TOKEN ( lex_warning, "warning", TOK_NONE )
LEX_TOKEN ( lex_weak, "weak", TOK_NONE )
LEX_TOKEN ( lex_writeable, "writeable", TOK_NONE )
LEX_TOKEN ( lex_zzzz, "<dummy>", TOK_NONE )


/*
    MISCELLANEOUS SYMBOLS

    These tokens describe certain symbols which are used in various
    circumstances.
*/

LEX_TOKEN ( lex_array_Hop, "[]", TOK_NONE )
LEX_TOKEN ( lex_builtin_Hfile, "#file", TOK_NONE )
LEX_TOKEN ( lex_builtin_Hline, "#line", TOK_NONE )
LEX_TOKEN ( lex_close_Htemplate, ">", TOK_NONE )
LEX_TOKEN ( lex_cond_Hop, "?:", TOK_NONE )
LEX_TOKEN ( lex_delete_Hfull, "::delete", TOK_NONE )
LEX_TOKEN ( lex_delete_Harray, "delete[]", TOK_NONE )
LEX_TOKEN ( lex_delete_Harray_Hfull, "::delete[]", TOK_NONE )
LEX_TOKEN ( lex_func_Hop, "()", TOK_NONE )
LEX_TOKEN ( lex_hash_Hop, "#", TOK_NONE )
LEX_TOKEN ( lex_hash_Hhash_Hop, "##", TOK_NONE )
LEX_TOKEN ( lex_inset_Hstart, "#pragma", TOK_NONE )
LEX_TOKEN ( lex_inset_Hend, "<newline>", TOK_NONE )
LEX_TOKEN ( lex_macro_Harg, "<argument>", TOK_NONE )
LEX_TOKEN ( lex_new_Hfull, "::new", TOK_NONE )
LEX_TOKEN ( lex_new_Harray, "new[]", TOK_NONE )
LEX_TOKEN ( lex_new_Harray_Hfull, "::new[]", TOK_NONE )
LEX_TOKEN ( lex_open_Hinit, "(", TOK_NONE )
LEX_TOKEN ( lex_open_Htemplate, "<", TOK_NONE )
LEX_TOKEN ( lex_zzzzzz, "<dummy>", TOK_NONE )


#endif /* LEX_TOKEN */


/*
    TOKEN GROUPS

    These macros give the bounds for the various groups of tokens.
*/

#ifndef FIRST_TOKEN

#define FIRST_TOKEN             lex_unknown
#define LAST_TOKEN              lex_zzzzzz

#define FIRST_SYMBOL            lex_and_H1
#define LAST_SYMBOL             lex_open_Hsquare_H2

#define FIRST_C_SYMBOL          lex_and_H1
#define LAST_C_SYMBOL           lex_xor_Heq_H1

#define FIRST_CPP_SYMBOL        lex_arrow_Hstar
#define LAST_CPP_SYMBOL         lex_dot_Hstar

#define FIRST_EXTRA_SYMBOL      lex_abs
#define LAST_EXTRA_SYMBOL       lex_min

#define FIRST_DIGRAPH           lex_close_Hbrace_H2
#define LAST_DIGRAPH            lex_open_Hsquare_H2

#define FIRST_C_KEYWORD         lex_auto
#define LAST_C_KEYWORD          lex_while

#define FIRST_CPP_KEYWORD       lex_asm
#define LAST_CPP_KEYWORD        lex_wchar_Ht

#define FIRST_ISO_KEYWORD       lex_and_H2
#define LAST_ISO_KEYWORD        lex_xor_Heq_H2

#define FIRST_PP_KEYWORD        lex_hash_Hif
#define LAST_PP_KEYWORD         lex_hash_Hpragma

#define FIRST_KEYWORD           lex_auto
#define LAST_KEYWORD            lex_zzzz

#define FIRST_COMPLEX_TOKEN     lex_unknown
#define LAST_COMPLEX_TOKEN      lex_hash_Hpragma

#endif /* FIRST_TOKEN */