/*
 * Copyright (c) 2002, The Tendra Project <http://www.ten15.org/>
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice unmodified, this list of conditions, and the following
 *    disclaimer.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *  		 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.
 *
 * $TenDRA: tendra/src/producers/common/parse/symbols.h,v 1.15 2005/10/16 07:47:46 stefanf Exp $
 */


/*
 *  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 C99 KEYWORD TOKENS
 *
 *  These tokens describe the additional C99 keywords.
 */
	
	LEX_TOKEN (lex_restrict, "restrict", TOK_TYPE_SPEC)


/*
 *  ADDITIONAL C++ KEYWORD TOKENS
 *
 *  These tokens describe the additional C++ keywords.
 */
	
	LEX_TOKEN (lex_asm, "asm", TOK_ASM)
#if LANGUAGE_CPP
	LEX_TOKEN (lex_bool, "bool", TOK_SIMPLE_TYPE)
#else
	LEX_TOKEN (lex_bool, "_Bool", TOK_SIMPLE_TYPE)
#endif
	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_func_Hid, "__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_pragma_H2, "_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_va__args, "__VA_ARGS__", 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)
	
	
/*
 * OMP PRAGMA DIRECTIVES
 *
 * These directives include and are for '#pragma omp' directives.
 * They are tokens for OpenMP 2.0 compliance.
 */
	
	LEX_TOKEN (lex_omp_omp, "omp", TOK_NONE)
	LEX_TOKEN (lex_omp_parallel, "parallel", TOK_NONE)
	LEX_TOKEN (lex_omp_sections, "sections", TOK_NONE)
	LEX_TOKEN (lex_omp_single, "single", TOK_NONE)
	LEX_TOKEN (lex_omp_master, "master", TOK_NONE)
	LEX_TOKEN (lex_omp_critical, "critical", TOK_NONE)
	LEX_TOKEN (lex_omp_barrier, "barrier", TOK_NONE)
	LEX_TOKEN (lex_omp_atomic, "atomic", TOK_NONE)
	LEX_TOKEN (lex_omp_flush, "flush", TOK_NONE)
	LEX_TOKEN (lex_omp_ordered, "ordered", TOK_NONE)
	LEX_TOKEN (lex_omp_threadprivate, "threadprivate", TOK_NONE)
	LEX_TOKEN (lex_omp_private, "private", TOK_NONE)
	LEX_TOKEN (lex_omp_firstprivate, "firstprivate", TOK_NONE)
	LEX_TOKEN (lex_omp_lastprivate, "lastprivate", TOK_NONE)
	LEX_TOKEN (lex_omp_shared, "shared", TOK_NONE)
	LEX_TOKEN (lex_omp_default, "default", TOK_NONE)
	LEX_TOKEN (lex_omp_reduction, "reduction", TOK_NONE)
	LEX_TOKEN (lex_omp_copyin, "copyin", TOK_NONE)
	LEX_TOKEN (lex_omp_copyprivate, "copyprivate", 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_C99_KEYWORD	lex_restrict
#define LAST_C99_KEYWORD	lex_restrict
	
#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
	
#define FIRST_OMP_DIRECTIVE	lex_omp
#define LAST_OMP_DIRECTIVE	lex_omp_copyprivate
	
#endif /* FIRST_TOKEN */
