diff --git a/CMakeLists.txt b/CMakeLists.txt index d897264c0..950bbc6cf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -123,6 +123,7 @@ include_directories( ${SC_BINARY_DIR}/include ) +add_subdirectory(src/auxlib) add_subdirectory(src/base) add_subdirectory(src/express) add_subdirectory(src/exppp) diff --git a/cmake/FindLEMON.cmake b/cmake/FindLEMON.cmake index 19aa0d500..25f878cbf 100644 --- a/cmake/FindLEMON.cmake +++ b/cmake/FindLEMON.cmake @@ -47,42 +47,16 @@ find_program(LEMON_EXECUTABLE lemon DOC "path to the lemon executable") mark_as_advanced(LEMON_EXECUTABLE) -if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) - # look for the template in share - if (DATA_DIR AND EXISTS "${DATA_DIR}/lemon/lempar.c") - set (LEMON_TEMPLATE "${DATA_DIR}/lemon/lempar.c") - elseif (EXISTS "share/lemon/lempar.c") - set (LEMON_TEMPLATE "share/lemon/lempar.c") - elseif (EXISTS "/usr/share/lemon/lempar.c") - set (LEMON_TEMPLATE "/usr/share/lemon/lempar.c") - endif (DATA_DIR AND EXISTS "${DATA_DIR}/lemon/lempar.c") -endif (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) - -if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) - # look for the template in bin dir - get_filename_component(lemon_path ${LEMON_EXECUTABLE} PATH) - if (lemon_path) - if (EXISTS ${lemon_path}/lempar.c) - set (LEMON_TEMPLATE "${lemon_path}/lempar.c") - endif (EXISTS ${lemon_path}/lempar.c) - if (EXISTS /usr/share/lemon/lempar.c) - set (LEMON_TEMPLATE "/usr/share/lemon/lempar.c") - endif (EXISTS /usr/share/lemon/lempar.c) - endif (lemon_path) -endif(LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) - -if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) - # fallback - set (LEMON_TEMPLATE "lempar.c") - if (NOT EXISTS ${LEMON_TEMPLATE}) - message(WARNING "Lemon's lempar.c template file could not be found automatically, set LEMON_TEMPLATE") - endif (NOT EXISTS ${LEMON_TEMPLATE}) -endif (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) - -mark_as_advanced(LEMON_TEMPLATE) - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(LEMON DEFAULT_MSG LEMON_EXECUTABLE LEMON_TEMPLATE) +if (LEMON_EXECUTABLE) + get_filename_component(lemon_dir ${LEMON_EXECUTABLE} DIRECTORY) + find_file(LEMON_TEMPLATE lempar.c + PATHS "${lemon_dir}" "/usr/share/lemon" + NO_DEFAULT_PATH) + mark_as_advanced(LEMON_TEMPLATE) + + if(NOT LEMON_TEMPLATE) + message(SEND_ERROR "failed to find lemon template (lempar.c)") + endif() # Define the macro # LEMON_TARGET( @@ -104,102 +78,85 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(LEMON DEFAULT_MSG LEMON_EXECUTABLE LEMON_TEMPL include(CMakeParseArguments) if(NOT COMMAND LEMON_TARGET) - macro(LEMON_TARGET Name Input) - - get_filename_component(IN_FILE_WE ${Input} NAME_WE) - set(LVAR_PREFIX ${Name}_${IN_FILE_WE}) - - if(${ARGC} GREATER 3) - CMAKE_PARSE_ARGUMENTS(${LVAR_PREFIX} "" "OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR;EXTRA_ARGS" "" ${ARGN}) - endif(${ARGC} GREATER 3) - - # Need a working directory - if("${${LVAR_PREFIX}_WORKING_DIR}" STREQUAL "") - set(${LVAR_PREFIX}_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}/${LVAR_PREFIX}") - endif("${${LVAR_PREFIX}_WORKING_DIR}" STREQUAL "") - file(MAKE_DIRECTORY ${${LVAR_PREFIX}_WORKING_DIR}) - - # Output source file - if ("${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "") - set(${LVAR_PREFIX}_OUT_SRC_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.c) - else ("${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "") - get_filename_component(specified_out_dir ${${LVAR_PREFIX}_OUT_SRC_FILE} PATH) - if(NOT "${specified_out_dir}" STREQUAL "") - message(FATAL_ERROR "\nFull path specified for OUT_SRC_FILE - should be filename only.\n") - endif(NOT "${specified_out_dir}" STREQUAL "") - set(${LVAR_PREFIX}_OUT_SRC_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${${LVAR_PREFIX}_OUT_SRC_FILE}) - endif ("${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "") - - # Output header file - if ("${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "") - set(${LVAR_PREFIX}_OUT_HDR_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.h) - else ("${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "") - get_filename_component(specified_out_dir ${${LVAR_PREFIX}_OUT_HDR_FILE} PATH) - if(NOT "${specified_out_dir}" STREQUAL "") - message(FATAL_ERROR "\nFull path specified for OUT_HDR_FILE - should be filename only.\n") - endif(NOT "${specified_out_dir}" STREQUAL "") - set(${LVAR_PREFIX}_OUT_HDR_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${${LVAR_PREFIX}_OUT_HDR_FILE}) - endif ("${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "") - + macro(LEMON_TARGET Name LemonInput LemonOutput) + set(LT_ARGS DEFINES_FILE COMPILE_FLAGS) + CMAKE_PARSE_ARGUMENTS(LEMON_TARGET_ARG "" "${LT_ARGS}" "" ${ARGN}) + + if(NOT "${LEMON_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "") + set(LEMON_EXECUTABLE_opts "${LEMON_TARGET_ARG_COMPILE_FLAGS}") + separate_arguments(LEMON_EXECUTABLE_opts) + else() + set(LEMON_EXECUTABLE_opts "") + endif() + + # check for LemonOutput + get_filename_component(_basename ${LemonOutput} NAME_WE) + get_filename_component(_out_src_file ${LemonOutput} NAME) + get_filename_component(_out_dir ${LemonOutput} PATH) + if(NOT "${_out_dir}" STREQUAL "") + message(WARNING "Full path specified for LemonOutput - should be filename only") + endif() + + # set report file + set(_out_rpt_file "${_basename}.out") + + # check for DEFINES_FILE + if ("${LEMON_TARGET_ARG_DEFINES_FILE}" STREQUAL "") + set(_out_hdr_file "${_basename}.h") + else() + get_filename_component(_out_dir ${LEMON_TARGET_ARG_DEFINES_FILE} PATH) + get_filename_component(_out_hdr_file ${LEMON_TARGET_ARG_DEFINES_FILE} NAME) + if(NOT "${_out_dir}" STREQUAL "") + message(WARNING "Full path specified for DEFINES_FILE - should be filename only") + endif() + endif() + # input file - get_filename_component(in_full ${Input} ABSOLUTE) - if("${in_full}" STREQUAL "${Input}") - set(lemon_in_file ${Input}) - else("${in_full}" STREQUAL "${Input}") - set(lemon_in_file "${CMAKE_CURRENT_SOURCE_DIR}/${Input}") - endif("${in_full}" STREQUAL "${Input}") - + get_filename_component(_in_y_path ${LemonInput} ABSOLUTE) + get_filename_component(_in_y_file ${LemonInput} NAME) - # names of lemon output files will be based on the name of the input file - set(LEMON_GEN_SOURCE ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.c) - set(LEMON_GEN_HEADER ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.h) - set(LEMON_GEN_OUT ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.out) - - # copy input to bin directory and run lemon - get_filename_component(INPUT_NAME ${Input} NAME) + # TODO: is this really necessary? add_custom_command( - OUTPUT ${LEMON_GEN_OUT} ${LEMON_GEN_SOURCE} ${LEMON_GEN_HEADER} - COMMAND ${CMAKE_COMMAND} -E copy ${lemon_in_file} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} - COMMAND ${LEMON_EXECUTABLE} -T${LEMON_TEMPLATE} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} ${${LVAR_PREFIX}__EXTRA_ARGS} - DEPENDS ${Input} ${LEMON_TEMPLATE} ${LEMON_EXECUTABLE_TARGET} - WORKING_DIRECTORY ${${LVAR_PREFIX}_WORKING_DIR} - COMMENT "[LEMON][${Name}] Building parser with ${LEMON_EXECUTABLE}" - ) - - # rename generated outputs - if(NOT "${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "${LEMON_GEN_SOURCE}") - add_custom_command( - OUTPUT ${${LVAR_PREFIX}_OUT_SRC_FILE} - COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_SOURCE} ${${LVAR_PREFIX}_OUT_SRC_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} - ) - set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_SRC_FILE} ${LEMON_${Name}_OUTPUTS}) - endif(NOT "${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "${LEMON_GEN_SOURCE}") - if(NOT "${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "${LEMON_GEN_HEADER}") - add_custom_command( - OUTPUT ${${LVAR_PREFIX}_OUT_HDR_FILE} - COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_HEADER} ${${LVAR_PREFIX}_OUT_HDR_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} - ) - set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_HDR_FILE} ${LEMON_${Name}_OUTPUTS}) - endif(NOT "${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "${LEMON_GEN_HEADER}") - - set(LEMON_${Name}_OUTPUTS ${LEMON_${Name}_OUTPUTS} ${LEMON_GEN_OUT}) + OUTPUT ${_in_y_file} + COMMAND ${CMAKE_COMMAND} -E copy ${_in_y_path} ${CMAKE_CURRENT_BINARY_DIR} + ) + + # execute lemon + add_custom_command( + OUTPUT ${_out_src_file} + COMMAND ${LEMON_EXECUTABLE} -T${LEMON_TEMPLATE} ${LEMON_EXECUTABLE_opts} ${_in_y_file} + DEPENDS ${_in_y_file} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "[LEMON][${Name}] Building parser with ${LEMON_EXECUTABLE}" + ) + + # rename the header + add_custom_command( + OUTPUT ${_out_hdr_file} + COMMAND ${CMAKE_COMMAND} ARGS -E rename ${_basename}.h ${_out_hdr_file} + DEPENDS ${_out_src_file} + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) + + # set the return values + # TODO: for generated sources even headers should be target dependencies + set(LEMON_${Name}_DEFINED TRUE) + set(LEMON_${Name}_OUTPUT_HEADER "${CMAKE_CURRENT_BINARY_DIR}/${_out_hdr_file}") + set(LEMON_${Name}_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}") + set(LEMON_${Name}_OUTPUTS "${_out_src_file}") # make sure we clean up generated output and copied input set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${LEMON_${Name}_OUTPUTS}") - set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME}") - - # macro ran successfully - set(LEMON_${Name}_DEFINED TRUE) - - set(LEMON_${Name}_SRC ${${LVAR_PREFIX}_OUT_SRC_FILE}) - set(LEMON_${Name}_HDR ${${LVAR_PREFIX}_OUT_HDR_FILE}) - set(LEMON_${Name}_INCLUDE_DIR ${${LVAR_PREFIX}_WORKING_DIR}) + set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/${_in_y_file}") endmacro(LEMON_TARGET) endif(NOT COMMAND LEMON_TARGET) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LEMON REQUIRED_VARS LEMON_EXECUTABLE LEMON_TEMPLATE) + #============================================================ # FindLEMON.cmake ends here diff --git a/cmake/FindRE2C.cmake b/cmake/FindRE2C.cmake index 5450c34a9..132ff9e25 100644 --- a/cmake/FindRE2C.cmake +++ b/cmake/FindRE2C.cmake @@ -6,8 +6,20 @@ find_program(RE2C_EXECUTABLE re2c DOC "path to the re2c executable") mark_as_advanced(RE2C_EXECUTABLE) -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE) +if(RE2C_EXECUTABLE) + +execute_process(COMMAND ${RE2C_EXECUTABLE} -v + OUTPUT_VARIABLE RE2C_version_output + ERROR_VARIABLE RE2C_version_error + RESULT_VARIABLE RE2C_version_result + OUTPUT_STRIP_TRAILING_WHITESPACE) + +if(NOT ${RE2C_version_result} EQUAL 0) + message(SEND_ERROR + "Command \"${RE2C_EXECUTABLE} -v\" failed with output:\n${RE2C_version_output}\n${RE2C_version_error}") +else() + string(REGEX REPLACE "^re2c ([0-9]+[^ ]*)( .*)?$" "\\1" RE2C_VERSION "${RE2C_version_output}") +endif() # Provide a macro to generate custom build rules: @@ -80,36 +92,47 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE) # RE2C_TARGET (public macro) #============================================================ # -# TODO - rework this macro to make use of CMakeParseArguments, see -# http://www.cmake.org/pipermail/cmake/2012-July/051309.html if(NOT COMMAND RE2C_TARGET) - macro(RE2C_TARGET Name Input Output) - set(RE2C_TARGET_usage "RE2C_TARGET( [COMPILE_FLAGS ]") - if(${ARGC} GREATER 3) - if(${ARGC} EQUAL 5) - if("${ARGV3}" STREQUAL "COMPILE_FLAGS") - set(RE2C_EXECUTABLE_opts "${ARGV4}") - SEPARATE_ARGUMENTS(RE2C_EXECUTABLE_opts) - else() - message(SEND_ERROR ${RE2C_TARGET_usage}) - endif() - else() - message(SEND_ERROR ${RE2C_TARGET_usage}) - endif() - endif() + macro(RE2C_TARGET Name RE2CInput RE2COutput) + set(_re2c_args COMPILE_FLAGS DEFINES_FILE) + cmake_parse_arguments(RE2C_TARGET_ARG "" "${_re2c_args}" "" ${ARGN}) + + if(NOT "${RE2C_TARGET_ARG_UNPARSED_ARGUMENTS}" STREQUAL "") + message(SEND_ERROR "RE2C_TARGET( + [COMPILE_FLAGS ] + [DEFINES_FILE ])") + else() + if(NOT "${RE2C_TARGET_ARG_COMPILE_FLAGS}" STREQUAL "") + set(RE2C_EXECUTABLE_opts "${RE2C_TARGET_ARG_COMPILE_FLAGS}") + separate_arguments(RE2C_EXECUTABLE_opts) + else() + set(RE2C_EXECUTABLE_opts "") + endif() + + if(NOT "${RE2C_TARGET_ARG_DEFINES_FILE}" STREQUAL "") + list(APPEND RE2C_EXECUTABLE_opts -t ${RE2C_TARGET_ARG_DEFINES_FILE}) + endif() + + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/${RE2COutput} + COMMAND ${RE2C_EXECUTABLE} + ARGS ${RE2C_EXECUTABLE_opts} -o ${RE2COutput} ${CMAKE_CURRENT_SOURCE_DIR}/${RE2CInput} + DEPENDS ${RE2CInput} + COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + ) - add_custom_command(OUTPUT ${Output} - COMMAND ${RE2C_EXECUTABLE} - ARGS ${RE2C_EXECUTABLE_opts} -o${Output} ${Input} - DEPENDS ${Input} ${RE2C_EXECUTABLE_TARGET} - COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" - WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}") - - set(RE2C_${Name}_DEFINED TRUE) - set(RE2C_${Name}_OUTPUTS ${Output}) - set(RE2C_${Name}_INPUT ${Input}) - set(RE2C_${Name}_COMPILE_FLAGS ${RE2C_EXECUTABLE_opts}) - set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${Output}") + # TODO: check, for generated sources headers should be included in outputs + set(RE2C_${Name}_DEFINED TRUE) + set(RE2C_${Name}_OUTPUTS ${RE2COutput}) + if("${RE2C_TARGET_ARG_DEFINES_FILE}" STREQUAL "") + set(RE2C_${Name}_OUTPUT_HEADER "") + else() + set(RE2C_${Name}_OUTPUT_HEADER "${RE2C_TARGET_ARG_DEFINES_FILE}") + endif() + set(RE2C_${Name}_INCLUDE_DIR "${CMAKE_CURRENT_BINARY_DIR}") + endif() + endmacro(RE2C_TARGET) endif(NOT COMMAND RE2C_TARGET) #============================================================ @@ -125,16 +148,22 @@ if(NOT COMMAND ADD_RE2C_LEMON_DEPENDENCY) message(SEND_ERROR "RE2C target `${RE2CTarget}' does not exists.") endif() - if(NOT LEMON_${LemonTarget}_HDR) + if(NOT LEMON_${LemonTarget}_OUTPUT_HEADER) message(SEND_ERROR "Lemon target `${LemonTarget}' does not exists.") endif() set_source_files_properties(${RE2C_${RE2CTarget}_OUTPUTS} - PROPERTIES OBJECT_DEPENDS ${LEMON_${LemonTarget}_HDR}) + PROPERTIES OBJECT_DEPENDS ${LEMON_${LemonTarget}_OUTPUT_HEADER}) endmacro(ADD_RE2C_LEMON_DEPENDENCY) endif(NOT COMMAND ADD_RE2C_LEMON_DEPENDENCY) #============================================================ +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(RE2C REQUIRED_VARS RE2C_EXECUTABLE + VERSION_VAR RE2C_VERSION) + # RE2C_Util.cmake ends here # Local Variables: diff --git a/cmake/SC_Regenerate.cmake b/cmake/SC_Regenerate.cmake index 513b4787a..8c4264681 100644 --- a/cmake/SC_Regenerate.cmake +++ b/cmake/SC_Regenerate.cmake @@ -1,4 +1,4 @@ -# The Express parser uses the tools Perplex, RE2C and Lemon to generate code +# The Express parser uses the tools RE2C and Lemon to generate code # from higher level inputs. Depending on available tools and options, the # SC build can either re-generate code as part of the build, or use cached # files that are ready for compilation. @@ -10,45 +10,37 @@ # this option is set to ON and the necessary tools are not found, the # configure step will fail. If it is set to OFF, SC will not even try to use # the generators and will instead use the cached sources. -if(NOT DEFINED SC_GENERATE_LEXER_PARSER) - set(SC_GENERATE_LEXER_PARSER "AUTO" CACHE STRING "Use Perplex, RE2C and Lemon to generate C source code.") - set(_verbosity "QUIET") -else(NOT DEFINED SC_GENERATE_LEXER_PARSER) - string(TOUPPER "${SC_GENERATE_LEXER_PARSER}" SC_GENERATE_LEXER_PARSER) -endif(NOT DEFINED SC_GENERATE_LEXER_PARSER) -set_property(CACHE SC_GENERATE_LEXER_PARSER PROPERTY STRINGS AUTO ON OFF) -if (NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "AUTO" AND NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "ON" AND NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "OFF") + +set(_valid_gen_states AUTO ON OFF) +set(_verbosity "QUIET") + +set(SC_GENERATE_LEXER_PARSER "AUTO" CACHE + STRING "Use Perplex, RE2C and Lemon to generate C source code.") +set_property(CACHE SC_GENERATE_LEXER_PARSER PROPERTY STRINGS ${_valid_gen_states}) +string(TOUPPER "${SC_GENERATE_LEXER_PARSER}" SC_GENERATE_LEXER_PARSER) + +if(NOT "${SC_GENERATE_LEXER_PARSER}" IN_LIST _valid_gen_states) message(WARNING "Unknown value ${SC_GENERATE_LEXER_PARSER} supplied for SC_GENERATE_LEXER_PARSER - defaulting to AUTO") message(WARNING "Valid options are AUTO, ON and OFF") set(SC_GENERATE_LEXER_PARSER "AUTO" CACHE STRING "Use Perplex, RE2C and Lemon to generate C source code.") -endif (NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "AUTO" AND NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "ON" AND NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "OFF") +endif() # If the generators have not been turned off, we need to check for them if(NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "OFF") + # NOTE: lemon doesn't have a stable versioning system (it's always 1) find_package(LEMON ${_verbosity}) - find_package(RE2C ${_verbosity}) - find_package(PERPLEX ${_verbosity}) - if(LEMON_EXECUTABLE AND LEMON_TEMPLATE AND PERPLEX_EXECUTABLE AND PERPLEX_TEMPLATE AND RE2C_EXECUTABLE) - # Templates may be anywhere - make sure we have a stable path if a relative - # path was specified at CMake time - get_filename_component(lemon_template_fpath "${LEMON_TEMPLATE}" ABSOLUTE) - if(NOT "${lemon_template_fpath}" STREQUAL "${LEMON_TEMPLATE}") - get_filename_component(LEMON_TEMPLATE "${CMAKE_BINARY_DIR}/${LEMON_TEMPLATE}" ABSOLUTE) - endif(NOT "${lemon_template_fpath}" STREQUAL "${LEMON_TEMPLATE}") - get_filename_component(perplex_template_fpath "${PERPLEX_TEMPLATE}" ABSOLUTE) - if(NOT "${perplex_template_fpath}" STREQUAL "${PERPLEX_TEMPLATE}") - get_filename_component(PERPLEX_TEMPLATE "${CMAKE_BINARY_DIR}/${PERPLEX_TEMPLATE}" ABSOLUTE) - endif(NOT "${perplex_template_fpath}" STREQUAL "${PERPLEX_TEMPLATE}") - + find_package(RE2C 1.0.3 ${_verbosity}) + + if(LEMON_FOUND AND RE2C_FOUND) set(SC_GENERATE_LP_SOURCES 1) - message(".. Found perplex, re2c, and lemon - can regenerate lexer/parser if necessary") - else(LEMON_EXECUTABLE AND LEMON_TEMPLATE AND PERPLEX_EXECUTABLE AND PERPLEX_TEMPLATE AND RE2C_EXECUTABLE) + message(".. Found re2c, and lemon - can regenerate lexer/parser if necessary") + else() if("${SC_GENERATE_LEXER_PARSER}" STREQUAL "ON") - message(FATAL_ERROR "\nSC_GENERATE_LEXER_PARSER set to ON, but one or more components of the Perplex/RE2C/Lemon toolchain were not found.\n") + message(FATAL_ERROR "\nSC_GENERATE_LEXER_PARSER set to ON, but couldn't find lemon/re2c") else("${SC_GENERATE_LEXER_PARSER}" STREQUAL "ON") set(SC_GENERATE_LP_SOURCES 0) endif("${SC_GENERATE_LEXER_PARSER}" STREQUAL "ON") - endif(LEMON_EXECUTABLE AND LEMON_TEMPLATE AND PERPLEX_EXECUTABLE AND PERPLEX_TEMPLATE AND RE2C_EXECUTABLE) + endif() else(NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "OFF") set(SC_GENERATE_LP_SOURCES 0) endif(NOT "${SC_GENERATE_LEXER_PARSER}" STREQUAL "OFF") diff --git a/cmake/schema_scanner/CMakeLists.txt b/cmake/schema_scanner/CMakeLists.txt index 34520e67c..965709732 100644 --- a/cmake/schema_scanner/CMakeLists.txt +++ b/cmake/schema_scanner/CMakeLists.txt @@ -21,10 +21,10 @@ set(schema_scanner_src ${SC_ROOT}/src/exp2cxx/class_strings.c ${SC_ROOT}/src/express/generated/expparse.c ${SC_ROOT}/src/express/generated/expscan.c + ${SC_ROOT}/src/express/lexsupport.c ${SC_ROOT}/src/express/alg.c ${SC_ROOT}/src/express/alloc.c ${SC_ROOT}/src/express/caseitem.c - ${SC_ROOT}/src/express/dict.c ${SC_ROOT}/src/express/entity.c ${SC_ROOT}/src/express/error.c ${SC_ROOT}/src/express/exp_kw.c @@ -32,7 +32,6 @@ set(schema_scanner_src ${SC_ROOT}/src/express/express.c ${SC_ROOT}/src/express/factory.c ${SC_ROOT}/src/express/hash.c - ${SC_ROOT}/src/express/lexact.c ${SC_ROOT}/src/express/linklist.c ${SC_ROOT}/src/express/memory.c ${SC_ROOT}/src/express/object.c @@ -45,11 +44,13 @@ set(schema_scanner_src ${SC_ROOT}/src/express/symbol.c ${SC_ROOT}/src/express/type.c ${SC_ROOT}/src/express/variable.c + ${SC_ROOT}/src/auxlib/bstrlib.c ${CMAKE_CURRENT_SOURCE_DIR}/schemaScanner.cc ) include_directories( ${SC_ROOT}/include/ + ${SC_ROOT}/src/auxlib ${SC_ROOT}/src/express/ ${SC_ROOT}/src/express/generated ${SC_ROOT}/src/base diff --git a/include/express/alloc.h b/include/express/alloc.h index 79199773a..b26cb0b5d 100644 --- a/include/express/alloc.h +++ b/include/express/alloc.h @@ -58,23 +58,12 @@ struct freelist_head { #endif }; -char * nnew(); - #include "error.h" /***********************************************/ /* space allocation macros with error package: */ /***********************************************/ -extern SC_EXPRESS_EXPORT int yylineno; - -/** CALLOC grabs and initializes to all 0s space for the indicated - * number of instances of the indicated type */ -#define CALLOC(ptr, num, type) \ - if (((ptr) = (type*)calloc((num), (unsigned)sizeof(type)))==NULL) { \ - fprintf(stderr,"fedex: out of space");\ - } else {} - SC_EXPRESS_EXPORT void _ALLOCinitialize( void ); SC_EXPRESS_EXPORT void ALLOCinitialize( struct freelist_head * flh, unsigned int size, int alloc1, int alloc2 ); SC_EXPRESS_EXPORT void ALLOC_destroy( struct freelist_head *, Freelist * ); diff --git a/include/express/dict.h b/include/express/dict.h index f289ecca3..54285d85b 100644 --- a/include/express/dict.h +++ b/include/express/dict.h @@ -56,7 +56,7 @@ /************/ typedef struct Hash_Table_ * Dictionary; -typedef HashEntry DictionaryEntry; +typedef struct Hash_Iterator_ DictionaryEntry; /****************/ /* modules used */ @@ -71,27 +71,15 @@ typedef HashEntry DictionaryEntry; /********************/ /* global variables */ /********************/ - +/*TODO: surely this is not a good thing?! */ extern SC_EXPRESS_EXPORT char DICT_type; /**< set as a side-effect of DICT lookup routines to type of object found */ /*******************************/ /* macro function definitions */ /*******************************/ -#define DICTcreate(estimated_max_size) HASHcreate(estimated_max_size) -/** should really can DICTdo_init and rename do_type_init to do_init! */ -#define DICTdo_init(dict,de) HASHlistinit((dict),(de)) -#define DICTdo_type_init(dict,de,t) HASHlistinit_by_type((dict),(de),(t)) -#define DICTdo_end(hash_entry) HASHlistend(hash_entry) - -/** modify dictionary entry in-place */ -#define DICTchange(e,obj,sym,typ) { \ - (e)->data = (obj); \ - (e)->symbol = (sym); \ - (e)->type = (typ); \ - } -#define DICTchange_type(e,typ) (e)->type = (typ) - +#define DICTcreate(x) HASHcreate() +#define DICTdo_init(dict,de,t) HASHdo_init((dict),(de),(t)) /***********************/ /* function prototypes */ @@ -100,8 +88,9 @@ extern SC_EXPRESS_EXPORT char DICT_type; /**< set as a side-effect of DICT look extern SC_EXPRESS_EXPORT void DICTinitialize( void ); extern SC_EXPRESS_EXPORT void DICTcleanup( void ); extern SC_EXPRESS_EXPORT int DICTdefine( Dictionary, char *, void *, Symbol *, char ); -extern SC_EXPRESS_EXPORT int DICT_define( Dictionary, char *, void *, Symbol *, char ); +extern SC_EXPRESS_EXPORT int DICTdefine_enum( Dictionary, char *, void *, Symbol *, char ); extern SC_EXPRESS_EXPORT void DICTundefine( Dictionary, char * ); +/* TODO: could DICTlookup be implemented more generically using function pointers? */ extern SC_EXPRESS_EXPORT void * DICTlookup( Dictionary, char * ); extern SC_EXPRESS_EXPORT void * DICTlookup_symbol( Dictionary, char *, Symbol ** ); extern SC_EXPRESS_EXPORT void * DICTdo( DictionaryEntry * ); diff --git a/include/express/entity.h b/include/express/entity.h index 3440dc9bc..27ea9ee15 100644 --- a/include/express/entity.h +++ b/include/express/entity.h @@ -144,11 +144,11 @@ extern SC_EXPRESS_EXPORT struct Scope_ * ENTITYcreate( struct Symbol_ * ); extern SC_EXPRESS_EXPORT void ENTITYinitialize( void ); extern SC_EXPRESS_EXPORT void ENTITYadd_attribute( struct Scope_ *, struct Variable_ * ); extern SC_EXPRESS_EXPORT struct Scope_ * ENTITYcopy( struct Scope_ * ); -extern SC_EXPRESS_EXPORT Entity ENTITYfind_inherited_entity( struct Scope_ *, char *, int ); -extern SC_EXPRESS_EXPORT Variable ENTITYfind_inherited_attribute( struct Scope_ *, char *, struct Symbol_ ** ); +extern SC_EXPRESS_EXPORT Entity ENTITYfind_inherited_entity( struct Scope_ *, const char *, int ); +extern SC_EXPRESS_EXPORT Symbol *ENTITYfind_inherited_attribute( struct Scope_ *, const char *, struct Symbol_ ** ); extern SC_EXPRESS_EXPORT Variable ENTITYresolve_attr_ref( Entity, Symbol *, Symbol * ); extern SC_EXPRESS_EXPORT bool ENTITYhas_immediate_supertype( Entity, Entity ); -extern SC_EXPRESS_EXPORT Variable ENTITYget_named_attribute( Entity, char * ); +extern SC_EXPRESS_EXPORT Variable ENTITYget_named_attribute( Entity, const char * ); extern SC_EXPRESS_EXPORT Linked_List ENTITYget_all_attributes( Entity ); extern SC_EXPRESS_EXPORT bool ENTITYhas_supertype( Entity, Entity ); extern SC_EXPRESS_EXPORT void ENTITYadd_instance( Entity, void *); diff --git a/include/express/expbasic.h b/include/express/expbasic.h index 63ab6e291..e6d1b5c8b 100644 --- a/include/express/expbasic.h +++ b/include/express/expbasic.h @@ -128,6 +128,7 @@ typedef char * Binary; /** these represent a different way of selecting classes of objects * these are particularly useful when looking for multiple types concurrently */ + #define OBJ_TYPE_BITS 0x1 #define OBJ_ENTITY_BITS 0x2 #define OBJ_FUNCTION_BITS 0x4 @@ -138,6 +139,10 @@ typedef char * Binary; #define OBJ_SCHEMA_BITS 0x80 #define OBJ_VARIABLE_BITS 0x100 #define OBJ_WHERE_BITS 0x200 +#define OBJ_ALIAS_BITS 0x400 +#define OBJ_REPEAT_BITS 0x800 +#define OBJ_QUERY_BITS 0x1000 + #define OBJ_ANYTHING_BITS 0x0fffffff #define OBJ_UNFINDABLE_BITS 0x10000000 /**< should never be found */ @@ -148,6 +153,7 @@ typedef char * Binary; /* OBJ_UNUSED should die, but until it does, allow it to work */ #define OBJ_UNUSED_BITS OBJ_UNFINDABLE_BITS +#define OBJ_DOCROOT_BITS OBJ_UNFINDABLE_BITS #endif /*EXPRESS_BASIC_H*/ diff --git a/include/express/express.h b/include/express/express.h index e849ae56a..47bd55ac9 100644 --- a/include/express/express.h +++ b/include/express/express.h @@ -62,7 +62,6 @@ #include "alg.h" #include "schema.h" #include "lexact.h" -#include "dict.h" /************/ /* typedefs */ @@ -102,7 +101,7 @@ extern char EXPRESSgetopt_options[]; /* initialized elsewhere */ extern SC_EXPRESS_EXPORT int ( *EXPRESSgetopt )( int, char * ); extern SC_EXPRESS_EXPORT bool EXPRESSignore_duplicate_schemas; -extern SC_EXPRESS_EXPORT Dictionary EXPRESSbuiltins; /* procedures/functions */ +extern SC_EXPRESS_EXPORT Hash_Table EXPRESSbuiltins; /* procedures/functions */ extern SC_EXPRESS_EXPORT struct Scope_ * FUNC_NVL; extern SC_EXPRESS_EXPORT struct Scope_ * FUNC_USEDIN; diff --git a/include/express/hash.h b/include/express/hash.h index c5d1dfffe..b9bb776f0 100644 --- a/include/express/hash.h +++ b/include/express/hash.h @@ -80,28 +80,10 @@ * */ -#include "basic.h" /* get basic definitions */ +#include "sc_export.h" -/*************/ -/* constants */ -/*************/ - -#define HASH_NULL (Hash_Table)NULL - -#define SEGMENT_SIZE 256 -#define SEGMENT_SIZE_SHIFT 8 /**< log2(SEGMENT_SIZE) */ -#define DIRECTORY_SIZE 256 -#define DIRECTORY_SIZE_SHIFT 8 /**< log2(DIRECTORY_SIZE) */ -#define PRIME1 37 -#define PRIME2 1048583 -#define MAX_LOAD_FACTOR 5 - -/*****************/ -/* packages used */ -/*****************/ - -#include -#include "alloc.h" +#include "expbasic.h" +#include "symbol.h" /************/ /* typedefs */ @@ -109,96 +91,53 @@ typedef enum { HASH_FIND, HASH_INSERT, HASH_DELETE } Action; -typedef unsigned long Address; - /****************/ /* abstractions */ /****************/ -typedef struct Element_ { - char * key; - char * data; - struct Element_ * next; - Symbol * symbol; /**< for debugging hash conflicts */ - char type; /**< user-supplied type */ -} * Element; - -typedef Element * Segment; - -typedef struct Hash_Table_ { -#if 0 - int in_use; /**< If someone is traversing the hash table */ -#endif - unsigned int p; /**< Next bucket to be split */ - unsigned int maxp; /**< upper bound on p during expansion */ +typedef Symbol **Segment; + +struct Hash_Table_ { + unsigned int p; /**< Next bucket to be split */ + unsigned int maxp; /**< upper bound on p during expansion */ unsigned int KeyCount; /**< current # keys */ unsigned int SegmentCount; /**< current # segments */ - unsigned int MinLoadFactor; - unsigned int MaxLoadFactor; - Segment Directory[DIRECTORY_SIZE]; -} * Hash_Table; - -typedef struct { - unsigned int i; /**< segment index (i think) */ - unsigned int j; /**< key index in segment (ditto) */ - Element p; /**< usually the next element to be returned */ + Segment *Directory; + unsigned int DirectorySize; + unsigned int SegmentSize; +#ifdef HASH_DEBUG + unsigned int HashCollisions; +#endif +}; + +typedef struct Hash_Table_ *Hash_Table; + +struct Hash_Iterator_ { Hash_Table table; + unsigned int hash; + Symbol *p; char type; - Element e; /**< originally thought of as a place for - * the caller of HASHlist to temporarily stash the return value - * to allow the caller (i.e., DICTdo) to be macroized, but now - * conveniently used by HASHlist, which both stores the ultimate - * value here as well as returns it via the return value of HASHlist - */ -} HashEntry; +}; + +typedef struct Hash_Iterator_ Hash_Iterator; /********************/ /* global variables */ /********************/ extern SC_EXPRESS_EXPORT struct freelist_head HASH_Table_fl; -extern SC_EXPRESS_EXPORT struct freelist_head HASH_Element_fl; - -/******************************/ -/* macro function definitions */ -/******************************/ - -/* -** Fast arithmetic, relying on powers of 2 -*/ - -/** -The centerline compiler was having problems with MUL and DIV. Where DIV -was called like this DIV(NewAddress, SEGMENT_SIZE) it is now being called like -DIV(NewAddress, SEGMENT_SIZE_SHIFT). The compiler was mentioning some kind of -problem with ##. I wonder if maybe the precompiler was expanding SEGMENT_SIZE -(which is also defined as a macro) before turning it into SEGMENT_SIZE_SHIFT. -SEGMENT_SIZE and DIRECTORY_SIZE were used to call these macros. They are both -defined to be 8 though so it seems these are always being used the same way. -This change only seems to have affected hash.h and hash.c -*/ -/* #define MUL(x,y) ((x) << (y##_SHIFT)) */ -#define MUL(x,y) ((x) << (y)) -/* #define DIV(x,y) ((x) >> (y##_SHIFT)) */ -#define DIV(x,y) ((x) >> (y)) -#define MOD(x,y) ((x) & ((y)-1)) - -#define HASH_Table_new() (struct Hash_Table_ *)ALLOC_new(&HASH_Table_fl) -#define HASH_Table_destroy(x) ALLOC_destroy(&HASH_Table_fl,(Freelist *)x) -#define HASH_Element_new() (struct Element_ *)ALLOC_new(&HASH_Element_fl) -#define HASH_Element_destroy(x) ALLOC_destroy(&HASH_Element_fl,(Freelist *)(char *)x) /***********************/ /* function prototypes */ /***********************/ -extern SC_EXPRESS_EXPORT void HASHinitialize( void ); -extern SC_EXPRESS_EXPORT Hash_Table HASHcreate( unsigned ); -extern SC_EXPRESS_EXPORT Hash_Table HASHcopy( Hash_Table ); -extern SC_EXPRESS_EXPORT void HASHdestroy( Hash_Table ); -extern SC_EXPRESS_EXPORT Element HASHsearch( Hash_Table, Element, Action ); -extern SC_EXPRESS_EXPORT void HASHlistinit( Hash_Table, HashEntry * ); -extern SC_EXPRESS_EXPORT void HASHlistinit_by_type( Hash_Table, HashEntry *, char ); -extern SC_EXPRESS_EXPORT Element HASHlist( HashEntry * ); +extern SC_EXPRESS_EXPORT void HASHinitialize( void ); +extern SC_EXPRESS_EXPORT Hash_Table HASHcreate( void ); +extern SC_EXPRESS_EXPORT Hash_Table HASHcopy( Hash_Table ); +extern SC_EXPRESS_EXPORT void HASHdestroy( Hash_Table ); +extern SC_EXPRESS_EXPORT Symbol * HASHsearch( Hash_Table, Symbol, Action ); +extern SC_EXPRESS_EXPORT void HASHdelete( Hash_Table, Symbol * ); +extern SC_EXPRESS_EXPORT void HASHdo_init( Hash_Table, Hash_Iterator *, char ); +extern SC_EXPRESS_EXPORT Symbol * HASHdo( Hash_Iterator * ); -#endif /*HASH_H*/ +#endif /* HASH_H */ diff --git a/include/express/sc_fwd.h b/include/express/sc_fwd.h new file mode 100644 index 000000000..8ee3e94db --- /dev/null +++ b/include/express/sc_fwd.h @@ -0,0 +1,8 @@ +#ifndef __SC_FWD_H +#define __SC_FWD_H + +struct Symbol_; +typedef struct Symbol_ Symbol; + + +#endif /* __SC_FWD_H */ diff --git a/include/express/schema.h b/include/express/schema.h index 1d2ce5c4b..056a1e258 100644 --- a/include/express/schema.h +++ b/include/express/schema.h @@ -61,8 +61,8 @@ /****************/ #include "alg.h" -#include "dict.h" #include "entity.h" +#include "hash.h" #include "linklist.h" /***************************/ @@ -91,8 +91,8 @@ struct Schema_ { * dictionaries into which are entered renames for each specific * object specified in a rename clause (even if it uses the same * name */ - Dictionary refdict; - Dictionary usedict; + Hash_Table refdict; + Hash_Table usedict; Linked_List use_schemas; /**< lists of schemas that are fully use'd * entries can be 0 if schemas weren't found during RENAMEresolve */ @@ -133,7 +133,7 @@ extern SC_EXPRESS_EXPORT int __SCOPE_search_id; /* function prototypes */ /***********************/ -extern SC_EXPRESS_EXPORT Variable VARfind( Scope, char *, int ); +extern SC_EXPRESS_EXPORT Symbol * VARfind( Scope, const char * ); extern SC_EXPRESS_EXPORT Schema SCHEMAcreate( void ); extern SC_EXPRESS_EXPORT void SCHEMAinitialize( void ); extern SC_EXPRESS_EXPORT void SCHEMAadd_use( Schema, Symbol *, Symbol *, Symbol * ); diff --git a/include/express/scope.h b/include/express/scope.h index 8f16fafbf..42e8e1b46 100644 --- a/include/express/scope.h +++ b/include/express/scope.h @@ -50,6 +50,7 @@ /****************/ #include +#include "hash.h" #include "type.h" #include "variable.h" #include "entity.h" @@ -62,7 +63,6 @@ /*****************/ #include "expbasic.h" /* get basic definitions */ -#include "dict.h" #include "symbol.h" /***************************/ @@ -82,7 +82,7 @@ struct Scope_ { char type; /* see above */ ClientData clientData; /**< user may use this for any purpose */ int search_id; /**< key to avoid searching this scope twice */ - Dictionary symbol_table, enum_table; + Hash_Table symbol_table, enum_table; struct Scope_ * superscope; union { struct Procedure_ * proc; @@ -115,16 +115,16 @@ struct Scope_ { #define SCOPEput_clientData(s,d) ((s)->clientData = (d)) -#define SCOPEdo_types(s,t,de) DICTdo_type_init(s->symbol_table,&de,OBJ_TYPE);{\ +#define SCOPEdo_types(s,t,de) DICTdo_init(s->symbol_table,&de,OBJ_TYPE);{\ Type t; \ while (0 != (t = (Type)DICTdo(&de))) { -#define SCOPEdo_entities(s,t,de) DICTdo_type_init(s->symbol_table,&de,OBJ_ENTITY); { \ +#define SCOPEdo_entities(s,t,de) DICTdo_init(s->symbol_table,&de,OBJ_ENTITY); { \ Entity t; \ while (0 != (t = (Entity)DICTdo(&de))) { -#define SCOPEdo_functions(s,t,de) DICTdo_type_init(s->symbol_table,&de,OBJ_FUNCTION); { \ +#define SCOPEdo_functions(s,t,de) DICTdo_init(s->symbol_table,&de,OBJ_FUNCTION); { \ Entity t; \ while (0 != (t = (Entity)DICTdo(&de))) { -#define SCOPEdo_rules(s,t,de) DICTdo_type_init(s->symbol_table,&de,OBJ_RULE); { \ +#define SCOPEdo_rules(s,t,de) DICTdo_init(s->symbol_table,&de,OBJ_RULE); { \ Entity t; \ while (0 != (t = (Entity)DICTdo(&de))) { @@ -138,12 +138,12 @@ extern SC_EXPRESS_EXPORT struct Symbol_ * SCOPE_get_symbol( void * ); extern SC_EXPRESS_EXPORT void SCOPE_get_entities( Scope, Linked_List ); extern SC_EXPRESS_EXPORT Linked_List SCOPEget_entities( Scope ); extern SC_EXPRESS_EXPORT Linked_List SCOPEget_entities_superclass_order( Scope ); -extern SC_EXPRESS_EXPORT void * SCOPEfind( Scope, char *, int ); +extern SC_EXPRESS_EXPORT Symbol * SCOPEfind( Scope, const char *, int ); extern SC_EXPRESS_EXPORT void SCOPE_get_functions( Scope, Linked_List ); extern SC_EXPRESS_EXPORT Linked_List SCOPEget_functions( Scope ); extern SC_EXPRESS_EXPORT void SCOPE_get_rules( Scope, Linked_List ); extern SC_EXPRESS_EXPORT Linked_List SCOPEget_rules( Scope ); -void * SCOPE_find( Scope, char *, int ); +Symbol * SCOPE_find( Scope, const char *, int ); #endif /* SCOPE_H */ diff --git a/include/express/symbol.h b/include/express/symbol.h index b589b01e2..7e07776e9 100644 --- a/include/express/symbol.h +++ b/include/express/symbol.h @@ -43,27 +43,30 @@ /* packages used */ /*****************/ -#include +#include "sc_export.h" + #include "basic.h" /* get basic definitions */ #include "alloc.h" -/************/ -/* typedefs */ -/************/ - -typedef struct Symbol_ Symbol; - /***************************/ -/* hidden type definitions */ +/* type definitions */ /***************************/ struct Symbol_ { - char * name; - const char * filename; + const char *name; + void *data; /* the AST for this symbol */ + char type; /* the OBJ_ type, see expbasic.h */ + int ref_tok; /* the lexer ref_type for this symbol */ + + const char *filename; int line; - char resolved; + char resolved; /* if imported TYPE or ENTITY is unresolved */ + + struct Symbol_ *next; /* symbol table clashes */ }; +typedef struct Symbol_ Symbol; + /****************/ /* modules used */ /****************/ @@ -78,9 +81,7 @@ extern SC_EXPRESS_EXPORT struct freelist_head SYMBOL_fl; /* macro function definitions */ /******************************/ -#define SYMBOL_new() (struct Symbol_ *)ALLOC_new(&SYMBOL_fl) -#define SYMBOL_destroy(x) ALLOC_destroy(&SYMBOL_fl,(Freelist *)x) - +/* TODO: gets called from e.g. type.c, should be set by parser */ #define SYMBOLset(obj) obj->symbol.line = yylineno; \ obj->symbol.filename = current_filename @@ -89,6 +90,6 @@ extern SC_EXPRESS_EXPORT struct freelist_head SYMBOL_fl; /***********************/ extern SC_EXPRESS_EXPORT void SYMBOLinitialize( void ); -SC_EXPRESS_EXPORT Symbol * SYMBOLcreate( char * name, int line, const char * filename ); +SC_EXPRESS_EXPORT Symbol * SYMBOLcreate( char * name, int type, int ref_tok, int line, const char * filename ); #endif /* SYMBOL_H */ diff --git a/include/express/type.h b/include/express/type.h index 321fe716e..fc1ea0b1b 100644 --- a/include/express/type.h +++ b/include/express/type.h @@ -129,7 +129,6 @@ typedef enum type_enum Class; /* modules used */ /****************/ -#include "dict.h" #include "entity.h" #include "expr.h" #include "scope.h" diff --git a/include/express/variable.h b/include/express/variable.h index 308116459..106f45964 100644 --- a/include/express/variable.h +++ b/include/express/variable.h @@ -127,6 +127,6 @@ extern SC_EXPRESS_EXPORT struct freelist_head VAR_fl; extern SC_EXPRESS_EXPORT Variable VARcreate( Expression, Type ); extern SC_EXPRESS_EXPORT void VARinitialize( void ); -extern SC_EXPRESS_EXPORT char * VARget_simple_name( Variable ); +extern SC_EXPRESS_EXPORT const char * VARget_simple_name( Variable ); #endif /* VARIABLE_H */ diff --git a/src/auxlib/CMakeLists.txt b/src/auxlib/CMakeLists.txt new file mode 100644 index 000000000..7f6c2c8f6 --- /dev/null +++ b/src/auxlib/CMakeLists.txt @@ -0,0 +1,16 @@ + +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + +if (${SC_MEMMGR_ENABLE_CHECKS}) + add_definitions(-DSC_MEMMGR_ENABLE_CHECKS) +endif() + +SC_ADDLIB(auxlib STATIC SOURCES bstrlib.c) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 + diff --git a/src/auxlib/bstrlib.c b/src/auxlib/bstrlib.c new file mode 100644 index 000000000..82fbc05fd --- /dev/null +++ b/src/auxlib/bstrlib.c @@ -0,0 +1,3137 @@ +/* + * This source file is part of the bstring string library. This code was + * written by Paul Hsieh in 2002-2015, and is covered by the BSD open source + * license and the GPL. Refer to the accompanying documentation for details + * on usage and license. + */ + +/* + * bstrlib.c + * + * This file is the core module for implementing the bstring functions. + */ + +#if defined (_MSC_VER) +# define _CRT_SECURE_NO_WARNINGS +#endif + +#include +#include +#include +#include +#include +#include +#include +#include "bstrlib.h" + +/* Optionally include a mechanism for debugging memory */ + +#if defined(MEMORY_DEBUG) || defined(BSTRLIB_MEMORY_DEBUG) +#include "memdbg.h" +#endif + +#ifndef bstr__alloc +#if defined (BSTRLIB_TEST_CANARY) +void* bstr__alloc (size_t sz) { + char* p = (char *) malloc (sz); + memset (p, 'X', sz); + return p; +} +#else +#define bstr__alloc(x) malloc (x) +#endif +#endif + +#ifndef bstr__free +#define bstr__free(p) free (p) +#endif + +#ifndef bstr__realloc +#define bstr__realloc(p,x) realloc ((p), (x)) +#endif + +#ifndef bstr__memcpy +#define bstr__memcpy(d,s,l) memcpy ((d), (s), (l)) +#endif + +#ifndef bstr__memmove +#define bstr__memmove(d,s,l) memmove ((d), (s), (l)) +#endif + +#ifndef bstr__memset +#define bstr__memset(d,c,l) memset ((d), (c), (l)) +#endif + +#ifndef bstr__memcmp +#define bstr__memcmp(d,c,l) memcmp ((d), (c), (l)) +#endif + +#ifndef bstr__memchr +#define bstr__memchr(s,c,l) memchr ((s), (c), (l)) +#endif + +/* Just a length safe wrapper for memmove. */ + +#define bBlockCopy(D,S,L) { if ((L) > 0) bstr__memmove ((D),(S),(L)); } + +/* Compute the snapped size for a given requested size. By snapping to powers + of 2 like this, repeated reallocations are avoided. */ +static int snapUpSize (int i) { + if (i < 8) { + i = 8; + } else { + unsigned int j; + j = (unsigned int) i; + + j |= (j >> 1); + j |= (j >> 2); + j |= (j >> 4); + j |= (j >> 8); /* Ok, since int >= 16 bits */ +#if (UINT_MAX != 0xffff) + j |= (j >> 16); /* For 32 bit int systems */ +#if (UINT_MAX > 0xffffffffUL) + j |= (j >> 32); /* For 64 bit int systems */ +#endif +#endif + /* Least power of two greater than i */ + j++; + if ((int) j >= i) i = (int) j; + } + return i; +} + +/* int balloc (bstring b, int len) + * + * Increase the size of the memory backing the bstring b to at least len. + */ +int balloc (bstring b, int olen) { + int len; + if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen <= 0 || + b->mlen < b->slen || olen <= 0) { + return BSTR_ERR; + } + + if (olen >= b->mlen) { + unsigned char * x; + + if ((len = snapUpSize (olen)) <= b->mlen) return BSTR_OK; + + /* Assume probability of a non-moving realloc is 0.125 */ + if (7 * b->mlen < 8 * b->slen) { + + /* If slen is close to mlen in size then use realloc to reduce + the memory defragmentation */ + + reallocStrategy:; + + x = (unsigned char *) bstr__realloc (b->data, (size_t) len); + if (x == NULL) { + + /* Since we failed, try allocating the tighest possible + allocation */ + + len = olen; + x = (unsigned char *) bstr__realloc (b->data, (size_t) olen); + if (NULL == x) { + return BSTR_ERR; + } + } + } else { + + /* If slen is not close to mlen then avoid the penalty of copying + the extra bytes that are allocated, but not considered part of + the string */ + + if (NULL == (x = (unsigned char *) bstr__alloc ((size_t) len))) { + + /* Perhaps there is no available memory for the two + allocations to be in memory at once */ + + goto reallocStrategy; + + } else { + if (b->slen) bstr__memcpy ((char *) x, (char *) b->data, + (size_t) b->slen); + bstr__free (b->data); + } + } + b->data = x; + b->mlen = len; + b->data[b->slen] = (unsigned char) '\0'; + +#if defined (BSTRLIB_TEST_CANARY) + if (len > b->slen + 1) { + memchr (b->data + b->slen + 1, 'X', len - (b->slen + 1)); + } +#endif + } + + return BSTR_OK; +} + +/* int ballocmin (bstring b, int len) + * + * Set the size of the memory backing the bstring b to len or b->slen+1, + * whichever is larger. Note that repeated use of this function can degrade + * performance. + */ +int ballocmin (bstring b, int len) { + unsigned char * s; + + if (b == NULL || b->data == NULL) return BSTR_ERR; + if (b->slen >= INT_MAX || b->slen < 0) return BSTR_ERR; + if (b->mlen <= 0 || b->mlen < b->slen || len <= 0) { + return BSTR_ERR; + } + + if (len < b->slen + 1) len = b->slen + 1; + + if (len != b->mlen) { + s = (unsigned char *) bstr__realloc (b->data, (size_t) len); + if (NULL == s) return BSTR_ERR; + s[b->slen] = (unsigned char) '\0'; + b->data = s; + b->mlen = len; + } + + return BSTR_OK; +} + +/* bstring bfromcstr (const char * str) + * + * Create a bstring which contains the contents of the '\0' terminated char * + * buffer str. + */ +bstring bfromcstr (const char * str) { +bstring b; +int i; +size_t j; + + if (str == NULL) return NULL; + j = (strlen) (str); + i = snapUpSize ((int) (j + (2 - (j != 0)))); + if (i <= (int) j) return NULL; + + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (NULL == b) return NULL; + b->slen = (int) j; + if (NULL == (b->data = (unsigned char *) bstr__alloc (b->mlen = i))) { + bstr__free (b); + return NULL; + } + + bstr__memcpy (b->data, str, j+1); + return b; +} + +/* bstring bfromcstrrangealloc (int minl, int maxl, const char* str) + * + * Create a bstring which contains the contents of the '\0' terminated + * char* buffer str. The memory buffer backing the string is at least + * minl characters in length, but an attempt is made to allocate up to + * maxl characters. + */ +bstring bfromcstrrangealloc (int minl, int maxl, const char* str) { +bstring b; +int i; +size_t j; + + /* Bad parameters? */ + if (str == NULL) return NULL; + if (maxl < minl || minl < 0) return NULL; + + /* Adjust lengths */ + j = (strlen) (str); + if ((size_t) minl < (j+1)) minl = (int) (j+1); + if (maxl < minl) maxl = minl; + i = maxl; + + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b == NULL) return NULL; + b->slen = (int) j; + + while (NULL == (b->data = (unsigned char *) bstr__alloc (b->mlen = i))) { + int k = (i >> 1) + (minl >> 1); + if (i == k || i < minl) { + bstr__free (b); + return NULL; + } + i = k; + } + + bstr__memcpy (b->data, str, j+1); + return b; +} + +/* bstring bfromcstralloc (int mlen, const char * str) + * + * Create a bstring which contains the contents of the '\0' terminated + * char* buffer str. The memory buffer backing the string is at least + * mlen characters in length. + */ +bstring bfromcstralloc (int mlen, const char * str) { + return bfromcstrrangealloc (mlen, mlen, str); +} + +/* bstring blk2bstr (const void * blk, int len) + * + * Create a bstring which contains the content of the block blk of length + * len. + */ +bstring blk2bstr (const void * blk, int len) { +bstring b; +int i; + + if (blk == NULL || len < 0) return NULL; + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b == NULL) return NULL; + b->slen = len; + + i = len + (2 - (len != 0)); + i = snapUpSize (i); + + b->mlen = i; + + b->data = (unsigned char *) bstr__alloc ((size_t) b->mlen); + if (b->data == NULL) { + bstr__free (b); + return NULL; + } + + if (len > 0) bstr__memcpy (b->data, blk, (size_t) len); + b->data[len] = (unsigned char) '\0'; + + return b; +} + +/* char * bstr2cstr (const_bstring s, char z) + * + * Create a '\0' terminated char * buffer which is equal to the contents of + * the bstring s, except that any contained '\0' characters are converted + * to the character in z. This returned value should be freed with a + * bcstrfree () call, by the calling application. + */ +char * bstr2cstr (const_bstring b, char z) { +int i, l; +char * r; + + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + l = b->slen; + r = (char *) bstr__alloc ((size_t) (l + 1)); + if (r == NULL) return r; + + for (i=0; i < l; i ++) { + r[i] = (char) ((b->data[i] == '\0') ? z : (char) (b->data[i])); + } + + r[l] = (unsigned char) '\0'; + + return r; +} + +/* int bcstrfree (char * s) + * + * Frees a C-string generated by bstr2cstr (). This is normally unnecessary + * since it just wraps a call to bstr__free (), however, if bstr__alloc () + * and bstr__free () have been redefined as a macros within the bstrlib + * module (via defining them in memdbg.h after defining + * BSTRLIB_MEMORY_DEBUG) with some difference in behaviour from the std + * library functions, then this allows a correct way of freeing the memory + * that allows higher level code to be independent from these macro + * redefinitions. + */ +int bcstrfree (char * s) { + if (s) { + bstr__free (s); + return BSTR_OK; + } + return BSTR_ERR; +} + +/* int bconcat (bstring b0, const_bstring b1) + * + * Concatenate the bstring b1 to the bstring b0. + */ +int bconcat (bstring b0, const_bstring b1) { +int len, d; +bstring aux = (bstring) b1; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL) + return BSTR_ERR; + + d = b0->slen; + len = b1->slen; + if ((d | (b0->mlen - d) | len | (d + len)) < 0) return BSTR_ERR; + + if (b0->mlen <= d + len + 1) { + ptrdiff_t pd = b1->data - b0->data; + if (0 <= pd && pd < b0->mlen) { + if (NULL == (aux = bstrcpy (b1))) return BSTR_ERR; + } + if (balloc (b0, d + len + 1) != BSTR_OK) { + if (aux != b1) bdestroy (aux); + return BSTR_ERR; + } + } + + bBlockCopy (&b0->data[d], &aux->data[0], (size_t) len); + b0->data[d + len] = (unsigned char) '\0'; + b0->slen = d + len; + if (aux != b1) bdestroy (aux); + return BSTR_OK; +} + +/* int bconchar (bstring b, char c) + * + * Concatenate the single character c to the bstring b. + */ +int bconchar (bstring b, char c) { +int d; + + if (b == NULL) return BSTR_ERR; + d = b->slen; + if ((d | (b->mlen - d)) < 0 || balloc (b, d + 2) != BSTR_OK) + return BSTR_ERR; + b->data[d] = (unsigned char) c; + b->data[d + 1] = (unsigned char) '\0'; + b->slen++; + return BSTR_OK; +} + +/* int bcatcstr (bstring b, const char * s) + * + * Concatenate a char * string to a bstring. + */ +int bcatcstr (bstring b, const char * s) { +char * d; +int i, l; + + if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen < b->slen + || b->mlen <= 0 || s == NULL) return BSTR_ERR; + + /* Optimistically concatenate directly */ + l = b->mlen - b->slen; + d = (char *) &b->data[b->slen]; + for (i=0; i < l; i++) { + if ((*d++ = *s++) == '\0') { + b->slen += i; + return BSTR_OK; + } + } + b->slen += i; + + /* Need to explicitely resize and concatenate tail */ + return bcatblk (b, (const void *) s, (int) strlen (s)); +} + +/* int bcatblk (bstring b, const void * s, int len) + * + * Concatenate a fixed length buffer to a bstring. + */ +int bcatblk (bstring b, const void * s, int len) { +int nl; + + if (b == NULL || b->data == NULL || b->slen < 0 || b->mlen < b->slen + || b->mlen <= 0 || s == NULL || len < 0) return BSTR_ERR; + + if (0 > (nl = b->slen + len)) return BSTR_ERR; /* Overflow? */ + if (b->mlen <= nl && 0 > balloc (b, nl + 1)) return BSTR_ERR; + + bBlockCopy (&b->data[b->slen], s, (size_t) len); + b->slen = nl; + b->data[nl] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* bstring bstrcpy (const_bstring b) + * + * Create a copy of the bstring b. + */ +bstring bstrcpy (const_bstring b) { +bstring b0; +int i,j; + + /* Attempted to copy an invalid string? */ + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + + b0 = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (b0 == NULL) { + /* Unable to allocate memory for string header */ + return NULL; + } + + i = b->slen; + j = snapUpSize (i + 1); + + b0->data = (unsigned char *) bstr__alloc (j); + if (b0->data == NULL) { + j = i + 1; + b0->data = (unsigned char *) bstr__alloc (j); + if (b0->data == NULL) { + /* Unable to allocate memory for string data */ + bstr__free (b0); + return NULL; + } + } + + b0->mlen = j; + b0->slen = i; + + if (i) bstr__memcpy ((char *) b0->data, (char *) b->data, i); + b0->data[b0->slen] = (unsigned char) '\0'; + + return b0; +} + +/* int bassign (bstring a, const_bstring b) + * + * Overwrite the string a with the contents of string b. + */ +int bassign (bstring a, const_bstring b) { + if (b == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + if (b->slen != 0) { + if (balloc (a, b->slen) != BSTR_OK) return BSTR_ERR; + bstr__memmove (a->data, b->data, b->slen); + } else { + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0) + return BSTR_ERR; + } + a->data[b->slen] = (unsigned char) '\0'; + a->slen = b->slen; + return BSTR_OK; +} + +/* int bassignmidstr (bstring a, const_bstring b, int left, int len) + * + * Overwrite the string a with the middle of contents of string b + * starting from position left and running for a length len. left and + * len are clamped to the ends of b as with the function bmidstr. + */ +int bassignmidstr (bstring a, const_bstring b, int left, int len) { + if (b == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + + if (left < 0) { + len += left; + left = 0; + } + + if (len > b->slen - left) len = b->slen - left; + + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0) + return BSTR_ERR; + + if (len > 0) { + if (balloc (a, len) != BSTR_OK) return BSTR_ERR; + bstr__memmove (a->data, b->data + left, len); + a->slen = len; + } else { + a->slen = 0; + } + a->data[a->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bassigncstr (bstring a, const char * str) + * + * Overwrite the string a with the contents of char * string str. Note that + * the bstring a must be a well defined and writable bstring. If an error + * occurs BSTR_ERR is returned however a may be partially overwritten. + */ +int bassigncstr (bstring a, const char * str) { +int i; +size_t len; + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0 || NULL == str) + return BSTR_ERR; + + for (i=0; i < a->mlen; i++) { + if ('\0' == (a->data[i] = str[i])) { + a->slen = i; + return BSTR_OK; + } + } + + a->slen = i; + len = strlen (str + i); + if (len + 1 > (size_t) INT_MAX - i || + 0 > balloc (a, (int) (i + len + 1))) return BSTR_ERR; + bBlockCopy (a->data + i, str + i, (size_t) len + 1); + a->slen += (int) len; + return BSTR_OK; +} + +/* int bassignblk (bstring a, const void * s, int len) + * + * Overwrite the string a with the contents of the block (s, len). Note that + * the bstring a must be a well defined and writable bstring. If an error + * occurs BSTR_ERR is returned and a is not overwritten. + */ +int bassignblk (bstring a, const void * s, int len) { + if (a == NULL || a->data == NULL || a->mlen < a->slen || + a->slen < 0 || a->mlen == 0 || NULL == s || len < 0 || len >= INT_MAX) + return BSTR_ERR; + if (len + 1 > a->mlen && 0 > balloc (a, len + 1)) return BSTR_ERR; + bBlockCopy (a->data, s, (size_t) len); + a->data[len] = (unsigned char) '\0'; + a->slen = len; + return BSTR_OK; +} + +/* int btrunc (bstring b, int n) + * + * Truncate the bstring to at most n characters. + */ +int btrunc (bstring b, int n) { + if (n < 0 || b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + if (b->slen > n) { + b->slen = n; + b->data[n] = (unsigned char) '\0'; + } + return BSTR_OK; +} + +#define upcase(c) (toupper ((unsigned char) c)) +#define downcase(c) (tolower ((unsigned char) c)) +#define wspace(c) (isspace ((unsigned char) c)) + +/* int btoupper (bstring b) + * + * Convert contents of bstring to upper case. + */ +int btoupper (bstring b) { +int i, len; + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + for (i=0, len = b->slen; i < len; i++) { + b->data[i] = (unsigned char) upcase (b->data[i]); + } + return BSTR_OK; +} + +/* int btolower (bstring b) + * + * Convert contents of bstring to lower case. + */ +int btolower (bstring b) { +int i, len; + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + for (i=0, len = b->slen; i < len; i++) { + b->data[i] = (unsigned char) downcase (b->data[i]); + } + return BSTR_OK; +} + +/* int bstricmp (const_bstring b0, const_bstring b1) + * + * Compare two strings without differentiating between case. The return + * value is the difference of the values of the characters where the two + * strings first differ after lower case transformation, otherwise 0 is + * returned indicating that the strings are equal. If the lengths are + * different, then a difference from 0 is given, but if the first extra + * character is '\0', then it is taken to be the value UCHAR_MAX+1. + */ +int bstricmp (const_bstring b0, const_bstring b1) { +int i, v, n; + + if (bdata (b0) == NULL || b0->slen < 0 || + bdata (b1) == NULL || b1->slen < 0) return SHRT_MIN; + if ((n = b0->slen) > b1->slen) n = b1->slen; + else if (b0->slen == b1->slen && b0->data == b1->data) return BSTR_OK; + + for (i = 0; i < n; i ++) { + v = (char) downcase (b0->data[i]) + - (char) downcase (b1->data[i]); + if (0 != v) return v; + } + + if (b0->slen > n) { + v = (char) downcase (b0->data[n]); + if (v) return v; + return UCHAR_MAX + 1; + } + if (b1->slen > n) { + v = - (char) downcase (b1->data[n]); + if (v) return v; + return - (int) (UCHAR_MAX + 1); + } + return BSTR_OK; +} + +/* int bstrnicmp (const_bstring b0, const_bstring b1, int n) + * + * Compare two strings without differentiating between case for at most n + * characters. If the position where the two strings first differ is + * before the nth position, the return value is the difference of the values + * of the characters, otherwise 0 is returned. If the lengths are different + * and less than n characters, then a difference from 0 is given, but if the + * first extra character is '\0', then it is taken to be the value + * UCHAR_MAX+1. + */ +int bstrnicmp (const_bstring b0, const_bstring b1, int n) { +int i, v, m; + + if (bdata (b0) == NULL || b0->slen < 0 || + bdata (b1) == NULL || b1->slen < 0 || n < 0) return SHRT_MIN; + m = n; + if (m > b0->slen) m = b0->slen; + if (m > b1->slen) m = b1->slen; + + if (b0->data != b1->data) { + for (i = 0; i < m; i ++) { + v = (char) downcase (b0->data[i]); + v -= (char) downcase (b1->data[i]); + if (v != 0) return b0->data[i] - b1->data[i]; + } + } + + if (n == m || b0->slen == b1->slen) return BSTR_OK; + + if (b0->slen > m) { + v = (char) downcase (b0->data[m]); + if (v) return v; + return UCHAR_MAX + 1; + } + + v = - (char) downcase (b1->data[m]); + if (v) return v; + return - (int) (UCHAR_MAX + 1); +} + +/* int biseqcaselessblk (const_bstring b, const void * blk, int len) + * + * Compare content of b and the array of bytes in blk for length len for + * equality without differentiating between character case. If the content + * differs other than in case, 0 is returned, if, ignoring case, the content + * is the same, 1 is returned, if there is an error, -1 is returned. If the + * length of the strings are different, this function is O(1). '\0' + * characters are not treated in any special way. + */ +int biseqcaselessblk (const_bstring b, const void * blk, int len) { +int i; + + if (bdata (b) == NULL || b->slen < 0 || + blk == NULL || len < 0) return BSTR_ERR; + if (b->slen != len) return 0; + if (len == 0 || b->data == blk) return 1; + for (i=0; i < len; i++) { + if (b->data[i] != ((unsigned char*)blk)[i]) { + unsigned char c = (unsigned char) downcase (b->data[i]); + if (c != (unsigned char) downcase (((unsigned char*)blk)[i])) + return 0; + } + } + return 1; +} + + +/* int biseqcaseless (const_bstring b0, const_bstring b1) + * + * Compare two strings for equality without differentiating between case. + * If the strings differ other than in case, 0 is returned, if the strings + * are the same, 1 is returned, if there is an error, -1 is returned. If + * the length of the strings are different, this function is O(1). '\0' + * termination characters are not treated in any special way. + */ +int biseqcaseless (const_bstring b0, const_bstring b1) { + if (NULL == b1) return BSTR_ERR; + return biseqcaselessblk (b0, b1->data, b1->slen); +} + +/* int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len) + * + * Compare beginning of string b0 with a block of memory of length len + * without differentiating between case for equality. If the beginning of b0 + * differs from the memory block other than in case (or if b0 is too short), + * 0 is returned, if the strings are the same, 1 is returned, if there is an + * error, -1 is returned. '\0' characters are not treated in any special + * way. + */ +int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len) { +int i; + + if (bdata (b0) == NULL || b0->slen < 0 || NULL == blk || len < 0) + return BSTR_ERR; + if (b0->slen < len) return BSTR_OK; + if (b0->data == (const unsigned char *) blk || len == 0) return 1; + + for (i = 0; i < len; i ++) { + if (b0->data[i] != ((const unsigned char *) blk)[i]) { + if (downcase (b0->data[i]) != + downcase (((const unsigned char *) blk)[i])) return 0; + } + } + return 1; +} + +/* + * int bltrimws (bstring b) + * + * Delete whitespace contiguous from the left end of the string. + */ +int bltrimws (bstring b) { +int i, len; + + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + + for (len = b->slen, i = 0; i < len; i++) { + if (!wspace (b->data[i])) { + return bdelete (b, 0, i); + } + } + + b->data[0] = (unsigned char) '\0'; + b->slen = 0; + return BSTR_OK; +} + +/* + * int brtrimws (bstring b) + * + * Delete whitespace contiguous from the right end of the string. + */ +int brtrimws (bstring b) { +int i; + + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + + for (i = b->slen - 1; i >= 0; i--) { + if (!wspace (b->data[i])) { + if (b->mlen > i) b->data[i+1] = (unsigned char) '\0'; + b->slen = i + 1; + return BSTR_OK; + } + } + + b->data[0] = (unsigned char) '\0'; + b->slen = 0; + return BSTR_OK; +} + +/* + * int btrimws (bstring b) + * + * Delete whitespace contiguous from both ends of the string. + */ +int btrimws (bstring b) { +int i, j; + + if (b == NULL || b->data == NULL || b->mlen < b->slen || + b->slen < 0 || b->mlen <= 0) return BSTR_ERR; + + for (i = b->slen - 1; i >= 0; i--) { + if (!wspace (b->data[i])) { + if (b->mlen > i) b->data[i+1] = (unsigned char) '\0'; + b->slen = i + 1; + for (j = 0; wspace (b->data[j]); j++) {} + return bdelete (b, 0, j); + } + } + + b->data[0] = (unsigned char) '\0'; + b->slen = 0; + return BSTR_OK; +} + +/* int biseqblk (const_bstring b, const void * blk, int len) + * + * Compare the string b with the character block blk of length len. If the + * content differs, 0 is returned, if the content is the same, 1 is returned, + * if there is an error, -1 is returned. If the length of the strings are + * different, this function is O(1). '\0' characters are not treated in any + * special way. + */ +int biseqblk (const_bstring b, const void * blk, int len) { + if (len < 0 || b == NULL || blk == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + if (b->slen != len) return 0; + if (len == 0 || b->data == blk) return 1; + return !bstr__memcmp (b->data, blk, len); +} + +/* int biseq (const_bstring b0, const_bstring b1) + * + * Compare the string b0 and b1. If the strings differ, 0 is returned, if + * the strings are the same, 1 is returned, if there is an error, -1 is + * returned. If the length of the strings are different, this function is + * O(1). '\0' termination characters are not treated in any special way. + */ +int biseq (const_bstring b0, const_bstring b1) { + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return BSTR_ERR; + if (b0->slen != b1->slen) return BSTR_OK; + if (b0->data == b1->data || b0->slen == 0) return 1; + return !bstr__memcmp (b0->data, b1->data, b0->slen); +} + +/* int bisstemeqblk (const_bstring b0, const void * blk, int len) + * + * Compare beginning of string b0 with a block of memory of length len for + * equality. If the beginning of b0 differs from the memory block (or if b0 + * is too short), 0 is returned, if the strings are the same, 1 is returned, + * if there is an error, -1 is returned. '\0' characters are not treated in + * any special way. + */ +int bisstemeqblk (const_bstring b0, const void * blk, int len) { +int i; + + if (bdata (b0) == NULL || b0->slen < 0 || NULL == blk || len < 0) + return BSTR_ERR; + if (b0->slen < len) return BSTR_OK; + if (b0->data == (const unsigned char *) blk || len == 0) return 1; + + for (i = 0; i < len; i ++) { + if (b0->data[i] != ((const unsigned char *) blk)[i]) return BSTR_OK; + } + return 1; +} + +/* int biseqcstr (const_bstring b, const char *s) + * + * Compare the bstring b and char * string s. The C string s must be '\0' + * terminated at exactly the length of the bstring b, and the contents + * between the two must be identical with the bstring b with no '\0' + * characters for the two contents to be considered equal. This is + * equivalent to the condition that their current contents will be always be + * equal when comparing them in the same format after converting one or the + * other. If the strings are equal 1 is returned, if they are unequal 0 is + * returned and if there is a detectable error BSTR_ERR is returned. + */ +int biseqcstr (const_bstring b, const char * s) { +int i; + if (b == NULL || s == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + for (i=0; i < b->slen; i++) { + if (s[i] == '\0' || b->data[i] != (unsigned char) s[i]) + return BSTR_OK; + } + return s[i] == '\0'; +} + +/* int biseqcstrcaseless (const_bstring b, const char *s) + * + * Compare the bstring b and char * string s. The C string s must be '\0' + * terminated at exactly the length of the bstring b, and the contents + * between the two must be identical except for case with the bstring b with + * no '\0' characters for the two contents to be considered equal. This is + * equivalent to the condition that their current contents will be always be + * equal ignoring case when comparing them in the same format after + * converting one or the other. If the strings are equal, except for case, + * 1 is returned, if they are unequal regardless of case 0 is returned and + * if there is a detectable error BSTR_ERR is returned. + */ +int biseqcstrcaseless (const_bstring b, const char * s) { +int i; + if (b == NULL || s == NULL || b->data == NULL || b->slen < 0) + return BSTR_ERR; + for (i=0; i < b->slen; i++) { + if (s[i] == '\0' || + (b->data[i] != (unsigned char) s[i] && + downcase (b->data[i]) != (unsigned char) downcase (s[i]))) + return BSTR_OK; + } + return s[i] == '\0'; +} + +/* int bstrcmp (const_bstring b0, const_bstring b1) + * + * Compare the string b0 and b1. If there is an error, SHRT_MIN is returned, + * otherwise a value less than or greater than zero, indicating that the + * string pointed to by b0 is lexicographically less than or greater than + * the string pointed to by b1 is returned. If the the string lengths are + * unequal but the characters up until the length of the shorter are equal + * then a value less than, or greater than zero, indicating that the string + * pointed to by b0 is shorter or longer than the string pointed to by b1 is + * returned. 0 is returned if and only if the two strings are the same. If + * the length of the strings are different, this function is O(n). Like its + * standard C library counter part strcmp, the comparison does not proceed + * past any '\0' termination characters encountered. + */ +int bstrcmp (const_bstring b0, const_bstring b1) { +int i, v, n; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return SHRT_MIN; + n = b0->slen; if (n > b1->slen) n = b1->slen; + if (b0->slen == b1->slen && (b0->data == b1->data || b0->slen == 0)) + return BSTR_OK; + + for (i = 0; i < n; i ++) { + v = ((char) b0->data[i]) - ((char) b1->data[i]); + if (v != 0) return v; + if (b0->data[i] == (unsigned char) '\0') return BSTR_OK; + } + + if (b0->slen > n) return 1; + if (b1->slen > n) return -1; + return BSTR_OK; +} + +/* int bstrncmp (const_bstring b0, const_bstring b1, int n) + * + * Compare the string b0 and b1 for at most n characters. If there is an + * error, SHRT_MIN is returned, otherwise a value is returned as if b0 and + * b1 were first truncated to at most n characters then bstrcmp was called + * with these new strings are paremeters. If the length of the strings are + * different, this function is O(n). Like its standard C library counter + * part strcmp, the comparison does not proceed past any '\0' termination + * characters encountered. + */ +int bstrncmp (const_bstring b0, const_bstring b1, int n) { +int i, v, m; + + if (b0 == NULL || b1 == NULL || b0->data == NULL || b1->data == NULL || + b0->slen < 0 || b1->slen < 0) return SHRT_MIN; + m = n; + if (m > b0->slen) m = b0->slen; + if (m > b1->slen) m = b1->slen; + + if (b0->data != b1->data) { + for (i = 0; i < m; i ++) { + v = ((char) b0->data[i]) - ((char) b1->data[i]); + if (v != 0) return v; + if (b0->data[i] == (unsigned char) '\0') return BSTR_OK; + } + } + + if (n == m || b0->slen == b1->slen) return BSTR_OK; + + if (b0->slen > m) return 1; + return -1; +} + +/* bstring bmidstr (const_bstring b, int left, int len) + * + * Create a bstring which is the substring of b starting from position left + * and running for a length len (clamped by the end of the bstring b.) If + * b is detectably invalid, then NULL is returned. The section described + * by (left, len) is clamped to the boundaries of b. + */ +bstring bmidstr (const_bstring b, int left, int len) { + + if (b == NULL || b->slen < 0 || b->data == NULL) return NULL; + + if (left < 0) { + len += left; + left = 0; + } + + if (len > b->slen - left) len = b->slen - left; + + if (len <= 0) return bfromcstr (""); + return blk2bstr (b->data + left, len); +} + +/* int bdelete (bstring b, int pos, int len) + * + * Removes characters from pos to pos+len-1 inclusive and shifts the tail of + * the bstring starting from pos+len to pos. len must be positive for this + * call to have any effect. The section of the string described by (pos, + * len) is clamped to boundaries of the bstring b. + */ +int bdelete (bstring b, int pos, int len) { + /* Clamp to left side of bstring */ + if (pos < 0) { + len += pos; + pos = 0; + } + + if (len < 0 || b == NULL || b->data == NULL || b->slen < 0 || + b->mlen < b->slen || b->mlen <= 0) + return BSTR_ERR; + if (len > 0 && pos < b->slen) { + if (pos + len >= b->slen) { + b->slen = pos; + } else { + bBlockCopy ((char *) (b->data + pos), + (char *) (b->data + pos + len), + b->slen - (pos+len)); + b->slen -= len; + } + b->data[b->slen] = (unsigned char) '\0'; + } + return BSTR_OK; +} + +/* int bdestroy (bstring b) + * + * Free up the bstring. Note that if b is detectably invalid or not writable + * then no action is performed and BSTR_ERR is returned. Like a freed memory + * allocation, dereferences, writes or any other action on b after it has + * been bdestroyed is undefined. + */ +int bdestroy (bstring b) { + if (b == NULL || b->slen < 0 || b->mlen <= 0 || b->mlen < b->slen || + b->data == NULL) + return BSTR_ERR; + + bstr__free (b->data); + + /* In case there is any stale usage, there is one more chance to + notice this error. */ + + b->slen = -1; + b->mlen = -__LINE__; + b->data = NULL; + + bstr__free (b); + return BSTR_OK; +} + +/* int binstr (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * forward. If it is found then return with the first position where it is + * found, otherwise return BSTR_ERR. Note that this is just a brute force + * string searcher that does not attempt clever things like the Boyer-Moore + * search algorithm. Because of this there are many degenerate cases where + * this can take much longer than it needs to. + */ +int binstr (const_bstring b1, int pos, const_bstring b2) { +int j, ii, ll, lf; +unsigned char * d0; +unsigned char c0; +register unsigned char * d1; +register unsigned char c1; +register int i; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos) return (b2->slen == 0)?pos:BSTR_ERR; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + /* No space to find such a string? */ + if ((lf = b1->slen - b2->slen + 1) <= pos) return BSTR_ERR; + + /* An obvious alias case */ + if (b1->data == b2->data && pos == 0) return 0; + + i = pos; + + d0 = b2->data; + d1 = b1->data; + ll = b2->slen; + + /* Peel off the b2->slen == 1 case */ + c0 = d0[0]; + if (1 == ll) { + for (;i < lf; i++) if (c0 == d1[i]) return i; + return BSTR_ERR; + } + + c1 = c0; + j = 0; + lf = b1->slen - 1; + + ii = -1; + if (i < lf) do { + /* Unrolled current character test */ + if (c1 != d1[i]) { + if (c1 != d1[1+i]) { + i += 2; + continue; + } + i++; + } + + /* Take note if this is the start of a potential match */ + if (0 == j) ii = i; + + /* Shift the test character down by one */ + j++; + i++; + + /* If this isn't past the last character continue */ + if (j < ll) { + c1 = d0[j]; + continue; + } + + N0:; + + /* If no characters mismatched, then we matched */ + if (i == ii+j) return ii; + + /* Shift back to the beginning */ + i -= j; + j = 0; + c1 = c0; + } while (i < lf); + + /* Deal with last case if unrolling caused a misalignment */ + if (i == lf && ll == j+1 && c1 == d1[i]) goto N0; + + return BSTR_ERR; +} + +/* int binstrr (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * backward. If it is found then return with the first position where it is + * found, otherwise return BSTR_ERR. Note that this is just a brute force + * string searcher that does not attempt clever things like the Boyer-Moore + * search algorithm. Because of this there are many degenerate cases where + * this can take much longer than it needs to. + */ +int binstrr (const_bstring b1, int pos, const_bstring b2) { +int j, i, l; +unsigned char * d0, * d1; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos && b2->slen == 0) return pos; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + /* Obvious alias case */ + if (b1->data == b2->data && pos == 0 && b2->slen <= b1->slen) return 0; + + i = pos; + if ((l = b1->slen - b2->slen) < 0) return BSTR_ERR; + + /* If no space to find such a string then snap back */ + if (l + 1 <= i) i = l; + j = 0; + + d0 = b2->data; + d1 = b1->data; + l = b2->slen; + + for (;;) { + if (d0[j] == d1[i + j]) { + j ++; + if (j >= l) return i; + } else { + i --; + if (i < 0) break; + j=0; + } + } + + return BSTR_ERR; +} + +/* int binstrcaseless (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * forward but without regard to case. If it is found then return with the + * first position where it is found, otherwise return BSTR_ERR. Note that + * this is just a brute force string searcher that does not attempt clever + * things like the Boyer-Moore search algorithm. Because of this there are + * many degenerate cases where this can take much longer than it needs to. + */ +int binstrcaseless (const_bstring b1, int pos, const_bstring b2) { +int j, i, l, ll; +unsigned char * d0, * d1; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos) return (b2->slen == 0)?pos:BSTR_ERR; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + l = b1->slen - b2->slen + 1; + + /* No space to find such a string? */ + if (l <= pos) return BSTR_ERR; + + /* An obvious alias case */ + if (b1->data == b2->data && pos == 0) return BSTR_OK; + + i = pos; + j = 0; + + d0 = b2->data; + d1 = b1->data; + ll = b2->slen; + + for (;;) { + if (d0[j] == d1[i + j] || downcase (d0[j]) == downcase (d1[i + j])) { + j ++; + if (j >= ll) return i; + } else { + i ++; + if (i >= l) break; + j=0; + } + } + + return BSTR_ERR; +} + +/* int binstrrcaseless (const_bstring b1, int pos, const_bstring b2) + * + * Search for the bstring b2 in b1 starting from position pos, and searching + * backward but without regard to case. If it is found then return with the + * first position where it is found, otherwise return BSTR_ERR. Note that + * this is just a brute force string searcher that does not attempt clever + * things like the Boyer-Moore search algorithm. Because of this there are + * many degenerate cases where this can take much longer than it needs to. + */ +int binstrrcaseless (const_bstring b1, int pos, const_bstring b2) { +int j, i, l; +unsigned char * d0, * d1; + + if (b1 == NULL || b1->data == NULL || b1->slen < 0 || + b2 == NULL || b2->data == NULL || b2->slen < 0) return BSTR_ERR; + if (b1->slen == pos && b2->slen == 0) return pos; + if (b1->slen < pos || pos < 0) return BSTR_ERR; + if (b2->slen == 0) return pos; + + /* Obvious alias case */ + if (b1->data == b2->data && pos == 0 && b2->slen <= b1->slen) + return BSTR_OK; + + i = pos; + if ((l = b1->slen - b2->slen) < 0) return BSTR_ERR; + + /* If no space to find such a string then snap back */ + if (l + 1 <= i) i = l; + j = 0; + + d0 = b2->data; + d1 = b1->data; + l = b2->slen; + + for (;;) { + if (d0[j] == d1[i + j] || downcase (d0[j]) == downcase (d1[i + j])) { + j ++; + if (j >= l) return i; + } else { + i --; + if (i < 0) break; + j=0; + } + } + + return BSTR_ERR; +} + + +/* int bstrchrp (const_bstring b, int c, int pos) + * + * Search for the character c in b forwards from the position pos + * (inclusive). + */ +int bstrchrp (const_bstring b, int c, int pos) { +unsigned char * p; + + if (b == NULL || b->data == NULL || b->slen <= pos || pos < 0) + return BSTR_ERR; + p = (unsigned char *) bstr__memchr ((b->data + pos), (unsigned char) c, + (b->slen - pos)); + if (p) return (int) (p - b->data); + return BSTR_ERR; +} + +/* int bstrrchrp (const_bstring b, int c, int pos) + * + * Search for the character c in b backwards from the position pos in string + * (inclusive). + */ +int bstrrchrp (const_bstring b, int c, int pos) { +int i; + + if (b == NULL || b->data == NULL || b->slen <= pos || pos < 0) + return BSTR_ERR; + for (i=pos; i >= 0; i--) { + if (b->data[i] == (unsigned char) c) return i; + } + return BSTR_ERR; +} + +#if !defined (BSTRLIB_AGGRESSIVE_MEMORY_FOR_SPEED_TRADEOFF) +#define LONG_LOG_BITS_QTY (3) +#define LONG_BITS_QTY (1 << LONG_LOG_BITS_QTY) +#define LONG_TYPE unsigned char + +#define CFCLEN ((1 << CHAR_BIT) / LONG_BITS_QTY) +struct charField { LONG_TYPE content[CFCLEN]; }; +#define testInCharField(cf,c) ((cf)->content[(c) >> LONG_LOG_BITS_QTY] & \ + (((long)1) << ((c) & (LONG_BITS_QTY-1)))) +#define setInCharField(cf,idx) { \ + unsigned int c = (unsigned int) (idx); \ + (cf)->content[c >> LONG_LOG_BITS_QTY] |= \ + (LONG_TYPE) (1ul << (c & (LONG_BITS_QTY-1))); \ +} + +#else + +#define CFCLEN (1 << CHAR_BIT) +struct charField { unsigned char content[CFCLEN]; }; +#define testInCharField(cf,c) ((cf)->content[(unsigned char) (c)]) +#define setInCharField(cf,idx) (cf)->content[(unsigned int) (idx)] = ~0 + +#endif + +/* Convert a bstring to charField */ +static int buildCharField (struct charField * cf, const_bstring b) { +int i; + if (b == NULL || b->data == NULL || b->slen <= 0) return BSTR_ERR; + memset ((void *) cf->content, 0, sizeof (struct charField)); + for (i=0; i < b->slen; i++) { + setInCharField (cf, b->data[i]); + } + return BSTR_OK; +} + +static void invertCharField (struct charField * cf) { +int i; + for (i=0; i < CFCLEN; i++) cf->content[i] = ~cf->content[i]; +} + +/* Inner engine for binchr */ +static int binchrCF (const unsigned char * data, int len, int pos, + const struct charField * cf) { +int i; + for (i=pos; i < len; i++) { + unsigned char c = (unsigned char) data[i]; + if (testInCharField (cf, c)) return i; + } + return BSTR_ERR; +} + +/* int binchr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the first position in b0 starting from pos or after, in which + * one of the characters in b1 is found and return it. If such a position + * does not exist in b0, then BSTR_ERR is returned. + */ +int binchr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen <= pos) return BSTR_ERR; + if (1 == b1->slen) return bstrchrp (b0, b1->data[0], pos); + if (0 > buildCharField (&chrs, b1)) return BSTR_ERR; + return binchrCF (b0->data, b0->slen, pos, &chrs); +} + +/* Inner engine for binchrr */ +static int binchrrCF (const unsigned char * data, int pos, + const struct charField * cf) { +int i; + for (i=pos; i >= 0; i--) { + unsigned int c = (unsigned int) data[i]; + if (testInCharField (cf, c)) return i; + } + return BSTR_ERR; +} + +/* int binchrr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the last position in b0 no greater than pos, in which one of + * the characters in b1 is found and return it. If such a position does not + * exist in b0, then BSTR_ERR is returned. + */ +int binchrr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || b1 == NULL || + b0->slen < pos) return BSTR_ERR; + if (pos == b0->slen) pos--; + if (1 == b1->slen) return bstrrchrp (b0, b1->data[0], pos); + if (0 > buildCharField (&chrs, b1)) return BSTR_ERR; + return binchrrCF (b0->data, pos, &chrs); +} + +/* int bninchr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the first position in b0 starting from pos or after, in which + * none of the characters in b1 is found and return it. If such a position + * does not exist in b0, then BSTR_ERR is returned. + */ +int bninchr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen <= pos) return BSTR_ERR; + if (buildCharField (&chrs, b1) < 0) return BSTR_ERR; + invertCharField (&chrs); + return binchrCF (b0->data, b0->slen, pos, &chrs); +} + +/* int bninchrr (const_bstring b0, int pos, const_bstring b1); + * + * Search for the last position in b0 no greater than pos, in which none of + * the characters in b1 is found and return it. If such a position does not + * exist in b0, then BSTR_ERR is returned. + */ +int bninchrr (const_bstring b0, int pos, const_bstring b1) { +struct charField chrs; + if (pos < 0 || b0 == NULL || b0->data == NULL || + b0->slen < pos) return BSTR_ERR; + if (pos == b0->slen) pos--; + if (buildCharField (&chrs, b1) < 0) return BSTR_ERR; + invertCharField (&chrs); + return binchrrCF (b0->data, pos, &chrs); +} + +/* int bsetstr (bstring b0, int pos, bstring b1, unsigned char fill) + * + * Overwrite the string b0 starting at position pos with the string b1. If + * the position pos is past the end of b0, then the character "fill" is + * appended as necessary to make up the gap between the end of b0 and pos. + * If b1 is NULL, it behaves as if it were a 0-length string. + */ +int bsetstr (bstring b0, int pos, const_bstring b1, unsigned char fill) { +int d, newlen; +ptrdiff_t pd; +bstring aux = (bstring) b1; + + if (pos < 0 || b0 == NULL || b0->slen < 0 || NULL == b0->data || + b0->mlen < b0->slen || b0->mlen <= 0) return BSTR_ERR; + if (b1 != NULL && (b1->slen < 0 || b1->data == NULL)) return BSTR_ERR; + + d = pos; + + /* Aliasing case */ + if (NULL != aux) { + if ((pd = (ptrdiff_t) (b1->data - b0->data)) >= 0 && + pd < (ptrdiff_t) b0->mlen) { + if (NULL == (aux = bstrcpy (b1))) return BSTR_ERR; + } + d += aux->slen; + } + + /* Increase memory size if necessary */ + if (balloc (b0, d + 1) != BSTR_OK) { + if (aux != b1) bdestroy (aux); + return BSTR_ERR; + } + + newlen = b0->slen; + + /* Fill in "fill" character as necessary */ + if (pos > newlen) { + bstr__memset (b0->data + b0->slen, (int) fill, + (size_t) (pos - b0->slen)); + newlen = pos; + } + + /* Copy b1 to position pos in b0. */ + if (aux != NULL) { + bBlockCopy ((char *) (b0->data + pos), (char *) aux->data, aux->slen); + if (aux != b1) bdestroy (aux); + } + + /* Indicate the potentially increased size of b0 */ + if (d > newlen) newlen = d; + + b0->slen = newlen; + b0->data[newlen] = (unsigned char) '\0'; + + return BSTR_OK; +} + +/* int binsertblk (bstring b, int pos, const void * blk, int len, + * unsigned char fill) + * + * Inserts the block of characters at blk with length len into b at position + * pos. If the position pos is past the end of b, then the character "fill" + * is appended as necessary to make up the gap between the end of b1 and pos. + * Unlike bsetstr, binsert does not allow b2 to be NULL. + */ +int binsertblk (bstring b, int pos, const void * blk, int len, + unsigned char fill) { +int d, l; +unsigned char* aux = (unsigned char*) blk; + + if (b == NULL || blk == NULL || pos < 0 || len < 0 || b->slen < 0 || + b->mlen <= 0 || b->mlen < b->slen) return BSTR_ERR; + + /* Compute the two possible end pointers */ + d = b->slen + len; + l = pos + len; + if ((d|l) < 0) return BSTR_ERR; /* Integer wrap around. */ + + /* Aliasing case */ + if (((size_t) ((unsigned char*) blk + len)) >= ((size_t) b->data) && + ((size_t) blk) < ((size_t) (b->data + b->mlen))) { + if (NULL == (aux = (unsigned char*) bstr__alloc (len))) + return BSTR_ERR; + bstr__memcpy (aux, blk, len); + } + + if (l > d) { + /* Inserting past the end of the string */ + if (balloc (b, l + 1) != BSTR_OK) { + if (aux != (unsigned char*) blk) bstr__free (aux); + return BSTR_ERR; + } + bstr__memset (b->data + b->slen, (int) fill, + (size_t) (pos - b->slen)); + b->slen = l; + } else { + /* Inserting in the middle of the string */ + if (balloc (b, d + 1) != BSTR_OK) { + if (aux != (unsigned char*) blk) bstr__free (aux); + return BSTR_ERR; + } + bBlockCopy (b->data + l, b->data + pos, d - l); + b->slen = d; + } + bBlockCopy (b->data + pos, aux, len); + b->data[b->slen] = (unsigned char) '\0'; + if (aux != (unsigned char*) blk) bstr__free (aux); + return BSTR_OK; +} + +/* int binsert (bstring b1, int pos, const_bstring b2, unsigned char fill) + * + * Inserts the string b2 into b1 at position pos. If the position pos is + * past the end of b1, then the character "fill" is appended as necessary to + * make up the gap between the end of b1 and pos. Unlike bsetstr, binsert + * does not allow b2 to be NULL. + */ +int binsert (bstring b1, int pos, const_bstring b2, unsigned char fill) { + if (NULL == b2 || (b2->mlen > 0 && b2->slen > b2->mlen)) return BSTR_ERR; + return binsertblk (b1, pos, b2->data, b2->slen, fill); +} + +/* int breplace (bstring b1, int pos, int len, bstring b2, + * unsigned char fill) + * + * Replace a section of a string from pos for a length len with the string + * b2. fill is used is pos > b1->slen. + */ +int breplace (bstring b1, int pos, int len, const_bstring b2, + unsigned char fill) { +int pl, ret; +ptrdiff_t pd; +bstring aux = (bstring) b2; + + if (pos < 0 || len < 0) return BSTR_ERR; + if (pos > INT_MAX - len) return BSTR_ERR; /* Overflow */ + pl = pos + len; + if (b1 == NULL || b2 == NULL || b1->data == NULL || b2->data == NULL || + b1->slen < 0 || b2->slen < 0 || b1->mlen < b1->slen || + b1->mlen <= 0) return BSTR_ERR; + + /* Straddles the end? */ + if (pl >= b1->slen) { + if ((ret = bsetstr (b1, pos, b2, fill)) < 0) return ret; + if (pos + b2->slen < b1->slen) { + b1->slen = pos + b2->slen; + b1->data[b1->slen] = (unsigned char) '\0'; + } + return ret; + } + + /* Aliasing case */ + if ((pd = (ptrdiff_t) (b2->data - b1->data)) >= 0 && + pd < (ptrdiff_t) b1->slen) { + if (NULL == (aux = bstrcpy (b2))) return BSTR_ERR; + } + + if (aux->slen > len) { + if (balloc (b1, b1->slen + aux->slen - len) != BSTR_OK) { + if (aux != b2) bdestroy (aux); + return BSTR_ERR; + } + } + + if (aux->slen != len) bstr__memmove (b1->data + pos + aux->slen, + b1->data + pos + len, + b1->slen - (pos + len)); + bstr__memcpy (b1->data + pos, aux->data, aux->slen); + b1->slen += aux->slen - len; + b1->data[b1->slen] = (unsigned char) '\0'; + if (aux != b2) bdestroy (aux); + return BSTR_OK; +} + +/* + * findreplaceengine is used to implement bfindreplace and + * bfindreplacecaseless. It works by breaking the three cases of + * expansion, reduction and replacement, and solving each of these + * in the most efficient way possible. + */ + +typedef int (*instr_fnptr) (const_bstring s1, int pos, const_bstring s2); + +#define INITIAL_STATIC_FIND_INDEX_COUNT 32 + +static int findreplaceengine (bstring b, const_bstring find, + const_bstring repl, int pos, + instr_fnptr instr) { +int i, ret, slen, mlen, delta, acc; +int * d; +int static_d[INITIAL_STATIC_FIND_INDEX_COUNT+1]; /* This +1 is for LINT. */ +ptrdiff_t pd; +bstring auxf = (bstring) find; +bstring auxr = (bstring) repl; + + if (b == NULL || b->data == NULL || find == NULL || + find->data == NULL || repl == NULL || repl->data == NULL || + pos < 0 || find->slen <= 0 || b->mlen <= 0 || b->slen > b->mlen || + b->slen < 0 || repl->slen < 0) return BSTR_ERR; + if (pos > b->slen - find->slen) return BSTR_OK; + + /* Alias with find string */ + pd = (ptrdiff_t) (find->data - b->data); + if ((ptrdiff_t) (pos - find->slen) < pd && pd < (ptrdiff_t) b->slen) { + if (NULL == (auxf = bstrcpy (find))) return BSTR_ERR; + } + + /* Alias with repl string */ + pd = (ptrdiff_t) (repl->data - b->data); + if ((ptrdiff_t) (pos - repl->slen) < pd && pd < (ptrdiff_t) b->slen) { + if (NULL == (auxr = bstrcpy (repl))) { + if (auxf != find) bdestroy (auxf); + return BSTR_ERR; + } + } + + delta = auxf->slen - auxr->slen; + + /* in-place replacement since find and replace strings are of equal + length */ + if (delta == 0) { + while ((pos = instr (b, pos, auxf)) >= 0) { + bstr__memcpy (b->data + pos, auxr->data, auxr->slen); + pos += auxf->slen; + } + if (auxf != find) bdestroy (auxf); + if (auxr != repl) bdestroy (auxr); + return BSTR_OK; + } + + /* shrinking replacement since auxf->slen > auxr->slen */ + if (delta > 0) { + acc = 0; + + while ((i = instr (b, pos, auxf)) >= 0) { + if (acc && i > pos) + bstr__memmove (b->data + pos - acc, b->data + pos, i - pos); + if (auxr->slen) + bstr__memcpy (b->data + i - acc, auxr->data, auxr->slen); + acc += delta; + pos = i + auxf->slen; + } + + if (acc) { + i = b->slen; + if (i > pos) + bstr__memmove (b->data + pos - acc, b->data + pos, i - pos); + b->slen -= acc; + b->data[b->slen] = (unsigned char) '\0'; + } + + if (auxf != find) bdestroy (auxf); + if (auxr != repl) bdestroy (auxr); + return BSTR_OK; + } + + /* expanding replacement since find->slen < repl->slen. Its a lot + more complicated. This works by first finding all the matches and + storing them to a growable array, then doing at most one resize of + the destination bstring and then performing the direct memory transfers + of the string segment pieces to form the final result. The growable + array of matches uses a deferred doubling reallocing strategy. What + this means is that it starts as a reasonably fixed sized auto array in + the hopes that many if not most cases will never need to grow this + array. But it switches as soon as the bounds of the array will be + exceeded. An extra find result is always appended to this array that + corresponds to the end of the destination string, so slen is checked + against mlen - 1 rather than mlen before resizing. + */ + + mlen = INITIAL_STATIC_FIND_INDEX_COUNT; + d = (int *) static_d; /* Avoid malloc for trivial/initial cases */ + acc = slen = 0; + + while ((pos = instr (b, pos, auxf)) >= 0) { + if (slen >= mlen - 1) { + int *t; + int sl; + /* Overflow */ + if (mlen > (INT_MAX / sizeof(int *)) / 2) { + ret = BSTR_ERR; + goto done; + } + mlen += mlen; + sl = sizeof (int *) * mlen; + if (static_d == d) d = NULL; /* static_d cannot be realloced */ + if (NULL == (t = (int *) bstr__realloc (d, sl))) { + ret = BSTR_ERR; + goto done; + } + if (NULL == d) bstr__memcpy (t, static_d, sizeof (static_d)); + d = t; + } + d[slen] = pos; + slen++; + acc -= delta; + pos += auxf->slen; + if (pos < 0 || acc < 0) { + ret = BSTR_ERR; + goto done; + } + } + + /* slen <= INITIAL_STATIC_INDEX_COUNT-1 or mlen-1 here. */ + d[slen] = b->slen; + + if (BSTR_OK == (ret = balloc (b, b->slen + acc + 1))) { + b->slen += acc; + for (i = slen-1; i >= 0; i--) { + int s, l; + s = d[i] + auxf->slen; + l = d[i+1] - s; /* d[slen] may be accessed here. */ + if (l) { + bstr__memmove (b->data + s + acc, b->data + s, l); + } + if (auxr->slen) { + bstr__memmove (b->data + s + acc - auxr->slen, + auxr->data, auxr->slen); + } + acc += delta; + } + b->data[b->slen] = (unsigned char) '\0'; + } + + done:; + if (static_d != d) bstr__free (d); + if (auxf != find) bdestroy (auxf); + if (auxr != repl) bdestroy (auxr); + return ret; +} + +/* int bfindreplace (bstring b, const_bstring find, const_bstring repl, + * int pos) + * + * Replace all occurrences of a find string with a replace string after a + * given point in a bstring. + */ +int bfindreplace (bstring b, const_bstring find, const_bstring repl, + int pos) { + return findreplaceengine (b, find, repl, pos, binstr); +} + +/* int bfindreplacecaseless (bstring b, const_bstring find, + * const_bstring repl, int pos) + * + * Replace all occurrences of a find string, ignoring case, with a replace + * string after a given point in a bstring. + */ +int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, + int pos) { + return findreplaceengine (b, find, repl, pos, binstrcaseless); +} + +/* int binsertch (bstring b, int pos, int len, unsigned char fill) + * + * Inserts the character fill repeatedly into b at position pos for a + * length len. If the position pos is past the end of b, then the + * character "fill" is appended as necessary to make up the gap between the + * end of b and the position pos + len. + */ +int binsertch (bstring b, int pos, int len, unsigned char fill) { +int d, l, i; + + if (pos < 0 || b == NULL || b->slen < 0 || b->mlen < b->slen || + b->mlen <= 0 || len < 0) return BSTR_ERR; + + /* Compute the two possible end pointers */ + d = b->slen + len; + l = pos + len; + if ((d|l) < 0) return BSTR_ERR; + + if (l > d) { + /* Inserting past the end of the string */ + if (balloc (b, l + 1) != BSTR_OK) return BSTR_ERR; + pos = b->slen; + b->slen = l; + } else { + /* Inserting in the middle of the string */ + if (balloc (b, d + 1) != BSTR_OK) return BSTR_ERR; + for (i = d - 1; i >= l; i--) { + b->data[i] = b->data[i - len]; + } + b->slen = d; + } + + for (i=pos; i < l; i++) b->data[i] = fill; + b->data[b->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bpattern (bstring b, int len) + * + * Replicate the bstring, b in place, end to end repeatedly until it + * surpasses len characters, then chop the result to exactly len characters. + * This function operates in-place. The function will return with BSTR_ERR + * if b is NULL or of length 0, otherwise BSTR_OK is returned. + */ +int bpattern (bstring b, int len) { +int i, d; + + d = blength (b); + if (d <= 0 || len < 0 || balloc (b, len + 1) != BSTR_OK) return BSTR_ERR; + if (len > 0) { + if (d == 1) return bsetstr (b, len, NULL, b->data[0]); + for (i = d; i < len; i++) b->data[i] = b->data[i - d]; + } + b->data[len] = (unsigned char) '\0'; + b->slen = len; + return BSTR_OK; +} + +#define BS_BUFF_SZ (1024) + +/* int breada (bstring b, bNread readPtr, void * parm) + * + * Use a finite buffer fread-like function readPtr to concatenate to the + * bstring b the entire contents of file-like source data in a roughly + * efficient way. + */ +int breada (bstring b, bNread readPtr, void * parm) { +int i, l, n; + + if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || + readPtr == NULL) return BSTR_ERR; + + i = b->slen; + for (n=i+16; ; n += ((n < BS_BUFF_SZ) ? n : BS_BUFF_SZ)) { + if (BSTR_OK != balloc (b, n + 1)) return BSTR_ERR; + l = (int) readPtr ((void *) (b->data + i), 1, n - i, parm); + i += l; + b->slen = i; + if (i < n) break; + } + + b->data[i] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* bstring bread (bNread readPtr, void * parm) + * + * Use a finite buffer fread-like function readPtr to create a bstring + * filled with the entire contents of file-like source data in a roughly + * efficient way. + */ +bstring bread (bNread readPtr, void * parm) { +bstring buff; + + if (0 > breada (buff = bfromcstr (""), readPtr, parm)) { + bdestroy (buff); + return NULL; + } + return buff; +} + +/* int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator) + * + * Use an fgetc-like single character stream reading function (getcPtr) to + * obtain a sequence of characters which are concatenated to the end of the + * bstring b. The stream read is terminated by the passed in terminator + * parameter. + * + * If getcPtr returns with a negative number, or the terminator character + * (which is appended) is read, then the stream reading is halted and the + * function returns with a partial result in b. If there is an empty partial + * result, 1 is returned. If no characters are read, or there is some other + * detectable error, BSTR_ERR is returned. + */ +int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator) { +int c, d, e; + + if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || + getcPtr == NULL) return BSTR_ERR; + d = 0; + e = b->mlen - 2; + + while ((c = getcPtr (parm)) >= 0) { + if (d > e) { + b->slen = d; + if (balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; + e = b->mlen - 2; + } + b->data[d] = (unsigned char) c; + d++; + if (c == terminator) break; + } + + b->data[d] = (unsigned char) '\0'; + b->slen = d; + + return d == 0 && c < 0; +} + +/* int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator) + * + * Use an fgetc-like single character stream reading function (getcPtr) to + * obtain a sequence of characters which are concatenated to the end of the + * bstring b. The stream read is terminated by the passed in terminator + * parameter. + * + * If getcPtr returns with a negative number, or the terminator character + * (which is appended) is read, then the stream reading is halted and the + * function returns with a partial result concatentated to b. If there is + * an empty partial result, 1 is returned. If no characters are read, or + * there is some other detectable error, BSTR_ERR is returned. + */ +int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator) { +int c, d, e; + + if (b == NULL || b->mlen <= 0 || b->slen < 0 || b->mlen < b->slen || + getcPtr == NULL) return BSTR_ERR; + d = b->slen; + e = b->mlen - 2; + + while ((c = getcPtr (parm)) >= 0) { + if (d > e) { + b->slen = d; + if (balloc (b, d + 2) != BSTR_OK) return BSTR_ERR; + e = b->mlen - 2; + } + b->data[d] = (unsigned char) c; + d++; + if (c == terminator) break; + } + + b->data[d] = (unsigned char) '\0'; + b->slen = d; + + return d == 0 && c < 0; +} + +/* bstring bgets (bNgetc getcPtr, void * parm, char terminator) + * + * Use an fgetc-like single character stream reading function (getcPtr) to + * obtain a sequence of characters which are concatenated into a bstring. + * The stream read is terminated by the passed in terminator function. + * + * If getcPtr returns with a negative number, or the terminator character + * (which is appended) is read, then the stream reading is halted and the + * result obtained thus far is returned. If no characters are read, or + * there is some other detectable error, NULL is returned. + */ +bstring bgets (bNgetc getcPtr, void * parm, char terminator) { +bstring buff; + + if (0 > bgetsa (buff = bfromcstr (""), getcPtr, parm, terminator) || + 0 >= buff->slen) { + bdestroy (buff); + buff = NULL; + } + return buff; +} + +struct bStream { + bstring buff; /* Buffer for over-reads */ + void * parm; /* The stream handle for core stream */ + bNread readFnPtr; /* fread compatible fnptr for core stream */ + int isEOF; /* track file's EOF state */ + int maxBuffSz; +}; + +/* struct bStream * bsopen (bNread readPtr, void * parm) + * + * Wrap a given open stream (described by a fread compatible function + * pointer and stream handle) into an open bStream suitable for the bstring + * library streaming functions. + */ +struct bStream * bsopen (bNread readPtr, void * parm) { +struct bStream * s; + + if (readPtr == NULL) return NULL; + s = (struct bStream *) bstr__alloc (sizeof (struct bStream)); + if (s == NULL) return NULL; + s->parm = parm; + s->buff = bfromcstr (""); + s->readFnPtr = readPtr; + s->maxBuffSz = BS_BUFF_SZ; + s->isEOF = 0; + return s; +} + +/* int bsbufflength (struct bStream * s, int sz) + * + * Set the length of the buffer used by the bStream. If sz is zero, the + * length is not set. This function returns with the previous length. + */ +int bsbufflength (struct bStream * s, int sz) { +int oldSz; + if (s == NULL || sz < 0) return BSTR_ERR; + oldSz = s->maxBuffSz; + if (sz > 0) s->maxBuffSz = sz; + return oldSz; +} + +int bseof (const struct bStream * s) { + if (s == NULL || s->readFnPtr == NULL) return BSTR_ERR; + return s->isEOF && (s->buff->slen == 0); +} + +/* void * bsclose (struct bStream * s) + * + * Close the bStream, and return the handle to the stream that was originally + * used to open the given stream. + */ +void * bsclose (struct bStream * s) { +void * parm; + if (s == NULL) return NULL; + s->readFnPtr = NULL; + if (s->buff) bdestroy (s->buff); + s->buff = NULL; + parm = s->parm; + s->parm = NULL; + s->isEOF = 1; + bstr__free (s); + return parm; +} + +/* int bsreadlna (bstring r, struct bStream * s, char terminator) + * + * Read a bstring terminated by the terminator character or the end of the + * stream from the bStream (s) and return it into the parameter r. This + * function may read additional characters from the core stream that are not + * returned, but will be retained for subsequent read operations. + */ +int bsreadlna (bstring r, struct bStream * s, char terminator) { +int i, l, ret, rlo; +char * b; +struct tagbstring x; + + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 || + r->slen < 0 || r->mlen < r->slen) return BSTR_ERR; + l = s->buff->slen; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) s->buff->data; + x.data = (unsigned char *) b; + + /* First check if the current buffer holds the terminator */ + b[l] = terminator; /* Set sentinel */ + for (i=0; b[i] != terminator; i++) ; + if (i < l) { + x.slen = i + 1; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, i + 1); + return BSTR_OK; + } + + rlo = r->slen; + + /* If not then just concatenate the entire buffer to the output */ + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) return BSTR_ERR; + + /* Perform direct in-place reads into the destination to allow for + the minimum of data-copies */ + for (;;) { + if (BSTR_OK != balloc (r, r->slen + s->maxBuffSz + 1)) + return BSTR_ERR; + b = (char *) (r->data + r->slen); + l = (int) s->readFnPtr (b, 1, s->maxBuffSz, s->parm); + if (l <= 0) { + r->data[r->slen] = (unsigned char) '\0'; + s->buff->slen = 0; + s->isEOF = 1; + /* If nothing was read return with an error message */ + return BSTR_ERR & -(r->slen == rlo); + } + b[l] = terminator; /* Set sentinel */ + for (i=0; b[i] != terminator; i++) ; + if (i < l) break; + r->slen += l; + } + + /* Terminator found, push over-read back to buffer */ + i++; + r->slen += i; + s->buff->slen = l - i; + bstr__memcpy (s->buff->data, b + i, l - i); + r->data[r->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bsreadlnsa (bstring r, struct bStream * s, bstring term) + * + * Read a bstring terminated by any character in the term string or the end + * of the stream from the bStream (s) and return it into the parameter r. + * This function may read additional characters from the core stream that + * are not returned, but will be retained for subsequent read operations. + */ +int bsreadlnsa (bstring r, struct bStream * s, const_bstring term) { +int i, l, ret, rlo; +unsigned char * b; +struct tagbstring x; +struct charField cf; + + if (s == NULL || s->buff == NULL || r == NULL || term == NULL || + term->data == NULL || r->mlen <= 0 || r->slen < 0 || + r->mlen < r->slen) return BSTR_ERR; + if (term->slen == 1) return bsreadlna (r, s, term->data[0]); + if (term->slen < 1 || buildCharField (&cf, term)) return BSTR_ERR; + + l = s->buff->slen; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (unsigned char *) s->buff->data; + x.data = b; + + /* First check if the current buffer holds the terminator */ + b[l] = term->data[0]; /* Set sentinel */ + for (i=0; !testInCharField (&cf, b[i]); i++) ; + if (i < l) { + x.slen = i + 1; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, i + 1); + return BSTR_OK; + } + + rlo = r->slen; + + /* If not then just concatenate the entire buffer to the output */ + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) return BSTR_ERR; + + /* Perform direct in-place reads into the destination to allow for + the minimum of data-copies */ + for (;;) { + if (BSTR_OK != balloc (r, r->slen + s->maxBuffSz + 1)) + return BSTR_ERR; + b = (unsigned char *) (r->data + r->slen); + l = (int) s->readFnPtr (b, 1, s->maxBuffSz, s->parm); + if (l <= 0) { + r->data[r->slen] = (unsigned char) '\0'; + s->buff->slen = 0; + s->isEOF = 1; + /* If nothing was read return with an error message */ + return BSTR_ERR & -(r->slen == rlo); + } + + b[l] = term->data[0]; /* Set sentinel */ + for (i=0; !testInCharField (&cf, b[i]); i++) ; + if (i < l) break; + r->slen += l; + } + + /* Terminator found, push over-read back to buffer */ + i++; + r->slen += i; + s->buff->slen = l - i; + bstr__memcpy (s->buff->data, b + i, l - i); + r->data[r->slen] = (unsigned char) '\0'; + return BSTR_OK; +} + +/* int bsreada (bstring r, struct bStream * s, int n) + * + * Read a bstring of length n (or, if it is fewer, as many bytes as is + * remaining) from the bStream. This function may read additional + * characters from the core stream that are not returned, but will be + * retained for subsequent read operations. This function will not read + * additional characters from the core stream beyond virtual stream pointer. + */ +int bsreada (bstring r, struct bStream * s, int n) { +int l, ret, orslen; +char * b; +struct tagbstring x; + + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 + || r->slen < 0 || r->mlen < r->slen || n <= 0) return BSTR_ERR; + + if (n > INT_MAX - r->slen) return BSTR_ERR; + n += r->slen; + + l = s->buff->slen; + + orslen = r->slen; + + if (0 == l) { + if (s->isEOF) return BSTR_ERR; + if (r->mlen > n) { + l = (int) s->readFnPtr (r->data + r->slen, 1, n - r->slen, + s->parm); + if (0 >= l || l > n - r->slen) { + s->isEOF = 1; + return BSTR_ERR; + } + r->slen += l; + r->data[r->slen] = (unsigned char) '\0'; + return 0; + } + } + + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + b = (char *) s->buff->data; + x.data = (unsigned char *) b; + + do { + if (l + r->slen >= n) { + x.slen = n - r->slen; + ret = bconcat (r, &x); + s->buff->slen = l; + if (BSTR_OK == ret) bdelete (s->buff, 0, x.slen); + return BSTR_ERR & -(r->slen == orslen); + } + + x.slen = l; + if (BSTR_OK != bconcat (r, &x)) break; + + l = n - r->slen; + if (l > s->maxBuffSz) l = s->maxBuffSz; + + l = (int) s->readFnPtr (b, 1, l, s->parm); + + } while (l > 0); + if (l < 0) l = 0; + if (l == 0) s->isEOF = 1; + s->buff->slen = l; + return BSTR_ERR & -(r->slen == orslen); +} + +/* int bsreadln (bstring r, struct bStream * s, char terminator) + * + * Read a bstring terminated by the terminator character or the end of the + * stream from the bStream (s) and return it into the parameter r. This + * function may read additional characters from the core stream that are not + * returned, but will be retained for subsequent read operations. + */ +int bsreadln (bstring r, struct bStream * s, char terminator) { + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0) + return BSTR_ERR; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + r->slen = 0; + return bsreadlna (r, s, terminator); +} + +/* int bsreadlns (bstring r, struct bStream * s, bstring term) + * + * Read a bstring terminated by any character in the term string or the end + * of the stream from the bStream (s) and return it into the parameter r. + * This function may read additional characters from the core stream that + * are not returned, but will be retained for subsequent read operations. + */ +int bsreadlns (bstring r, struct bStream * s, const_bstring term) { + if (s == NULL || s->buff == NULL || r == NULL || term == NULL + || term->data == NULL || r->mlen <= 0) return BSTR_ERR; + if (term->slen == 1) return bsreadln (r, s, term->data[0]); + if (term->slen < 1) return BSTR_ERR; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + r->slen = 0; + return bsreadlnsa (r, s, term); +} + +/* int bsread (bstring r, struct bStream * s, int n) + * + * Read a bstring of length n (or, if it is fewer, as many bytes as is + * remaining) from the bStream. This function may read additional + * characters from the core stream that are not returned, but will be + * retained for subsequent read operations. This function will not read + * additional characters from the core stream beyond virtual stream pointer. + */ +int bsread (bstring r, struct bStream * s, int n) { + if (s == NULL || s->buff == NULL || r == NULL || r->mlen <= 0 + || n <= 0) return BSTR_ERR; + if (BSTR_OK != balloc (s->buff, s->maxBuffSz + 1)) return BSTR_ERR; + r->slen = 0; + return bsreada (r, s, n); +} + +/* int bsunread (struct bStream * s, const_bstring b) + * + * Insert a bstring into the bStream at the current position. These + * characters will be read prior to those that actually come from the core + * stream. + */ +int bsunread (struct bStream * s, const_bstring b) { + if (s == NULL || s->buff == NULL) return BSTR_ERR; + return binsert (s->buff, 0, b, (unsigned char) '?'); +} + +/* int bspeek (bstring r, const struct bStream * s) + * + * Return the currently buffered characters from the bStream that will be + * read prior to reads from the core stream. + */ +int bspeek (bstring r, const struct bStream * s) { + if (s == NULL || s->buff == NULL) return BSTR_ERR; + return bassign (r, s->buff); +} + +/* bstring bjoinblk (const struct bstrList * bl, void * blk, int len); + * + * Join the entries of a bstrList into one bstring by sequentially + * concatenating them with the content from blk for length len in between. + * If there is an error NULL is returned, otherwise a bstring with the + * correct result is returned. + */ +bstring bjoinblk (const struct bstrList * bl, const void * blk, int len) { +bstring b; +unsigned char * p; +int i, c, v; + + if (bl == NULL || bl->qty < 0) return NULL; + if (len < 0) return NULL; + if (len > 0 && blk == NULL) return NULL; + if (bl->qty < 1) return bfromStatic (""); + + for (i = 0, c = 1; i < bl->qty; i++) { + v = bl->entry[i]->slen; + if (v < 0) return NULL; /* Invalid input */ + if (v > INT_MAX - c) return NULL; /* Overflow */ + c += v; + } + + b = (bstring) bstr__alloc (sizeof (struct tagbstring)); + if (len == 0) { + p = b->data = (unsigned char *) bstr__alloc (c); + if (p == NULL) { + bstr__free (b); + return NULL; + } + for (i = 0; i < bl->qty; i++) { + v = bl->entry[i]->slen; + bstr__memcpy (p, bl->entry[i]->data, v); + p += v; + } + } else { + v = (bl->qty - 1) * len; + if ((bl->qty > 512 || len > 127) && + v / len != bl->qty - 1) return NULL; /* Overflow */ + if (v > INT_MAX - c) return NULL; /* Overflow */ + c += v; + p = b->data = (unsigned char *) bstr__alloc (c); + if (p == NULL) { + bstr__free (b); + return NULL; + } + v = bl->entry[0]->slen; + bstr__memcpy (p, bl->entry[0]->data, v); + p += v; + for (i = 1; i < bl->qty; i++) { + bstr__memcpy (p, blk, len); + p += len; + v = bl->entry[i]->slen; + if (v) { + bstr__memcpy (p, bl->entry[i]->data, v); + p += v; + } + } + } + b->mlen = c; + b->slen = c-1; + b->data[c-1] = (unsigned char) '\0'; + return b; +} + +/* bstring bjoin (const struct bstrList * bl, const_bstring sep); + * + * Join the entries of a bstrList into one bstring by sequentially + * concatenating them with the sep string in between. If there is an error + * NULL is returned, otherwise a bstring with the correct result is returned. + */ +bstring bjoin (const struct bstrList * bl, const_bstring sep) { + if (sep != NULL && (sep->slen < 0 || sep->data == NULL)) return NULL; + return bjoinblk (bl, sep->data, sep->slen); +} + +#define BSSSC_BUFF_LEN (256) + +/* int bssplitscb (struct bStream * s, const_bstring splitStr, + * int (* cb) (void * parm, int ofs, const_bstring entry), + * void * parm) + * + * Iterate the set of disjoint sequential substrings read from a stream + * divided by any of the characters in splitStr. An empty splitStr causes + * the whole stream to be iterated once. + * + * Note: At the point of calling the cb function, the bStream pointer is + * pointed exactly at the position right after having read the split + * character. The cb function can act on the stream by causing the bStream + * pointer to move, and bssplitscb will continue by starting the next split + * at the position of the pointer after the return from cb. + * + * However, if the cb causes the bStream s to be destroyed then the cb must + * return with a negative value, otherwise bssplitscb will continue in an + * undefined manner. + */ +int bssplitscb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) { +struct charField chrs; +bstring buff; +int i, p, ret; + + if (cb == NULL || s == NULL || s->readFnPtr == NULL || + splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + + if (NULL == (buff = bfromcstr (""))) return BSTR_ERR; + + if (splitStr->slen == 0) { + while (bsreada (buff, s, BSSSC_BUFF_LEN) >= 0) ; + if ((ret = cb (parm, 0, buff)) > 0) + ret = 0; + } else { + buildCharField (&chrs, splitStr); + ret = p = i = 0; + for (;;) { + if (i >= buff->slen) { + bsreada (buff, s, BSSSC_BUFF_LEN); + if (i >= buff->slen) { + if (0 < (ret = cb (parm, p, buff))) ret = 0; + break; + } + } + if (testInCharField (&chrs, buff->data[i])) { + struct tagbstring t; + unsigned char c; + + blk2tbstr (t, buff->data + i + 1, buff->slen - (i + 1)); + if ((ret = bsunread (s, &t)) < 0) break; + buff->slen = i; + c = buff->data[i]; + buff->data[i] = (unsigned char) '\0'; + if ((ret = cb (parm, p, buff)) < 0) break; + buff->data[i] = c; + buff->slen = 0; + p += i + 1; + i = -1; + } + i++; + } + } + + bdestroy (buff); + return ret; +} + +/* int bssplitstrcb (struct bStream * s, const_bstring splitStr, + * int (* cb) (void * parm, int ofs, const_bstring entry), + * void * parm) + * + * Iterate the set of disjoint sequential substrings read from a stream + * divided by the entire substring splitStr. An empty splitStr causes + * each character of the stream to be iterated. + * + * Note: At the point of calling the cb function, the bStream pointer is + * pointed exactly at the position right after having read the split + * character. The cb function can act on the stream by causing the bStream + * pointer to move, and bssplitscb will continue by starting the next split + * at the position of the pointer after the return from cb. + * + * However, if the cb causes the bStream s to be destroyed then the cb must + * return with a negative value, otherwise bssplitscb will continue in an + * undefined manner. + */ +int bssplitstrcb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm) { +bstring buff; +int i, p, ret; + + if (cb == NULL || s == NULL || s->readFnPtr == NULL + || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + + if (splitStr->slen == 1) return bssplitscb (s, splitStr, cb, parm); + + if (NULL == (buff = bfromcstr (""))) return BSTR_ERR; + + if (splitStr->slen == 0) { + for (i=0; bsreada (buff, s, BSSSC_BUFF_LEN) >= 0; i++) { + if ((ret = cb (parm, 0, buff)) < 0) { + bdestroy (buff); + return ret; + } + buff->slen = 0; + } + return BSTR_OK; + } else { + ret = p = i = 0; + for (i=p=0;;) { + if ((ret = binstr (buff, 0, splitStr)) >= 0) { + struct tagbstring t; + blk2tbstr (t, buff->data, ret); + i = ret + splitStr->slen; + if ((ret = cb (parm, p, &t)) < 0) break; + p += i; + bdelete (buff, 0, i); + } else { + bsreada (buff, s, BSSSC_BUFF_LEN); + if (bseof (s)) { + if ((ret = cb (parm, p, buff)) > 0) ret = 0; + break; + } + } + } + } + + bdestroy (buff); + return ret; +} + +/* int bstrListCreate (void) + * + * Create a bstrList. + */ +struct bstrList * bstrListCreate (void) { +struct bstrList * sl = + (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (sl) { + sl->entry = (bstring *) bstr__alloc (1*sizeof (bstring)); + if (!sl->entry) { + bstr__free (sl); + sl = NULL; + } else { + sl->qty = 0; + sl->mlen = 1; + } + } + return sl; +} + +/* int bstrListDestroy (struct bstrList * sl) + * + * Destroy a bstrList that has been created by bsplit, bsplits or + * bstrListCreate. + */ +int bstrListDestroy (struct bstrList * sl) { +int i; + if (sl == NULL || sl->qty < 0) return BSTR_ERR; + for (i=0; i < sl->qty; i++) { + if (sl->entry[i]) { + bdestroy (sl->entry[i]); + sl->entry[i] = NULL; + } + } + sl->qty = -1; + sl->mlen = -1; + bstr__free (sl->entry); + sl->entry = NULL; + bstr__free (sl); + return BSTR_OK; +} + +/* int bstrListAlloc (struct bstrList * sl, int msz) + * + * Ensure that there is memory for at least msz number of entries for the + * list. + */ +int bstrListAlloc (struct bstrList * sl, int msz) { +bstring * l; +int smsz; +size_t nsz; + if (!sl || msz <= 0 || !sl->entry || sl->qty < 0 || sl->mlen <= 0 || + sl->qty > sl->mlen) return BSTR_ERR; + if (sl->mlen >= msz) return BSTR_OK; + smsz = snapUpSize (msz); + nsz = ((size_t) smsz) * sizeof (bstring); + if (nsz < (size_t) smsz) return BSTR_ERR; + l = (bstring *) bstr__realloc (sl->entry, nsz); + if (!l) { + smsz = msz; + nsz = ((size_t) smsz) * sizeof (bstring); + l = (bstring *) bstr__realloc (sl->entry, nsz); + if (!l) return BSTR_ERR; + } + sl->mlen = smsz; + sl->entry = l; + return BSTR_OK; +} + +/* int bstrListAllocMin (struct bstrList * sl, int msz) + * + * Try to allocate the minimum amount of memory for the list to include at + * least msz entries or sl->qty whichever is greater. + */ +int bstrListAllocMin (struct bstrList * sl, int msz) { +bstring * l; +size_t nsz; + if (!sl || msz <= 0 || !sl->entry || sl->qty < 0 || sl->mlen <= 0 || + sl->qty > sl->mlen) return BSTR_ERR; + if (msz < sl->qty) msz = sl->qty; + if (sl->mlen == msz) return BSTR_OK; + nsz = ((size_t) msz) * sizeof (bstring); + if (nsz < (size_t) msz) return BSTR_ERR; + l = (bstring *) bstr__realloc (sl->entry, nsz); + if (!l) return BSTR_ERR; + sl->mlen = msz; + sl->entry = l; + return BSTR_OK; +} + +/* int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by the + * character in splitChar. + * + * Note: Non-destructive modification of str from within the cb function + * while performing this split is not undefined. bsplitcb behaves in + * sequential lock step with calls to cb. I.e., after returning from a cb + * that return a non-negative integer, bsplitcb continues from the position + * 1 character after the last detected split character and it will halt + * immediately if the length of str falls below this point. However, if the + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitcb will continue in an undefined manner. + */ +int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { +int i, p, ret; + + if (cb == NULL || str == NULL || pos < 0 || pos > str->slen) + return BSTR_ERR; + + p = pos; + do { + for (i=p; i < str->slen; i++) { + if (str->data[i] == splitChar) break; + } + if ((ret = cb (parm, p, i - p)) < 0) return ret; + p = i + 1; + } while (p <= str->slen); + return BSTR_OK; +} + +/* int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by any + * of the characters in splitStr. An empty splitStr causes the whole str to + * be iterated once. + * + * Note: Non-destructive modification of str from within the cb function + * while performing this split is not undefined. bsplitscb behaves in + * sequential lock step with calls to cb. I.e., after returning from a cb + * that return a non-negative integer, bsplitscb continues from the position + * 1 character after the last detected split character and it will halt + * immediately if the length of str falls below this point. However, if the + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitscb will continue in an undefined manner. + */ +int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { +struct charField chrs; +int i, p, ret; + + if (cb == NULL || str == NULL || pos < 0 || pos > str->slen + || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + if (splitStr->slen == 0) { + if ((ret = cb (parm, 0, str->slen)) > 0) ret = 0; + return ret; + } + + if (splitStr->slen == 1) + return bsplitcb (str, splitStr->data[0], pos, cb, parm); + + buildCharField (&chrs, splitStr); + + p = pos; + do { + for (i=p; i < str->slen; i++) { + if (testInCharField (&chrs, str->data[i])) break; + } + if ((ret = cb (parm, p, i - p)) < 0) return ret; + p = i + 1; + } while (p <= str->slen); + return BSTR_OK; +} + +/* int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, + * int (* cb) (void * parm, int ofs, int len), void * parm) + * + * Iterate the set of disjoint sequential substrings over str divided by the + * substring splitStr. An empty splitStr causes the whole str to be + * iterated once. + * + * Note: Non-destructive modification of str from within the cb function + * while performing this split is not undefined. bsplitstrcb behaves in + * sequential lock step with calls to cb. I.e., after returning from a cb + * that return a non-negative integer, bsplitscb continues from the position + * 1 character after the last detected split character and it will halt + * immediately if the length of str falls below this point. However, if the + * cb function destroys str, then it *must* return with a negative value, + * otherwise bsplitscb will continue in an undefined manner. + */ +int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm) { +int i, p, ret; + + if (cb == NULL || str == NULL || pos < 0 || pos > str->slen + || splitStr == NULL || splitStr->slen < 0) return BSTR_ERR; + + if (0 == splitStr->slen) { + for (i=pos; i < str->slen; i++) { + if ((ret = cb (parm, i, 1)) < 0) return ret; + } + return BSTR_OK; + } + + if (splitStr->slen == 1) + return bsplitcb (str, splitStr->data[0], pos, cb, parm); + + for (i=p=pos; i <= str->slen - splitStr->slen; i++) { + if (0 == bstr__memcmp (splitStr->data, str->data + i, + splitStr->slen)) { + if ((ret = cb (parm, p, i - p)) < 0) return ret; + i += splitStr->slen; + p = i; + } + } + if ((ret = cb (parm, p, str->slen - p)) < 0) return ret; + return BSTR_OK; +} + +struct genBstrList { + bstring b; + struct bstrList * bl; +}; + +static int bscb (void * parm, int ofs, int len) { +struct genBstrList * g = (struct genBstrList *) parm; + if (g->bl->qty >= g->bl->mlen) { + int mlen = g->bl->mlen * 2; + bstring * tbl; + + while (g->bl->qty >= mlen) { + if (mlen < g->bl->mlen) return BSTR_ERR; + mlen += mlen; + } + + tbl = (bstring *) bstr__realloc (g->bl->entry, + sizeof (bstring) * mlen); + if (tbl == NULL) return BSTR_ERR; + + g->bl->entry = tbl; + g->bl->mlen = mlen; + } + + g->bl->entry[g->bl->qty] = bmidstr (g->b, ofs, len); + g->bl->qty++; + return BSTR_OK; +} + +/* struct bstrList * bsplit (const_bstring str, unsigned char splitChar) + * + * Create an array of sequential substrings from str divided by the character + * splitChar. + */ +struct bstrList * bsplit (const_bstring str, unsigned char splitChar) { +struct genBstrList g; + + if (str == NULL || str->data == NULL || str->slen < 0) return NULL; + + g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; + g.bl->mlen = 4; + g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); + if (NULL == g.bl->entry) { + bstr__free (g.bl); + return NULL; + } + + g.b = (bstring) str; + g.bl->qty = 0; + if (bsplitcb (str, splitChar, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); + return NULL; + } + return g.bl; +} + +/* struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr) + * + * Create an array of sequential substrings from str divided by the entire + * substring splitStr. + */ +struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr) { +struct genBstrList g; + + if (str == NULL || str->data == NULL || str->slen < 0) return NULL; + + g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; + g.bl->mlen = 4; + g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); + if (NULL == g.bl->entry) { + bstr__free (g.bl); + return NULL; + } + + g.b = (bstring) str; + g.bl->qty = 0; + if (bsplitstrcb (str, splitStr, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); + return NULL; + } + return g.bl; +} + +/* struct bstrList * bsplits (const_bstring str, bstring splitStr) + * + * Create an array of sequential substrings from str divided by any of the + * characters in splitStr. An empty splitStr causes a single entry bstrList + * containing a copy of str to be returned. + */ +struct bstrList * bsplits (const_bstring str, const_bstring splitStr) { +struct genBstrList g; + + if ( str == NULL || str->slen < 0 || str->data == NULL || + splitStr == NULL || splitStr->slen < 0 || splitStr->data == NULL) + return NULL; + + g.bl = (struct bstrList *) bstr__alloc (sizeof (struct bstrList)); + if (g.bl == NULL) return NULL; + g.bl->mlen = 4; + g.bl->entry = (bstring *) bstr__alloc (g.bl->mlen * sizeof (bstring)); + if (NULL == g.bl->entry) { + bstr__free (g.bl); + return NULL; + } + g.b = (bstring) str; + g.bl->qty = 0; + + if (bsplitscb (str, splitStr, 0, bscb, &g) < 0) { + bstrListDestroy (g.bl); + return NULL; + } + return g.bl; +} + +#if defined (__TURBOC__) && !defined (__BORLANDC__) +# ifndef BSTRLIB_NOVSNP +# define BSTRLIB_NOVSNP +# endif +#endif + +/* Give WATCOM C/C++, MSVC some latitude for their non-support of vsnprintf */ +#if defined(__WATCOMC__) || defined(_MSC_VER) +#define exvsnprintf(r,b,n,f,a) {r = _vsnprintf (b,n,f,a);} +#else +#ifdef BSTRLIB_NOVSNP +/* This is just a hack. If you are using a system without a vsnprintf, it is + not recommended that bformat be used at all. */ +#define exvsnprintf(r,b,n,f,a) {vsprintf (b,f,a); r = -1;} +#define START_VSNBUFF (256) +#else + +#if defined(__GNUC__) && !defined(__APPLE__) +/* Something is making gcc complain about this prototype not being here, so + I've just gone ahead and put it in. */ +extern int vsnprintf (char *buf, size_t count, const char *format, va_list arg); +#endif + +#define exvsnprintf(r,b,n,f,a) {r = vsnprintf (b,n,f,a);} +#endif +#endif + +#if !defined (BSTRLIB_NOVSNP) + +#ifndef START_VSNBUFF +#define START_VSNBUFF (16) +#endif + +/* On IRIX vsnprintf returns n-1 when the operation would overflow the target + buffer, WATCOM and MSVC both return -1, while C99 requires that the + returned value be exactly what the length would be if the buffer would be + large enough. This leads to the idea that if the return value is larger + than n, then changing n to the return value will reduce the number of + iterations required. */ + +/* int bformata (bstring b, const char * fmt, ...) + * + * After the first parameter, it takes the same parameters as printf (), but + * rather than outputting results to stdio, it appends the results to + * a bstring which contains what would have been output. Note that if there + * is an early generation of a '\0' character, the bstring will be truncated + * to this end point. + */ +int bformata (bstring b, const char * fmt, ...) { +va_list arglist; +bstring buff; +int n, r; + + if (b == NULL || fmt == NULL || b->data == NULL || b->mlen <= 0 + || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; + + /* Since the length is not determinable beforehand, a search is + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + + if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) { + n = 1; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) return BSTR_ERR; + } + + for (;;) { + va_start (arglist, fmt); + exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + + buff->data[n] = (unsigned char) '\0'; + buff->slen = (int) (strlen) ((char *) buff->data); + + if (buff->slen < n) break; + + if (r > n) n = r; else n += n; + + if (BSTR_OK != balloc (buff, n + 2)) { + bdestroy (buff); + return BSTR_ERR; + } + } + + r = bconcat (b, buff); + bdestroy (buff); + return r; +} + +/* int bassignformat (bstring b, const char * fmt, ...) + * + * After the first parameter, it takes the same parameters as printf (), but + * rather than outputting results to stdio, it outputs the results to + * the bstring parameter b. Note that if there is an early generation of a + * '\0' character, the bstring will be truncated to this end point. + */ +int bassignformat (bstring b, const char * fmt, ...) { +va_list arglist; +bstring buff; +int n, r; + + if (b == NULL || fmt == NULL || b->data == NULL || b->mlen <= 0 + || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; + + /* Since the length is not determinable beforehand, a search is + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + + if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) { + n = 1; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) return BSTR_ERR; + } + + for (;;) { + va_start (arglist, fmt); + exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + + buff->data[n] = (unsigned char) '\0'; + buff->slen = (int) (strlen) ((char *) buff->data); + + if (buff->slen < n) break; + + if (r > n) n = r; else n += n; + + if (BSTR_OK != balloc (buff, n + 2)) { + bdestroy (buff); + return BSTR_ERR; + } + } + + r = bassign (b, buff); + bdestroy (buff); + return r; +} + +/* bstring bformat (const char * fmt, ...) + * + * Takes the same parameters as printf (), but rather than outputting results + * to stdio, it forms a bstring which contains what would have been output. + * Note that if there is an early generation of a '\0' character, the + * bstring will be truncated to this end point. + */ +bstring bformat (const char * fmt, ...) { +va_list arglist; +bstring buff; +int n, r; + + if (fmt == NULL) return NULL; + + /* Since the length is not determinable beforehand, a search is + performed using the truncating "vsnprintf" call (to avoid buffer + overflows) on increasing potential sizes for the output result. */ + + if ((n = (int) (2*strlen (fmt))) < START_VSNBUFF) n = START_VSNBUFF; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) { + n = 1; + if (NULL == (buff = bfromcstralloc (n + 2, ""))) return NULL; + } + + for (;;) { + va_start (arglist, fmt); + exvsnprintf (r, (char *) buff->data, n + 1, fmt, arglist); + va_end (arglist); + + buff->data[n] = (unsigned char) '\0'; + buff->slen = (int) (strlen) ((char *) buff->data); + + if (buff->slen < n) break; + + if (r > n) n = r; else n += n; + + if (BSTR_OK != balloc (buff, n + 2)) { + bdestroy (buff); + return NULL; + } + } + + return buff; +} + +/* int bvcformata (bstring b, int count, const char * fmt, va_list arglist) + * + * The bvcformata function formats data under control of the format control + * string fmt and attempts to append the result to b. The fmt parameter is + * the same as that of the printf function. The variable argument list is + * replaced with arglist, which has been initialized by the va_start macro. + * The size of the output is upper bounded by count. If the required output + * exceeds count, the string b is not augmented with any contents and a value + * below BSTR_ERR is returned. If a value below -count is returned then it + * is recommended that the negative of this value be used as an update to the + * count in a subsequent pass. On other errors, such as running out of + * memory, parameter errors or numeric wrap around BSTR_ERR is returned. + * BSTR_OK is returned when the output is successfully generated and + * appended to b. + * + * Note: There is no sanity checking of arglist, and this function is + * destructive of the contents of b from the b->slen point onward. If there + * is an early generation of a '\0' character, the bstring will be truncated + * to this end point. + */ +int bvcformata (bstring b, int count, const char * fmt, va_list arg) { +int n, r, l; + + if (b == NULL || fmt == NULL || count <= 0 || b->data == NULL + || b->mlen <= 0 || b->slen < 0 || b->slen > b->mlen) return BSTR_ERR; + + if (count > (n = b->slen + count) + 2) return BSTR_ERR; + if (BSTR_OK != balloc (b, n + 2)) return BSTR_ERR; + + exvsnprintf (r, (char *) b->data + b->slen, count + 2, fmt, arg); + b->data[b->slen + count + 2] = '\0'; + + /* Did the operation complete successfully within bounds? */ + + if (n >= (l = b->slen + (int) (strlen) ((char *) b->data + b->slen))) { + b->slen = l; + return BSTR_OK; + } + + /* Abort, since the buffer was not large enough. The return value + tries to help set what the retry length should be. */ + + b->data[b->slen] = '\0'; + if (r > count+1) { + l = r; + } else { + if (count > INT_MAX / 2) + l = INT_MAX; + else + l = count + count; + } + n = -l; + if (n > BSTR_ERR-1) n = BSTR_ERR-1; + return n; +} + +#endif diff --git a/src/auxlib/bstrlib.h b/src/auxlib/bstrlib.h new file mode 100644 index 000000000..57c8f891d --- /dev/null +++ b/src/auxlib/bstrlib.h @@ -0,0 +1,321 @@ +/* + * This source file is part of the bstring string library. This code was + * written by Paul Hsieh in 2002-2015, and is covered by the BSD open source + * license and the GPL. Refer to the accompanying documentation for details + * on usage and license. + */ + +/* + * bstrlib.h + * + * This file is the interface for the core bstring functions. + */ + +#ifndef BSTRLIB_INCLUDE +#define BSTRLIB_INCLUDE + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include +#include +#include + +#if !defined (BSTRLIB_VSNP_OK) && !defined (BSTRLIB_NOVSNP) +# if defined (__TURBOC__) && !defined (__BORLANDC__) +# define BSTRLIB_NOVSNP +# endif +#endif + +#define BSTR_ERR (-1) +#define BSTR_OK (0) +#define BSTR_BS_BUFF_LENGTH_GET (0) + +typedef struct tagbstring * bstring; +typedef const struct tagbstring * const_bstring; + +/* Version */ +#define BSTR_VER_MAJOR 1 +#define BSTR_VER_MINOR 0 +#define BSTR_VER_UPDATE 0 + +/* Copy functions */ +#define cstr2bstr bfromcstr +extern bstring bfromcstr (const char * str); +extern bstring bfromcstralloc (int mlen, const char * str); +extern bstring bfromcstrrangealloc (int minl, int maxl, const char* str); +extern bstring blk2bstr (const void * blk, int len); +extern char * bstr2cstr (const_bstring s, char z); +extern int bcstrfree (char * s); +extern bstring bstrcpy (const_bstring b1); +extern int bassign (bstring a, const_bstring b); +extern int bassignmidstr (bstring a, const_bstring b, int left, int len); +extern int bassigncstr (bstring a, const char * str); +extern int bassignblk (bstring a, const void * s, int len); + +/* Destroy function */ +extern int bdestroy (bstring b); + +/* Space allocation hinting functions */ +extern int balloc (bstring s, int len); +extern int ballocmin (bstring b, int len); + +/* Substring extraction */ +extern bstring bmidstr (const_bstring b, int left, int len); + +/* Various standard manipulations */ +extern int bconcat (bstring b0, const_bstring b1); +extern int bconchar (bstring b0, char c); +extern int bcatcstr (bstring b, const char * s); +extern int bcatblk (bstring b, const void * s, int len); +extern int binsert (bstring s1, int pos, const_bstring s2, unsigned char fill); +extern int binsertblk (bstring s1, int pos, const void * s2, int len, unsigned char fill); +extern int binsertch (bstring s1, int pos, int len, unsigned char fill); +extern int breplace (bstring b1, int pos, int len, const_bstring b2, unsigned char fill); +extern int bdelete (bstring s1, int pos, int len); +extern int bsetstr (bstring b0, int pos, const_bstring b1, unsigned char fill); +extern int btrunc (bstring b, int n); + +/* Scan/search functions */ +extern int bstricmp (const_bstring b0, const_bstring b1); +extern int bstrnicmp (const_bstring b0, const_bstring b1, int n); +extern int biseqcaseless (const_bstring b0, const_bstring b1); +extern int biseqcaselessblk (const_bstring b, const void * blk, int len); +extern int bisstemeqcaselessblk (const_bstring b0, const void * blk, int len); +extern int biseq (const_bstring b0, const_bstring b1); +extern int biseqblk (const_bstring b, const void * blk, int len); +extern int bisstemeqblk (const_bstring b0, const void * blk, int len); +extern int biseqcstr (const_bstring b, const char * s); +extern int biseqcstrcaseless (const_bstring b, const char * s); +extern int bstrcmp (const_bstring b0, const_bstring b1); +extern int bstrncmp (const_bstring b0, const_bstring b1, int n); +extern int binstr (const_bstring s1, int pos, const_bstring s2); +extern int binstrr (const_bstring s1, int pos, const_bstring s2); +extern int binstrcaseless (const_bstring s1, int pos, const_bstring s2); +extern int binstrrcaseless (const_bstring s1, int pos, const_bstring s2); +extern int bstrchrp (const_bstring b, int c, int pos); +extern int bstrrchrp (const_bstring b, int c, int pos); +#define bstrchr(b,c) bstrchrp ((b), (c), 0) +#define bstrrchr(b,c) bstrrchrp ((b), (c), blength(b)-1) +extern int binchr (const_bstring b0, int pos, const_bstring b1); +extern int binchrr (const_bstring b0, int pos, const_bstring b1); +extern int bninchr (const_bstring b0, int pos, const_bstring b1); +extern int bninchrr (const_bstring b0, int pos, const_bstring b1); +extern int bfindreplace (bstring b, const_bstring find, const_bstring repl, int pos); +extern int bfindreplacecaseless (bstring b, const_bstring find, const_bstring repl, int pos); + +/* List of string container functions */ +struct bstrList { + int qty, mlen; + bstring * entry; +}; +extern struct bstrList * bstrListCreate (void); +extern int bstrListDestroy (struct bstrList * sl); +extern int bstrListAlloc (struct bstrList * sl, int msz); +extern int bstrListAllocMin (struct bstrList * sl, int msz); + +/* String split and join functions */ +extern struct bstrList * bsplit (const_bstring str, unsigned char splitChar); +extern struct bstrList * bsplits (const_bstring str, const_bstring splitStr); +extern struct bstrList * bsplitstr (const_bstring str, const_bstring splitStr); +extern bstring bjoin (const struct bstrList * bl, const_bstring sep); +extern bstring bjoinblk (const struct bstrList * bl, const void * s, int len); +extern int bsplitcb (const_bstring str, unsigned char splitChar, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); +extern int bsplitscb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); +extern int bsplitstrcb (const_bstring str, const_bstring splitStr, int pos, + int (* cb) (void * parm, int ofs, int len), void * parm); + +/* Miscellaneous functions */ +extern int bpattern (bstring b, int len); +extern int btoupper (bstring b); +extern int btolower (bstring b); +extern int bltrimws (bstring b); +extern int brtrimws (bstring b); +extern int btrimws (bstring b); + +#if !defined (BSTRLIB_NOVSNP) +extern bstring bformat (const char * fmt, ...); +extern int bformata (bstring b, const char * fmt, ...); +extern int bassignformat (bstring b, const char * fmt, ...); +extern int bvcformata (bstring b, int count, const char * fmt, va_list arglist); + +#define bvformata(ret, b, fmt, lastarg) { \ +bstring bstrtmp_b = (b); \ +const char * bstrtmp_fmt = (fmt); \ +int bstrtmp_r = BSTR_ERR, bstrtmp_sz = 16; \ + for (;;) { \ + va_list bstrtmp_arglist; \ + va_start (bstrtmp_arglist, lastarg); \ + bstrtmp_r = bvcformata (bstrtmp_b, bstrtmp_sz, bstrtmp_fmt, bstrtmp_arglist); \ + va_end (bstrtmp_arglist); \ + if (bstrtmp_r >= 0) { /* Everything went ok */ \ + bstrtmp_r = BSTR_OK; \ + break; \ + } else if (-bstrtmp_r <= bstrtmp_sz) { /* A real error? */ \ + bstrtmp_r = BSTR_ERR; \ + break; \ + } \ + bstrtmp_sz = -bstrtmp_r; /* Doubled or target size */ \ + } \ + ret = bstrtmp_r; \ +} + +#endif + +typedef int (*bNgetc) (void *parm); +typedef size_t (* bNread) (void *buff, size_t elsize, size_t nelem, void *parm); + +/* Input functions */ +extern bstring bgets (bNgetc getcPtr, void * parm, char terminator); +extern bstring bread (bNread readPtr, void * parm); +extern int bgetsa (bstring b, bNgetc getcPtr, void * parm, char terminator); +extern int bassigngets (bstring b, bNgetc getcPtr, void * parm, char terminator); +extern int breada (bstring b, bNread readPtr, void * parm); + +/* Stream functions */ +extern struct bStream * bsopen (bNread readPtr, void * parm); +extern void * bsclose (struct bStream * s); +extern int bsbufflength (struct bStream * s, int sz); +extern int bsreadln (bstring b, struct bStream * s, char terminator); +extern int bsreadlns (bstring r, struct bStream * s, const_bstring term); +extern int bsread (bstring b, struct bStream * s, int n); +extern int bsreadlna (bstring b, struct bStream * s, char terminator); +extern int bsreadlnsa (bstring r, struct bStream * s, const_bstring term); +extern int bsreada (bstring b, struct bStream * s, int n); +extern int bsunread (struct bStream * s, const_bstring b); +extern int bspeek (bstring r, const struct bStream * s); +extern int bssplitscb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); +extern int bssplitstrcb (struct bStream * s, const_bstring splitStr, + int (* cb) (void * parm, int ofs, const_bstring entry), void * parm); +extern int bseof (const struct bStream * s); + +struct tagbstring { + int mlen; + int slen; + unsigned char * data; +}; + +/* Accessor macros */ +#define blengthe(b, e) (((b) == (void *)0 || (b)->slen < 0) ? (int)(e) : ((b)->slen)) +#define blength(b) (blengthe ((b), 0)) +#define bdataofse(b, o, e) (((b) == (void *)0 || (b)->data == (void*)0) ? (char *)(e) : ((char *)(b)->data) + (o)) +#define bdataofs(b, o) (bdataofse ((b), (o), (void *)0)) +#define bdatae(b, e) (bdataofse (b, 0, e)) +#define bdata(b) (bdataofs (b, 0)) +#define bchare(b, p, e) ((((unsigned)(p)) < (unsigned)blength(b)) ? ((b)->data[(p)]) : (e)) +#define bchar(b, p) bchare ((b), (p), '\0') + +/* Static constant string initialization macro */ +#define bsStaticMlen(q,m) {(m), (int) sizeof(q)-1, (unsigned char *) ("" q "")} +#if defined(_MSC_VER) +# define bsStatic(q) bsStaticMlen(q,-32) +#endif +#ifndef bsStatic +# define bsStatic(q) bsStaticMlen(q,-__LINE__) +#endif + +/* Static constant block parameter pair */ +#define bsStaticBlkParms(q) ((void *)("" q "")), ((int) sizeof(q)-1) + +#define bcatStatic(b,s) ((bcatblk)((b), bsStaticBlkParms(s))) +#define bfromStatic(s) ((blk2bstr)(bsStaticBlkParms(s))) +#define bassignStatic(b,s) ((bassignblk)((b), bsStaticBlkParms(s))) +#define binsertStatic(b,p,s,f) ((binsertblk)((b), (p), bsStaticBlkParms(s), (f))) +#define bjoinStatic(b,s) ((bjoinblk)((b), bsStaticBlkParms(s))) +#define biseqStatic(b,s) ((biseqblk)((b), bsStaticBlkParms(s))) +#define bisstemeqStatic(b,s) ((bisstemeqblk)((b), bsStaticBlkParms(s))) +#define biseqcaselessStatic(b,s) ((biseqcaselessblk)((b), bsStaticBlkParms(s))) +#define bisstemeqcaselessStatic(b,s) ((bisstemeqcaselessblk)((b), bsStaticBlkParms(s))) + +/* Reference building macros */ +#define cstr2tbstr btfromcstr +#define btfromcstr(t,s) { \ + (t).data = (unsigned char *) (s); \ + (t).slen = ((t).data) ? ((int) (strlen) ((char *)(t).data)) : 0; \ + (t).mlen = -1; \ +} +#define blk2tbstr(t,s,l) { \ + (t).data = (unsigned char *) (s); \ + (t).slen = l; \ + (t).mlen = -1; \ +} +#define btfromblk(t,s,l) blk2tbstr(t,s,l) +#define bmid2tbstr(t,b,p,l) { \ + const_bstring bstrtmp_s = (b); \ + if (bstrtmp_s && bstrtmp_s->data && bstrtmp_s->slen >= 0) { \ + int bstrtmp_left = (p); \ + int bstrtmp_len = (l); \ + if (bstrtmp_left < 0) { \ + bstrtmp_len += bstrtmp_left; \ + bstrtmp_left = 0; \ + } \ + if (bstrtmp_len > bstrtmp_s->slen - bstrtmp_left) \ + bstrtmp_len = bstrtmp_s->slen - bstrtmp_left; \ + if (bstrtmp_len <= 0) { \ + (t).data = (unsigned char *)""; \ + (t).slen = 0; \ + } else { \ + (t).data = bstrtmp_s->data + bstrtmp_left; \ + (t).slen = bstrtmp_len; \ + } \ + } else { \ + (t).data = (unsigned char *)""; \ + (t).slen = 0; \ + } \ + (t).mlen = -__LINE__; \ +} +#define btfromblkltrimws(t,s,l) { \ + int bstrtmp_idx = 0, bstrtmp_len = (l); \ + unsigned char * bstrtmp_s = (s); \ + if (bstrtmp_s && bstrtmp_len >= 0) { \ + for (; bstrtmp_idx < bstrtmp_len; bstrtmp_idx++) { \ + if (!isspace (bstrtmp_s[bstrtmp_idx])) break; \ + } \ + } \ + (t).data = bstrtmp_s + bstrtmp_idx; \ + (t).slen = bstrtmp_len - bstrtmp_idx; \ + (t).mlen = -__LINE__; \ +} +#define btfromblkrtrimws(t,s,l) { \ + int bstrtmp_len = (l) - 1; \ + unsigned char * bstrtmp_s = (s); \ + if (bstrtmp_s && bstrtmp_len >= 0) { \ + for (; bstrtmp_len >= 0; bstrtmp_len--) { \ + if (!isspace (bstrtmp_s[bstrtmp_len])) break; \ + } \ + } \ + (t).data = bstrtmp_s; \ + (t).slen = bstrtmp_len + 1; \ + (t).mlen = -__LINE__; \ +} +#define btfromblktrimws(t,s,l) { \ + int bstrtmp_idx = 0, bstrtmp_len = (l) - 1; \ + unsigned char * bstrtmp_s = (s); \ + if (bstrtmp_s && bstrtmp_len >= 0) { \ + for (; bstrtmp_idx <= bstrtmp_len; bstrtmp_idx++) { \ + if (!isspace (bstrtmp_s[bstrtmp_idx])) break; \ + } \ + for (; bstrtmp_len >= bstrtmp_idx; bstrtmp_len--) { \ + if (!isspace (bstrtmp_s[bstrtmp_len])) break; \ + } \ + } \ + (t).data = bstrtmp_s + bstrtmp_idx; \ + (t).slen = bstrtmp_len + 1 - bstrtmp_idx; \ + (t).mlen = -__LINE__; \ +} + +/* Write protection macros */ +#define bwriteprotect(t) { if ((t).mlen >= 0) (t).mlen = -1; } +#define bwriteallow(t) { if ((t).mlen == -1) (t).mlen = (t).slen + ((t).slen == 0); } +#define biswriteprotected(t) ((t).mlen <= 0) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/base/sc_memmgr.h b/src/base/sc_memmgr.h index 9517a20bc..5118c40b5 100644 --- a/src/base/sc_memmgr.h +++ b/src/base/sc_memmgr.h @@ -70,10 +70,10 @@ inline void operator delete[]( void * addr ) throw () { #endif /* SC_MEMMGR_CC */ #else -#define sc_malloc(size) malloc(size) -#define sc_calloc(count, size) calloc(count, size) -#define sc_realloc(addr, size) realloc(addr, size) -#define sc_free(addr) free(addr) +#define sc_malloc malloc +#define sc_calloc calloc +#define sc_realloc realloc +#define sc_free free #endif /* SC_MEMMGR_ENABLE_CHECKS */ #endif /* SC_MEMMGR_H */ diff --git a/src/exp2cxx/classes.c b/src/exp2cxx/classes.c index 0f1494ded..b44a5f1bc 100644 --- a/src/exp2cxx/classes.c +++ b/src/exp2cxx/classes.c @@ -128,7 +128,7 @@ void USEREFout( Schema schema, Dictionary refdict, Linked_List reflist, char * t /* sort each list by schema */ /* step 1: for each entry, store it in a schema-specific list */ - DICTdo_init( refdict, &de ); + DICTdo_init( refdict, &de, '*' ); while( 0 != ( r = ( struct Rename * )DICTdo( &de ) ) ) { Linked_List wlist; @@ -141,7 +141,7 @@ void USEREFout( Schema schema, Dictionary refdict, Linked_List reflist, char * t } /* step 2: for each list, print out the renames */ - DICTdo_init( dict, &de ); + DICTdo_init( dict, &de, '*' ); while( 0 != ( list = ( Linked_List )DICTdo( &de ) ) ) { bool first_time = true; LISTdo( list, re, struct Rename * ) { diff --git a/src/exp2cxx/classes_entity.c b/src/exp2cxx/classes_entity.c index 10a6af92c..8025a1424 100644 --- a/src/exp2cxx/classes_entity.c +++ b/src/exp2cxx/classes_entity.c @@ -1049,7 +1049,7 @@ void ENTITYlib_print( Entity entity, Linked_List neededAttr, FILE * file, Schema */ void ENTITYPrint( Entity entity, FILES * files, Schema schema, bool externMap ) { FILE * hdr, * impl; - char * n = ENTITYget_name( entity ); + const char * n = ENTITYget_name( entity ); Linked_List remaining = LISTcreate(); filenames_t names = getEntityFilenames( entity ); diff --git a/src/exp2cxx/classes_type.c b/src/exp2cxx/classes_type.c index 62d737aba..09f06a686 100644 --- a/src/exp2cxx/classes_type.c +++ b/src/exp2cxx/classes_type.c @@ -258,7 +258,7 @@ void TYPEenum_lib_print( const Type type, FILE * f ) { fprintf( f, "const char *\n%s::element_at (int n) const {\n", n ); fprintf( f, " switch (n) {\n" ); - DICTdo_type_init( ENUM_TYPEget_items( type ), &de, OBJ_ENUM ); + DICTdo_init( ENUM_TYPEget_items( type ), &de, OBJ_ENUM ); while( 0 != ( expr = ( Expression )DICTdo( &de ) ) ) { strncpy( c_enum_ele, EnumCElementName( type, expr ), BUFSIZ ); c_enum_ele[BUFSIZ-1] = '\0'; @@ -279,7 +279,7 @@ void TYPEenum_lib_print( const Type type, FILE * f ) { fprintf( f, "\n%s::operator %s () const {\n", n, EnumName( TYPEget_name( type ) ) ); fprintf( f, " switch (v) {\n" ); - DICTdo_type_init( ENUM_TYPEget_items( type ), &de, OBJ_ENUM ); + DICTdo_init( ENUM_TYPEget_items( type ), &de, OBJ_ENUM ); while( 0 != ( expr = ( Expression )DICTdo( &de ) ) ) { strncpy( c_enum_ele, EnumCElementName( type, expr ), BUFSIZ ); fprintf( f, " case %s : ", c_enum_ele ); @@ -1203,7 +1203,8 @@ char * TYPEget_express_type( const Type t ) { Class_Of_Type class; Type bt; char retval [BUFSIZ]; - char * n, * permval, * aggr_type; + const char *n; + char *permval, *aggr_type; /* 1. "DEFINED" types */ diff --git a/src/exp2cxx/classes_wrapper.cc b/src/exp2cxx/classes_wrapper.cc index 517fa8a89..1eb3acc28 100644 --- a/src/exp2cxx/classes_wrapper.cc +++ b/src/exp2cxx/classes_wrapper.cc @@ -203,7 +203,7 @@ void SCOPEPrint( Scope scope, FILES * files, Schema schema, ComplexCollect * col /* The following was `SCOPEdo_types( scope, t, de ) ... SCOPEod;` * Modified Jan 2012 by MAP - moving enums to own dictionary */ if( scope->enum_table ) { - HASHlistinit_by_type( scope->enum_table, &de, OBJ_TYPE ); + HASHlistinit( scope->enum_table, &de, OBJ_TYPE ); Type t; while( 0 != ( t = ( Type ) DICTdo( &de ) ) ) { // First check for one exception: Say enumeration type B is defined @@ -239,7 +239,7 @@ void SCOPEPrint( Scope scope, FILES * files, Schema schema, ComplexCollect * col fprintf( files->inc, "// ***** Redefined Enumerations:\n" ); /* The following was `SCOPEdo_types( scope, t, de ) ... SCOPEod;` * Modified Jan 2012 by MAP - moving enums to own dictionary */ - HASHlistinit_by_type( scope->enum_table, &de, OBJ_TYPE ); + HASHlistinit( scope->enum_table, &de, OBJ_TYPE ); Type t; while( 0 != ( t = ( Type ) DICTdo( &de ) ) ) { if( t->search_id == CANPROCESS && TYPEis_enumeration( t ) ) { @@ -497,7 +497,7 @@ void SCHEMAprint( Schema schema, FILES * files, void * complexCol, int suffix ) fprintf( createall, " reg.AddSchema (*%s::schema);\n", SCHEMAget_name( schema ) ); /**************/ /* add global RULEs to Schema dictionary entry */ - DICTdo_type_init( schema->symbol_table, &de, OBJ_RULE ); + DICTdo_init( schema->symbol_table, &de, OBJ_RULE ); while( 0 != ( r = ( Rule )DICTdo( &de ) ) ) { fprintf( createall, " str.clear();\n" ); format_for_std_stringout( createall, RULEto_string( r ) ); @@ -506,7 +506,7 @@ void SCHEMAprint( Schema schema, FILES * files, void * complexCol, int suffix ) } /**************/ /* add FUNCTIONs to Schema dictionary entry */ - DICTdo_type_init( schema->symbol_table, &de, OBJ_FUNCTION ); + DICTdo_init( schema->symbol_table, &de, OBJ_FUNCTION ); while( 0 != ( f = ( Function )DICTdo( &de ) ) ) { fprintf( createall, " str.clear();\n" ); format_for_std_stringout( createall, FUNCto_string( f ) ); @@ -514,7 +514,7 @@ void SCHEMAprint( Schema schema, FILES * files, void * complexCol, int suffix ) } /* add PROCEDUREs to Schema dictionary entry */ - DICTdo_type_init( schema->symbol_table, &de, OBJ_PROCEDURE ); + DICTdo_init( schema->symbol_table, &de, OBJ_PROCEDURE ); while( 0 != ( p = ( Procedure )DICTdo( &de ) ) ) { fprintf( createall, " str.clear();\n" ); format_for_std_stringout( createall, PROCto_string( p ) ); @@ -582,7 +582,7 @@ void getMCPrint( Express express, FILE * schema_h, FILE * schema_cc ) { "// dictionary (Registry) handle since it doesn't have a\n", "// predetermined way to access to the handle.\n" ); fprintf( schema_cc, "\nSDAI_Model_contents_ptr GetModelContents(char *schemaName) {\n" ); - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); schema = ( Scope )DICTdo( &de ); fprintf( schema_cc, " if(!strcmp(schemaName, \"%s\"))\n", SCHEMAget_name( schema ) ); fprintf( schema_cc, " return (SDAI_Model_contents_ptr) new SdaiModel_contents_%s; \n", SCHEMAget_name( schema ) ); @@ -673,12 +673,12 @@ void EXPRESSPrint( Express express, ComplexCollect & col, FILES * files ) { fprintf( schemainit, " %sInit (reg);\n", schnm ); /********** do all schemas ***********/ - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { numberAttributes( schema ); } - DICTdo_init( express->symbol_table, &de ); + DICTdo_init( express->symbol_table, &de, '*' ); bool first = true; while( 0 != ( schema = ( Scope )DICTdo( &de ) ) ) { if( !first ) { diff --git a/src/exp2cxx/collect.cc b/src/exp2cxx/collect.cc index d12db7346..d2a752d78 100644 --- a/src/exp2cxx/collect.cc +++ b/src/exp2cxx/collect.cc @@ -70,7 +70,7 @@ void ComplexCollect::remove( ComplexList * c ) count--; } -ComplexList * ComplexCollect::find( char * name ) +ComplexList * ComplexCollect::find( const char * name ) /* * Searches for and returns the ComplexList whose supertype name = name. */ diff --git a/src/exp2cxx/complexSupport.h b/src/exp2cxx/complexSupport.h index 8277a03fa..098f6df9a 100644 --- a/src/exp2cxx/complexSupport.h +++ b/src/exp2cxx/complexSupport.h @@ -355,10 +355,10 @@ class ComplexList { int operator< ( ComplexList & c ) { return ( strcmp( supertype(), c.supertype() ) < 0 ); } - int operator< ( char * name ) { + int operator< ( const char * name ) { return ( strcmp( supertype(), name ) < 0 ); } - int operator== ( char * name ) { + int operator== ( const char * name ) { return ( strcmp( supertype(), name ) == 0 ); } const char * supertype() { @@ -410,7 +410,7 @@ class ComplexCollect { void remove( ComplexList * ); // Remove this list but don't delete its hierarchy structure, because // it's used elsewhere. - ComplexList * find( char * ); + ComplexList * find( const char * ); int supports( EntNode * ); bool externMapping( const char * ent ) { return ( clists ? clists->isDependent( ent ) : 0 ); diff --git a/src/exp2cxx/expressbuild.cc b/src/exp2cxx/expressbuild.cc index a1c665656..0d55b83c8 100644 --- a/src/exp2cxx/expressbuild.cc +++ b/src/exp2cxx/expressbuild.cc @@ -16,7 +16,7 @@ // Local function prototypes: static void initEnts( Express ); -static Entity findEnt( Entity, char * ); +static Entity findEnt( Entity, const char * ); ComplexCollect::ComplexCollect( Express express ) /* @@ -38,7 +38,7 @@ ComplexCollect::ComplexCollect( Express express ) initEnts( express ); // Next loop through all the entities, building ComplexLists: - DICTdo_type_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de_sch ) ) != 0 ) { SCOPEdo_entities( schema, ent, de_ent ) if( ent->search_id == TRUE ) { @@ -96,7 +96,7 @@ static void initEnts( Express express ) DictionaryEntry de_sch, de_ent; Schema schema; - DICTdo_type_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de_sch ) ) != 0 ) { SCOPEdo_entities( schema, ent, de_ent ) ent->search_id = FALSE; @@ -235,7 +235,7 @@ void MultList::processSubExp( Expression exp, Entity super, } } -static Entity findEnt( Entity ent0, char * name ) +static Entity findEnt( Entity ent0, const char * name ) /* * Returns an entity named name. The desired entity is likely to be in the * same schema as ent0. findEnt first searches the schema which contains @@ -256,7 +256,7 @@ static Entity findEnt( Entity ent0, char * name ) // If we still haven't found it, look through all the entities in the // express file: express = schema->superscope; - DICTdo_type_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); while( ( sch = ( Scope )DICTdo( &de_sch ) ) != 0 ) { if( sch == schema ) { // Don't redo the schema which contains ent0 - we did it already. diff --git a/src/exp2cxx/multpass.c b/src/exp2cxx/multpass.c index 51a210ecb..8adfeb536 100644 --- a/src/exp2cxx/multpass.c +++ b/src/exp2cxx/multpass.c @@ -75,13 +75,13 @@ void print_schemas_separate( Express express, void * complexCol, FILES * files ) /* TODO only print gr, wr, str as needed, from SCHEMAprint in classes_wrapper.cc? */ fprintf( files->create, " Global_rule_ptr gr;\n Where_rule_ptr wr;\n std::string str; //for large strings such as functions or global rules\n" ); - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { numberAttributes( schema ); } while( !complete ) { complete = true; - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { if( schema->search_id == UNPROCESSED ) { /* i.e., if the schema has more ents/types to process in it */ @@ -126,7 +126,7 @@ void print_schemas_separate( Express express, void * complexCol, FILES * files ) /******************* *******************/ - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { fprintf( files->create, "//////////////// USE statements\n" ); @@ -141,7 +141,7 @@ void print_schemas_separate( Express express, void * complexCol, FILES * files ) /* Before closing, we have three more situations to deal with (i.e., three // types of declarations etc. which could only be printed at the end). // Each is explained in the header section of its respective function. */ - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { /* (These two tasks are totally unrelated but are done in the same loop // for efficiency.) */ @@ -150,7 +150,7 @@ void print_schemas_separate( Express express, void * complexCol, FILES * files ) } /* Third situation: (Must be dealt with after first, see header comments // of addAggrTypedefs.) */ - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { addAggrTypedefs( schema, files->classes ); } @@ -186,7 +186,7 @@ static void initializeMarks( Express express ) DictionaryEntry de_sch, de_ent, de_type; Schema schema; - DICTdo_type_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de_sch ) ) != 0 ) { schema->search_id = UNPROCESSED; schema->clientData = ( int * )sc_malloc( sizeof( int ) ); @@ -204,7 +204,7 @@ static void cleanupMarks( Express express ) { DictionaryEntry de_sch; Schema schema; - DICTdo_type_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de_sch ) ) != 0 ) { if( schema->clientData ) { sc_free( schema->clientData ); @@ -691,11 +691,12 @@ static void addUseRefNames( Schema schema, FILE * create ) { Dictionary useRefDict; DictionaryEntry de; Rename * rnm; - char * oldnm, schNm[BUFSIZ]; + const char *oldnm; + char schNm[BUFSIZ]; static bool firsttime = true; if( ( useRefDict = schema->u.schema->usedict ) != NULL ) { - DICTdo_init( useRefDict, &de ); + DICTdo_init( useRefDict, &de, '*' ); while( ( rnm = ( Rename * )DICTdo( &de ) ) != 0 ) { oldnm = ( ( Scope )rnm->object )->symbol.name; if( ( strcmp( oldnm, rnm->nnew->name ) ) ) { @@ -724,7 +725,7 @@ static void addUseRefNames( Schema schema, FILE * create ) { } } if( ( useRefDict = schema->u.schema->refdict ) != NULL ) { - DICTdo_init( useRefDict, &de ); + DICTdo_init( useRefDict, &de, '*' ); while( ( rnm = ( Rename * )DICTdo( &de ) ) != 0 ) { oldnm = ( ( Scope )rnm->object )->symbol.name; if( ( strcmp( oldnm, rnm->nnew->name ) ) ) { diff --git a/src/exp2python/src/classes_python.c b/src/exp2python/src/classes_python.c index 8c672868a..1bb5c57b8 100644 --- a/src/exp2python/src/classes_python.c +++ b/src/exp2python/src/classes_python.c @@ -1093,7 +1093,7 @@ LOOPpyout( struct Loop_ *loop, int level, FILE * file ) { DictionaryEntry de; /* TODO: if incr != 0 && ((incr > 0 && start < stop) || (incr < 0 && start > stop)): */ - DICTdo_init( loop->scope->symbol_table, &de ); + DICTdo_init( loop->scope->symbol_table, &de, '*' ); v = ( Variable )DICTdo( &de ); fprintf( file, "for %s in range(", v->name->symbol.name ); EXPRESSION_out( loop->scope->u.incr->init, 0 , file ); @@ -1729,7 +1729,7 @@ TYPEenum_lib_print( const Type type, FILE * f ) { } /* set up the dictionary info */ - DICTdo_type_init( ENUM_TYPEget_items( type ), &de, OBJ_ENUM ); + DICTdo_init( ENUM_TYPEget_items( type ), &de, OBJ_ENUM ); while( 0 != ( expr = ( Expression )DICTdo( &de ) ) ) { if( is_python_keyword( EXPget_name( expr ) ) ) { fprintf( f, "%s_ ", EXPget_name( expr ) ); diff --git a/src/exp2python/src/classes_wrapper_python.cc b/src/exp2python/src/classes_wrapper_python.cc index 21c16d1c4..83b60c70c 100644 --- a/src/exp2python/src/classes_wrapper_python.cc +++ b/src/exp2python/src/classes_wrapper_python.cc @@ -232,7 +232,7 @@ getMCPrint( Express express, FILE * schema_h, FILE * schema_cc ) { "// predetermined way to access to the handle.\n" ); fprintf( schema_cc, "\nSCLP23(Model_contents_ptr) GetModelContents(char *schemaName)\n{\n" ); - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); schema = ( Scope )DICTdo( &de ); fprintf( schema_cc, " if(!strcmp(schemaName, \"%s\"))\n", @@ -285,7 +285,7 @@ EXPRESSPrint( Express express, FILES * files ) { } /********** do all schemas ***********/ - DICTdo_init( express->symbol_table, &de ); + DICTdo_init( express->symbol_table, &de, '*' ); while( 0 != ( schema = ( Scope )DICTdo( &de ) ) ) { SCOPEPrint( schema, files, schema ); } diff --git a/src/exp2python/src/multpass_python.c b/src/exp2python/src/multpass_python.c index ece7e6617..7639b8c04 100644 --- a/src/exp2python/src/multpass_python.c +++ b/src/exp2python/src/multpass_python.c @@ -74,7 +74,7 @@ void print_schemas_separate( Express express, FILES * files ) /* fprintf( files->create, " Interface_spec_ptr is;\n Used_item_ptr ui;\n Referenced_item_ptr ri;\n Uniqueness_rule_ptr ur;\n Where_rule_ptr wr;\n Global_rule_ptr gr;\n" ); */ while( !complete ) { complete = TRUE; - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { if( schema->search_id == UNPROCESSED ) { /* i.e., if the schema has more ents/types to process in it */ @@ -117,7 +117,7 @@ void print_schemas_separate( Express express, FILES * files ) } /* - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { //fprintf( files->create, // "\t//////////////// USE statements\n" ); @@ -131,7 +131,7 @@ void print_schemas_separate( Express express, FILES * files ) /* Before closing, we have three more situations to deal with (i.e., three // types of declarations etc. which could only be printed at the end). // Each is explained in the header section of its respective function. */ - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { /* (These two tasks are totally unrelated but are done in the same loop // for efficiency.) */ @@ -139,7 +139,7 @@ void print_schemas_separate( Express express, FILES * files ) } /* Third situation: (Must be dealt with after first, see header comments // of addAggrTypedefs.) */ - DICTdo_type_init( express->symbol_table, &de, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de ) ) != 0 ) { /* addAggrTypedefs( schema, files->classes ); */ addAggrTypedefs( schema ); @@ -172,7 +172,7 @@ static void initializeMarks( Express express ) { DictionaryEntry de_sch, de_ent, de_type; Schema schema; - DICTdo_type_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); + DICTdo_init( express->symbol_table, &de_sch, OBJ_SCHEMA ); while( ( schema = ( Scope )DICTdo( &de_sch ) ) != 0 ) { schema->search_id = UNPROCESSED; schema->clientData = ( int * )malloc( sizeof( int ) ); @@ -627,7 +627,7 @@ static void addUseRefNames( Schema schema, FILE * create ) static int firsttime = TRUE; if( ( useRefDict = schema->u.schema->usedict ) != NULL ) { - DICTdo_init( useRefDict, &de ); + DICTdo_init( useRefDict, &de, '*' ); while( ( rnm = ( Rename * )DICTdo( &de ) ) != 0 ) { oldnm = ( ( Scope )rnm->object )->symbol.name; if( ( strcmp( oldnm, rnm->nnew->name ) ) ) { @@ -657,7 +657,7 @@ static void addUseRefNames( Schema schema, FILE * create ) } } if( ( useRefDict = schema->u.schema->refdict ) != NULL ) { - DICTdo_init( useRefDict, &de ); + DICTdo_init( useRefDict, &de, '*' ); while( ( rnm = ( Rename * )DICTdo( &de ) ) != 0 ) { oldnm = ( ( Scope )rnm->object )->symbol.name; if( ( strcmp( oldnm, rnm->nnew->name ) ) ) { diff --git a/src/exppp/pretty_express.c b/src/exppp/pretty_express.c index 610d5e938..a73dae89f 100644 --- a/src/exppp/pretty_express.c +++ b/src/exppp/pretty_express.c @@ -15,7 +15,7 @@ void EXPRESSout( Express e ) { exppp_init(); - DICTdo_init( e->symbol_table, &de ); + DICTdo_init( e->symbol_table, &de, '*' ); while( 0 != ( s = ( Schema )DICTdo( &de ) ) ) { ( void ) SCHEMAout( s ); } diff --git a/src/exppp/pretty_loop.c b/src/exppp/pretty_loop.c index 95a059f44..e280f0871 100644 --- a/src/exppp/pretty_loop.c +++ b/src/exppp/pretty_loop.c @@ -21,7 +21,7 @@ void LOOPout( struct Loop_ *loop, int level ) { if( loop->scope ) { DictionaryEntry de; - DICTdo_init( loop->scope->symbol_table, &de ); + DICTdo_init( loop->scope->symbol_table, &de, '*' ); v = ( Variable )DICTdo( &de ); wrap( " %s := ", v->name->symbol.name ); EXPR_out( loop->scope->u.incr->init, 0 ); diff --git a/src/exppp/pretty_ref.c b/src/exppp/pretty_ref.c index 3d73efd77..a567efab9 100644 --- a/src/exppp/pretty_ref.c +++ b/src/exppp/pretty_ref.c @@ -26,7 +26,7 @@ void REFout( Dictionary refdict, Linked_List reflist, char * type, int level ) { /* sort each list by schema */ /* step 1: for each entry, store it in a schema-specific list */ - DICTdo_init( refdict, &de ); + DICTdo_init( refdict, &de, '*' ); while( 0 != ( ren = ( struct Rename * )DICTdo( &de ) ) ) { Linked_List nameList; @@ -41,7 +41,7 @@ void REFout( Dictionary refdict, Linked_List reflist, char * type, int level ) { /* step 2: for each list, print out the renames */ level = 6; /* no special reason, feels good */ indent2 = level + exppp_continuation_indent; - DICTdo_init( dict, &de ); + DICTdo_init( dict, &de, '*' ); while( 0 != ( list = ( Linked_List )DICTdo( &de ) ) ) { bool first_time = true; LISTdo( list, r, struct Rename * ) { diff --git a/src/exppp/pretty_scope.c b/src/exppp/pretty_scope.c index 85fe041d1..1476c214d 100644 --- a/src/exppp/pretty_scope.c +++ b/src/exppp/pretty_scope.c @@ -47,14 +47,14 @@ void SCOPErules_out( Scope s, int level ) { DictionaryEntry de; if( exppp_alphabetize == false ) { - DICTdo_type_init( s->symbol_table, &de, OBJ_RULE ); + DICTdo_init( s->symbol_table, &de, OBJ_RULE ); while( 0 != ( r = ( Rule )DICTdo( &de ) ) ) { RULE_out( r, level ); } } else { Linked_List alpha = LISTcreate(); - DICTdo_type_init( s->symbol_table, &de, OBJ_RULE ); + DICTdo_init( s->symbol_table, &de, OBJ_RULE ); while( 0 != ( r = ( Rule )DICTdo( &de ) ) ) { SCOPEadd_inorder( alpha, r ); } @@ -74,14 +74,14 @@ void SCOPEfuncs_out( Scope s, int level ) { DictionaryEntry de; if( exppp_alphabetize == false ) { - DICTdo_type_init( s->symbol_table, &de, OBJ_FUNCTION ); + DICTdo_init( s->symbol_table, &de, OBJ_FUNCTION ); while( 0 != ( f = ( Function )DICTdo( &de ) ) ) { FUNC_out( f, level ); } } else { Linked_List alpha = LISTcreate(); - DICTdo_type_init( s->symbol_table, &de, OBJ_FUNCTION ); + DICTdo_init( s->symbol_table, &de, OBJ_FUNCTION ); while( 0 != ( f = ( Function )DICTdo( &de ) ) ) { SCOPEadd_inorder( alpha, f ); } @@ -101,14 +101,14 @@ void SCOPEprocs_out( Scope s, int level ) { DictionaryEntry de; if( exppp_alphabetize == false ) { - DICTdo_type_init( s->symbol_table, &de, OBJ_PROCEDURE ); + DICTdo_init( s->symbol_table, &de, OBJ_PROCEDURE ); while( 0 != ( p = ( Procedure )DICTdo( &de ) ) ) { PROC_out( p, level ); } } else { Linked_List alpha = LISTcreate(); - DICTdo_type_init( s->symbol_table, &de, OBJ_PROCEDURE ); + DICTdo_init( s->symbol_table, &de, OBJ_PROCEDURE ); while( 0 != ( p = ( Procedure )DICTdo( &de ) ) ) { SCOPEadd_inorder( alpha, p ); } @@ -188,7 +188,7 @@ void SCOPEconsts_out( Scope s, int level ) { Dictionary d = s->symbol_table; /* checks length of constant names */ - DICTdo_type_init( d, &de, OBJ_VARIABLE ); + DICTdo_init( d, &de, OBJ_VARIABLE ); while( 0 != ( v = ( Variable )DICTdo( &de ) ) ) { if( !v->flags.constant ) { continue; @@ -215,7 +215,7 @@ void SCOPEconsts_out( Scope s, int level ) { indent2 = level + max_indent + strlen( ": ab" ) + exppp_continuation_indent; if( !exppp_alphabetize ) { - DICTdo_type_init( d, &de, OBJ_VARIABLE ); + DICTdo_init( d, &de, OBJ_VARIABLE ); while( 0 != ( v = ( Variable )DICTdo( &de ) ) ) { if( !v->flags.constant ) { continue; @@ -225,7 +225,7 @@ void SCOPEconsts_out( Scope s, int level ) { } else { Linked_List alpha = LISTcreate(); - DICTdo_type_init( d, &de, OBJ_VARIABLE ); + DICTdo_init( d, &de, OBJ_VARIABLE ); while( 0 != ( v = ( Variable )DICTdo( &de ) ) ) { if( !v->flags.constant ) { continue; @@ -258,7 +258,7 @@ void SCOPElocals_out( Scope s, int level ) { size_t max_indent = 0; Dictionary d = s->symbol_table; - DICTdo_type_init( d, &de, OBJ_VARIABLE ); + DICTdo_init( d, &de, OBJ_VARIABLE ); while( 0 != ( v = ( Variable )DICTdo( &de ) ) ) { if( v->flags.constant ) { continue; @@ -280,7 +280,7 @@ void SCOPElocals_out( Scope s, int level ) { raw( "%*sLOCAL\n", level, "" ); indent2 = level + max_indent + strlen( ": " ) + exppp_continuation_indent; - DICTdo_type_init( d, &de, OBJ_VARIABLE ); + DICTdo_init( d, &de, OBJ_VARIABLE ); while( 0 != ( v = ( Variable )DICTdo( &de ) ) ) { if( v->flags.constant ) { continue; @@ -325,14 +325,14 @@ void SCOPEentities_out( Scope s, int level ) { DictionaryEntry de; if( exppp_alphabetize == false ) { - DICTdo_type_init( s->symbol_table, &de, OBJ_ENTITY ); + DICTdo_init( s->symbol_table, &de, OBJ_ENTITY ); while( 0 != ( e = ( Entity )DICTdo( &de ) ) ) { ENTITY_out( e, level ); } } else { Linked_List alpha = LISTcreate(); - DICTdo_type_init( s->symbol_table, &de, OBJ_ENTITY ); + DICTdo_init( s->symbol_table, &de, OBJ_ENTITY ); while( 0 != ( e = ( Entity )DICTdo( &de ) ) ) { SCOPEadd_inorder( alpha, e ); } @@ -351,14 +351,14 @@ void SCOPEtypes_out( Scope s, int level ) { Type t; if( exppp_alphabetize == false ) { - DICTdo_type_init( s->symbol_table, &de, OBJ_TYPE ); + DICTdo_init( s->symbol_table, &de, OBJ_TYPE ); while( 0 != ( t = ( Type )DICTdo( &de ) ) ) { TYPE_out( t, level ); } } else { Linked_List alpha = LISTcreate(); - DICTdo_type_init( s->symbol_table, &de, OBJ_TYPE ); + DICTdo_init( s->symbol_table, &de, OBJ_TYPE ); while( 0 != ( t = ( Type )DICTdo( &de ) ) ) { SCOPEadd_inorder( alpha, t ); } diff --git a/src/exppp/pretty_type.c b/src/exppp/pretty_type.c index d18402ddc..7ec32f6a3 100644 --- a/src/exppp/pretty_type.c +++ b/src/exppp/pretty_type.c @@ -147,12 +147,12 @@ void TYPE_body_out( Type t, int level ) { * to a temporary array. This is trivial since all buckets * will get filled with one and only one object. */ - DICTdo_type_init( t->symbol_table, &de, OBJ_EXPRESSION ); + DICTdo_init( t->symbol_table, &de, OBJ_EXPRESSION ); while( 0 != ( expr = ( Expression )DICTdo( &de ) ) ) { count++; } names = ( char ** )sc_malloc( count * sizeof( char * ) ); - DICTdo_type_init( t->symbol_table, &de, OBJ_EXPRESSION ); + DICTdo_init( t->symbol_table, &de, OBJ_EXPRESSION ); while( 0 != ( expr = ( Expression )DICTdo( &de ) ) ) { names[expr->u.integer - 1] = expr->symbol.name; } diff --git a/src/express/CMakeLists.txt b/src/express/CMakeLists.txt index 5ef962c83..aa83a2a42 100644 --- a/src/express/CMakeLists.txt +++ b/src/express/CMakeLists.txt @@ -2,6 +2,7 @@ include_directories( ${CMAKE_BINARY_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR} ${SC_SOURCE_DIR}/src/base + ${SC_SOURCE_DIR}/src/auxlib ) # Set up the information we need to feed the generated source management @@ -40,16 +41,19 @@ add_custom_target(express_verify DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/express_ver # Depending on whether we're using pre-generated sources or building them on # the fly, set up targets and source lists. if(SC_GENERATE_LP_SOURCES) - LEMON_TARGET(ExpParser expparse.y) - PERPLEX_TARGET(ExpScanner expscan.l) - ADD_PERPLEX_LEMON_DEPENDENCY(ExpScanner ExpParser) - - add_library(objlib_expscan_c OBJECT ${PERPLEX_ExpScanner_SRC}) + LEMON_TARGET(ExpParser expparse.y expparse.c + COMPILE_FLAGS "-p -c" + DEFINES_FILE "expparse.h") + RE2C_TARGET(ExpScanner expscan.l expscan.c + COMPILE_FLAGS "-W -Wno-match-empty-string -r -c --tags" + DEFINES_FILE "expscan.h") + ADD_RE2C_LEMON_DEPENDENCY(ExpScanner ExpParser) + + add_library(objlib_expscan_c OBJECT ${RE2C_ExpScanner_OUTPUTS}) set_property(TARGET objlib_expscan_c PROPERTY POSITION_INDEPENDENT_CODE ON) - add_library(objlib_expparse_c OBJECT ${LEMON_ExpParser_SRC}) + add_library(objlib_expparse_c OBJECT ${LEMON_ExpParser_OUTPUTS}) set_property(TARGET objlib_expparse_c PROPERTY POSITION_INDEPENDENT_CODE ON) - else(SC_GENERATE_LP_SOURCES) add_subdirectory(generated) include_directories(generated) @@ -68,10 +72,8 @@ set(EXPRESS_SOURCES schema.c resolve.c resolve2.c - lexact.c linklist.c error.c - dict.c hash.c alloc.c memory.c @@ -80,6 +82,7 @@ set(EXPRESS_SOURCES ordered_attrs.cc info.c factory.c + lexsupport.c ) set(EXPRESS_OBJS) @@ -98,11 +101,12 @@ list(APPEND EXPRESS_OBJS $) if(SC_GENERATE_LP_SOURCES) set_property(TARGET objlib_expparse_c objlib_express_c objlib_lexact_c - APPEND PROPERTY INCLUDE_DIRECTORIES "${PERPLEX_ExpScanner_INCLUDE_DIR}") + APPEND PROPERTY INCLUDE_DIRECTORIES "${RE2C_ExpScanner_INCLUDE_DIR}") set_property(TARGET objlib_expscan_c objlib_express_c objlib_lexact_c APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_INCLUDE_DIR}") # OBJECT libraries are not targets, and so an explicit dependency is required - set_source_files_properties(express.c lexact.c PROPERTIES OBJECT_DEPENDS "${PERPLEX_ExpScanner_HDR};${LEMON_ExpParser_HDR}") + set_source_files_properties(express.c lexact.c PROPERTIES OBJECT_DEPENDS + "${RE2C_ExpScanner_OUTPUT_HEADER};${LEMON_ExpParser_OUTPUT_HEADER}") endif() # TODO @@ -122,6 +126,7 @@ set(CHECK_EXPRESS_SOURCES SET(EXPRESS_PRIVATE_HDRS exptoks.h stack.h + lexsupport.h ) variable_watch(SC_ADDLIB_EXPRESS_ARG_LINK_LIBRARIES) @@ -162,7 +167,7 @@ if($CACHE{SC_BUILD_STATIC_LIBS}) endif() endif() -SC_ADDEXEC(check-express SOURCES ${CHECK_EXPRESS_SOURCES} LINK_LIBRARIES express base ${SC_EXEC_NOINSTALL}) +SC_ADDEXEC(check-express SOURCES ${CHECK_EXPRESS_SOURCES} LINK_LIBRARIES express base auxlib ${SC_EXEC_NOINSTALL}) if(SC_ENABLE_TESTING) add_subdirectory(test) diff --git a/src/express/PARSER_REWRITE.txt b/src/express/PARSER_REWRITE.txt new file mode 100644 index 000000000..b133fc434 --- /dev/null +++ b/src/express/PARSER_REWRITE.txt @@ -0,0 +1,49 @@ +Overview +======== + +I'm rewriting the parser - now using RE2C and Lemon (rather than flex/bison previously discussed). + +The principle aim behind this, more than a thousand lines of Python output rewrite - blocked. I +need the parser to do more work. + +Features: +LEXER P1: Comments are stripped (in theory, these could be passed to e.g. an Express text editor) +LEXER P2: Named scopes are resolved +LEXER P3: Tokens are returned, and Anonymous scopes added +PARSER: Single pass. + +Tests: + * test/unitary_schemas (ok, 2 expected failures) + * data/*/*.exp (ok, no failures) + +Generally, I believe there should be a more feature complete test set: Fully automated checking of +parse trees. Although I don't fully understand how this should be achieved yet. + +Next steps: + 1. Refactor to improve lexer actions + 2. Integrate parser + 3. General error handling strategy (to be discussed) + +Requirements +============ + +RE2C - versions before 1.0 have significant bugs, I used 1.0.3 - not the version in BRL-CAD. +Lemon - I would guess any recent version would work (I haven't tested yet). + +When I get a moment I'll add an equivalently named branch in the baffledCitrus repo. + +Build Instructions +================== + +NOTE: currently no generators are supported! + +configure using cmake +EXPRESS_ONLY - set ON +GENERATORS - turn all generators OFF +DEBUG - set appropriate debug flags for your platform +TESTING - enable tests + +you can check for parse errors by running check-express + +./check-express some/express/file.exp + diff --git a/src/express/alloc.c b/src/express/alloc.c index e20cfa943..d89874eb4 100644 --- a/src/express/alloc.c +++ b/src/express/alloc.c @@ -39,6 +39,8 @@ Now you can say things like: #include "express/alloc.h" #include "express/error.h" +#include "sc_memmgr.h" + /* just in case we are compiling by hand */ #ifndef ALLOC #define ALLOC @@ -50,7 +52,7 @@ Now you can say things like: * \param bytes new memory size */ Freelist * create_freelist( struct freelist_head * flh, int bytes ) { - Freelist * current = ( Freelist * )malloc( bytes ); + Freelist * current = ( Freelist * )sc_malloc( bytes ); if( current == 0 ) { return( 0 ); } @@ -123,7 +125,7 @@ void * ALLOC_new( struct freelist_head * flh ) { #endif #ifdef REAL_MALLOC - return( calloc( 1, flh->size_elt ) ); + return( sc_calloc( 1, flh->size_elt ) ); /*NOTREACHED*/ #else if( flh->freelist == NULL && 0 == create_freelist( flh, flh->bytes ) ) { @@ -156,7 +158,7 @@ void ALLOC_destroy( struct freelist_head * flh, Freelist * link ) { #endif #ifdef REAL_MALLOC - free( link ); + sc_free( link ); return; /*NOTREACHED*/ #else diff --git a/src/express/dict.c b/src/express/dict.c index 69d8d1dd8..3f6968d50 100644 --- a/src/express/dict.c +++ b/src/express/dict.c @@ -43,7 +43,7 @@ void DICTprint( Dictionary dict ) { Element e; DictionaryEntry de; - HASHlistinit( dict, &de ); + HASHlistinit( dict, &de, '*' ); while( 0 != ( e = ( HASHlist( &de ) ) ) ) { fprintf( stderr, "key <%s> data <%s> line <%d> <\"%c\" %s> <%s>\n", @@ -113,7 +113,7 @@ int DICTdefine( Dictionary dict, char * name, void *obj, Symbol * sym, char type * their unusual behavior with respect to scoping and visibility rules * \sa DICTdefine() */ -int DICT_define( Dictionary dict, char * name, void *obj, Symbol * sym, char type ) { +int DICTdefine_enum( Dictionary dict, char * name, void *obj, Symbol * sym, char type ) { struct Element_ e, *e2; e.key = name; diff --git a/src/express/entity.c b/src/express/entity.c index 507b2c23f..74551aee4 100644 --- a/src/express/entity.c +++ b/src/express/entity.c @@ -130,7 +130,7 @@ int ENTITYdeclares_variable( Entity e, Variable v ) { return false; } -static Entity ENTITY_find_inherited_entity( Entity entity, char * name, int down ) { +static Entity ENTITY_find_inherited_entity( Entity entity, const char * name, int down ) { Entity result; /* avoid searching scopes that we've already searched */ @@ -174,7 +174,7 @@ static Entity ENTITY_find_inherited_entity( Entity entity, char * name, int down return 0; } -struct Scope_ * ENTITYfind_inherited_entity( struct Scope_ *entity, char * name, int down ) { +struct Scope_ * ENTITYfind_inherited_entity( struct Scope_ *entity, const char * name, int down ) { if( !strcmp( name, entity->symbol.name ) ) { return( entity ); } @@ -184,8 +184,8 @@ struct Scope_ * ENTITYfind_inherited_entity( struct Scope_ *entity, char * name, } /** find a (possibly inherited) attribute */ -Variable ENTITY_find_inherited_attribute( Entity entity, char * name, int * down, struct Symbol_ ** where ) { - Variable result; +Symbol *ENTITY_find_inherited_attribute( Entity entity, const char * name, int * down, struct Symbol_ ** where ) { + Symbol *ep; /* avoid searching scopes that we've already searched */ /* this can happen due to several things */ @@ -198,19 +198,19 @@ Variable ENTITY_find_inherited_attribute( Entity entity, char * name, int * down entity->search_id = __SCOPE_search_id; /* first look locally */ - result = ( Variable )DICTlookup( entity->symbol_table, name ); - if( result ) { + ep = HASHsearch(entity->symbol_table, (Symbol) {.name = name}, HASH_FIND); + if (ep) { if( down && *down && where ) { *where = &entity->symbol; } - return result; + return ep; } /* check supertypes */ LISTdo( entity->u.entity->supertypes, super, Entity ) - result = ENTITY_find_inherited_attribute( super, name, down, where ); - if( result ) { - return result; + ep = ENTITY_find_inherited_attribute( super, name, down, where ); + if( ep ) { + return ep; } LISTod; @@ -218,18 +218,18 @@ Variable ENTITY_find_inherited_attribute( Entity entity, char * name, int * down if( down ) { ++*down; LISTdo( entity->u.entity->subtypes, sub, Entity ) - result = ENTITY_find_inherited_attribute( sub, name, down, where ); - if( result ) { - return result; + ep = ENTITY_find_inherited_attribute( sub, name, down, where ); + if( ep ) { + return ep; } LISTod; --*down; } - return 0; + return NULL; } -Variable ENTITYfind_inherited_attribute( struct Scope_ *entity, char * name, +Symbol *ENTITYfind_inherited_attribute( struct Scope_ *entity, const char * name, struct Symbol_ ** down_sym ) { extern int __SCOPE_search_id; int down_flag = 0; @@ -246,6 +246,7 @@ Variable ENTITYfind_inherited_attribute( struct Scope_ *entity, char * name, * report errors as appropriate */ Variable ENTITYresolve_attr_ref( Entity e, Symbol * grp_ref, Symbol * attr_ref ) { + Symbol *ep; Entity ref_entity; Variable attr; struct Symbol_ *where; @@ -257,13 +258,14 @@ Variable ENTITYresolve_attr_ref( Entity e, Symbol * grp_ref, Symbol * attr_ref ) ERRORreport_with_symbol(UNKNOWN_SUPERTYPE, grp_ref, grp_ref->name, e->symbol.name ); return 0; } - attr = ( Variable )DICTlookup( ref_entity->symbol_table, - attr_ref->name ); - if( !attr ) { + ep = HASHsearch(ref_entity->symbol_table, (Symbol) {.name = attr_ref->name}, HASH_FIND); + if (!ep) { ERRORreport_with_symbol(UNKNOWN_ATTR_IN_ENTITY, attr_ref, attr_ref->name, ref_entity->symbol.name ); /* resolve_failed(e);*/ + return 0; } + attr = ep->data; } else { /* no entity provided, look through supertype chain */ where = NULL; @@ -301,18 +303,21 @@ void ENTITYinitialize() { ** Add an attribute to an entity. */ void ENTITYadd_attribute( Entity entity, Variable attr ) { - int rc; + Symbol e, *ep; + memcpy(&e, &attr->name->symbol, sizeof(Symbol)); + e.data = attr; + e.type = OBJ_VARIABLE; + if( attr->name->type->u.type->body->type != op_ ) { /* simple id */ - rc = DICTdefine( entity->symbol_table, attr->name->symbol.name, - attr, &attr->name->symbol, OBJ_VARIABLE ); + ep = HASHsearch(entity->symbol_table, e, HASH_INSERT); } else { /* SELF\ENTITY.SIMPLE_ID */ - rc = DICTdefine( entity->symbol_table, attr->name->e.op2->symbol.name, - attr, &attr->name->symbol, OBJ_VARIABLE ); + e.name = attr->name->e.op2->symbol.name; + ep = HASHsearch( entity->symbol_table, e, HASH_INSERT); } - if( rc == 0 ) { + if( !ep ) { LISTadd_last( entity->u.entity->attributes, attr ); VARput_offset( attr, entity->u.entity->attribute_count ); entity->u.entity->attribute_count++; @@ -403,7 +408,7 @@ Linked_List ENTITYget_all_attributes( Entity entity ) { ** \note If the entity has no attribute with the given name, ** VARIABLE_NULL is returned. */ -Variable ENTITYget_named_attribute( Entity entity, char * name ) { +Variable ENTITYget_named_attribute( Entity entity, const char * name ) { Variable attribute; LISTdo( entity->u.entity->attributes, attr, Variable ) @@ -460,14 +465,19 @@ int ENTITYget_attribute_offset( Entity entity, Variable attribute ) { ** \note If the entity has no attribute with the given name, ** -1 is returned. */ -int ENTITYget_named_attribute_offset( Entity entity, char * name ) { +int ENTITYget_named_attribute_offset( Entity entity, const char * name ) { int offset; int value; + Symbol *ep; LISTdo( entity->u.entity->attributes, attr, Variable ) - if( !strcmp( VARget_simple_name( attr ), name ) ) - return entity->u.entity->inheritance + - VARget_offset( ENTITY_find_inherited_attribute( entity, name, 0, 0 ) ); + if (!strcmp( VARget_simple_name( attr ), name ) ) { + ep = ENTITY_find_inherited_attribute( entity, name, 0, 0 ); + if (!ep) + continue; + + return entity->u.entity->inheritance + VARget_offset((Variable) ep->data); + } LISTod; offset = 0; LISTdo( entity->u.entity->supertypes, super, Entity ) diff --git a/src/express/expparse.y b/src/express/expparse.y index f6bc296c2..acbeff691 100644 --- a/src/express/expparse.y +++ b/src/express/expparse.y @@ -1,134 +1,22 @@ -/** Lemon grammar for Express parser, based on SCL's expparse.y. */ -%include { -#include -#include "token_type.h" -#include "parse_data.h" +%start_symbol express_file -int yyerrstatus = 0; -#define yyerrok (yyerrstatus = 0) +%name yyparse -YYSTYPE yylval; +%extra_argument { struct YYSTATE *pState } +%token_type { struct YYSTYPE * } +%stack_size 0 - /* - * YACC grammar for Express parser. - * - * This software was developed by U.S. Government employees as part of - * their official duties and is not subject to copyright. - * - * $Log: expparse.y,v $ - * Revision 1.23 1997/11/14 17:09:04 libes - * allow multiple group references - * - * ** 22 older revision log records removed 3 January 2014 ** - */ +/* type definitions */ +%type case_action { Case_Item } +%type case_otherwise { Case_Item } -#include "express/symbol.h" -#include "express/linklist.h" -#include "stack.h" -#include "express/express.h" -#include "express/schema.h" -#include "express/entity.h" -#include "express/resolve.h" -#include "expscan.h" -#include - - extern int print_objects_while_running; - - int tag_count; /**< use this to count tagged GENERIC types in the formal - * argument lists. Gross, but much easier to do it this - * way then with the 'help' of yacc. Set it to -1 to - * indicate that tags cannot be defined, only used - * (outside of formal parameter list, i.e. for return - * types). Hey, as long as there's a gross hack sitting - * around, we might as well milk it for all it's worth! - * - snc - */ - - int local_var_count; /**< used to keep LOCAL variables in order - * used in combination with Variable.offset - */ - - Express yyexpresult; /* hook to everything built by parser */ - - Symbol *interface_schema; /* schema of interest in use/ref clauses */ - void (*interface_func)(); /* func to attach rename clauses */ - - /* record schemas found in a single parse here, allowing them to be */ - /* differentiated from other schemas parsed earlier */ - Linked_List PARSEnew_schemas; - - void SCANskip_to_end_schema(perplex_t scanner); - - int yylineno; - - bool yyeof = false; - -#define MAX_SCOPE_DEPTH 20 /* max number of scopes that can be nested */ - - static struct scope { - struct Scope_ *this_; - char type; /* one of OBJ_XXX */ - struct scope *pscope; /* pointer back to most recent scope */ - /* that has a printable name - for better */ - /* error messages */ - } scopes[MAX_SCOPE_DEPTH], *scope; -#define CURRENT_SCOPE (scope->this_) -#define PREVIOUS_SCOPE ((scope-1)->this_) -#define CURRENT_SCHEMA (scope->this_->u.schema) -#define CURRENT_SCOPE_NAME (OBJget_symbol(scope->pscope->this_,scope->pscope->type)->name) -#define CURRENT_SCOPE_TYPE_PRINTABLE (OBJget_type(scope->pscope->type)) - - /* ths = new scope to enter */ - /* sym = name of scope to enter into parent. Some scopes (i.e., increment) */ - /* are not named, in which case sym should be 0 */ - /* This is useful for when a diagnostic is printed, an earlier named */ - /* scoped can be used */ - /* typ = type of scope */ -#define PUSH_SCOPE(ths,sym,typ) \ - if (sym) DICTdefine(scope->this_->symbol_table,(sym)->name,(Generic)ths,sym,typ);\ - ths->superscope = scope->this_; \ - scope++; \ - scope->type = typ; \ - scope->pscope = (sym?scope:(scope-1)->pscope); \ - scope->this_ = ths; \ - if (sym) { \ - ths->symbol = *(sym); \ - } -#define POP_SCOPE() scope-- - - /* PUSH_SCOPE_DUMMY just pushes the scope stack with nothing actually on it */ - /* Necessary for situations when a POP_SCOPE is unnecessary but inevitable */ -#define PUSH_SCOPE_DUMMY() scope++ - - /* normally the superscope is added by PUSH_SCOPE, but some things (types) */ - /* bother to get pushed so fix them this way */ -#define SCOPEadd_super(ths) ths->superscope = scope->this_; - -#define ERROR(code) ERRORreport(code, yylineno) - -void parserInitState() -{ - scope = scopes; - /* no need to define scope->this */ - scope->this_ = yyexpresult; - scope->pscope = scope; - scope->type = OBJ_EXPRESS; - yyexpresult->symbol.name = yyexpresult->u.express->filename; - yyexpresult->symbol.filename = yyexpresult->u.express->filename; - yyexpresult->symbol.line = 1; -} -} /* include */ +%type case_action_list { Linked_List } +%type case_label_list { Linked_List } -%extra_argument { parse_data_t parseData } +%type expression { Expression } -%destructor statement_list { - if (parseData.scanner == NULL) { - $$.string = (char*)NULL; - } -} - -%type case_action { Case_Item } -%type case_otherwise { Case_Item } +/************** OLD type definitions ***************/ +/* %type entity_body { struct entity_body } %type aggregate_init_element { Expression } @@ -137,7 +25,7 @@ void parserInitState() %type attribute_decl { Expression } %type by_expression { Expression } %type constant { Expression } -%type expression { Expression } + %type function_call { Expression } %type general_ref { Expression } %type group_ref { Expression } @@ -167,7 +55,6 @@ void parserInitState() %type actual_parameters { Linked_List } %type aggregate_init_body { Linked_List } %type explicit_attr_list { Linked_List } -%type case_action_list { Linked_List } %type case_block { Linked_List } %type case_labels { Linked_List } %type where_clause_list { Linked_List } @@ -180,7 +67,6 @@ void parserInitState() %type id_list { Linked_List } %type defined_type_list { Linked_List } %type nested_id_list { Linked_List } -/*repeat_control_list*/ %type statement_rep { Linked_List } %type subtype_decl { Linked_List } %type where_rule { Linked_List } @@ -196,7 +82,6 @@ void parserInitState() %type unique_clause { Linked_List } %type rule_formal_parameter_list { Linked_List } %type qualified_attr_list { Linked_List } -/* remove labelled_attrib_list if this works */ %type rel_op { Op_Code } @@ -256,2191 +141,677 @@ void parserInitState() %type rule_formal_parameter { Variable } %type where_clause { Where } +*/ +/************ END OLD type definitions *************/ +/* tokens not in the grammar */ +%nonassoc T_INVALID T_DOCROOT T_RULE_REF T_RULE_LABEL_REF . -%left TOK_EQUAL - TOK_GREATER_EQUAL - TOK_GREATER_THAN - TOK_IN - TOK_INST_EQUAL - TOK_INST_NOT_EQUAL - TOK_LESS_EQUAL - TOK_LESS_THAN - TOK_LIKE TOK_NOT_EQUAL. - -%left TOK_MINUS - TOK_PLUS - TOK_OR - TOK_XOR. - -%left TOK_DIV - TOK_MOD - TOK_REAL_DIV - TOK_TIMES - TOK_AND - TOK_ANDOR - TOK_CONCAT_OP. - -%right TOK_EXP. - -%left TOK_NOT. - -%nonassoc TOK_DOT - TOK_BACKSLASH - TOK_LEFT_BRACKET. - -%start_symbol express_file - -%token_type { YYSTYPE } - -action_body(A) ::= action_body_item_rep statement_rep(B). -{ - A = B; -} - -/* this should be rewritten to force order, see comment on next production */ -action_body_item(A) ::= declaration(B). -{ - A = B; -} -action_body_item(A) ::= constant_decl(B). -{ - A = B; -} -action_body_item(A) ::= local_decl(B). -{ - A = B; -} - -/* this corresponds to 'algorithm_head' in N14-ese but it should be rewritten - * to force declarations followed by constants followed by local_decls - */ -action_body_item_rep ::= /* NULL item */. -action_body_item_rep(A) ::= action_body_item(B) action_body_item_rep. -{ - A = B; -} - -/* NOTE: can actually go to NULL, but it's a semantic problem */ -/* to disambiguate this from a simple identifier, so let a call */ -/* with no parameters be parsed as an identifier for now. */ - -/* another problem is that x() is always an entity. func/proc calls - * with no args are called as "x". By the time resolution occurs - * and we find out whether or not x is an entity or func/proc, we will - * no longer have the information about whether there were parens! - */ - -/* EXPRESS is simply wrong to handle these two cases differently. */ - -actual_parameters(A) ::= TOK_LEFT_PAREN expression_list(B) TOK_RIGHT_PAREN. -{ - A = B; -} -actual_parameters(A) ::= TOK_LEFT_PAREN TOK_RIGHT_PAREN. -{ - A = 0; -} - -/* I give up - why does 2nd parm of AGGR_LIT have to be non-null? */ -aggregate_initializer(A) ::= TOK_LEFT_BRACKET TOK_RIGHT_BRACKET. -{ - A = EXPcreate(Type_Aggregate); - A->u.list = LISTcreate(); -} -aggregate_initializer(A) ::= TOK_LEFT_BRACKET aggregate_init_body(B) -TOK_RIGHT_BRACKET. -{ - A = EXPcreate(Type_Aggregate); - A->u.list = B; -} - -aggregate_init_element(A) ::= expression(B). -{ - A = B; -} - -aggregate_init_body(A) ::= aggregate_init_element(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -aggregate_init_body(A) ::= aggregate_init_element(B) TOK_COLON expression(C). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); - - LISTadd_last(A, (Generic)C); - - C->type = Type_Repeat; -} -aggregate_init_body(A) ::= aggregate_init_body(B) TOK_COMMA - aggregate_init_element(C). -{ - A = B; - - LISTadd_last(A, (Generic)C); - -} -aggregate_init_body(A) ::= aggregate_init_body(B) TOK_COMMA - aggregate_init_element(C) TOK_COLON expression(D). -{ - A = B; - - LISTadd_last(A, (Generic)C); - LISTadd_last(A, (Generic)D); - - D->type = Type_Repeat; -} - -aggregate_type(A) ::= TOK_AGGREGATE TOK_OF parameter_type(B). -{ - A = TYPEBODYcreate(aggregate_); - A->base = B; - - if (tag_count < 0) { - Symbol sym; - sym.line = yylineno; - sym.filename = current_filename; - ERRORreport_with_symbol(UNLABELLED_PARAM_TYPE, &sym, - CURRENT_SCOPE_NAME); - } -} -aggregate_type(A) ::= TOK_AGGREGATE TOK_COLON TOK_IDENTIFIER(B) TOK_OF - parameter_type(C). -{ - Type t = TYPEcreate_user_defined_tag(C, CURRENT_SCOPE, B.symbol); - - if (t) { - SCOPEadd_super(t); - A = TYPEBODYcreate(aggregate_); - A->tag = t; - A->base = C; - } -} - -aggregation_type(A) ::= array_type(B). -{ - A = B; -} -aggregation_type(A) ::= bag_type(B). -{ - A = B; -} -aggregation_type(A) ::= list_type(B). -{ - A = B; -} -aggregation_type(A) ::= set_type(B). -{ - A = B; -} - -alias_statement(A) ::= TOK_ALIAS TOK_IDENTIFIER(B) TOK_FOR general_ref(C) - semicolon alias_push_scope statement_rep(D) - TOK_END_ALIAS semicolon. -{ - Expression e = EXPcreate_from_symbol(Type_Attribute, B.symbol); - Variable v = VARcreate(e, Type_Unknown); - - v->initializer = C; - - DICTdefine(CURRENT_SCOPE->symbol_table, B.symbol->name, (Generic)v, - B.symbol, OBJ_VARIABLE); - A = ALIAScreate(CURRENT_SCOPE, v, D); - - POP_SCOPE(); -} - -alias_push_scope ::= /* subroutine */. -{ - struct Scope_ *s = SCOPEcreate_tiny(OBJ_ALIAS); - PUSH_SCOPE(s, (Symbol *)0, OBJ_ALIAS); -} - -array_type(A) ::= TOK_ARRAY bound_spec(B) TOK_OF optional_or_unique(C) - attribute_type(D). -{ - A = TYPEBODYcreate(array_); - - A->flags.optional = C.optional; - A->flags.unique = C.unique; - A->upper = B.upper_limit; - A->lower = B.lower_limit; - A->base = D; -} - -/* this is anything that can be assigned to */ -assignable(A) ::= assignable(B) qualifier(C). -{ - C.first->e.op1 = B; - A = C.expr; -} -assignable(A) ::= identifier(B). -{ - A = B; -} - -assignment_statement(A) ::= assignable(B) TOK_ASSIGNMENT expression(C) - semicolon. -{ - A = ASSIGNcreate(B, C); -} - -attribute_type(A) ::= aggregation_type(B). -{ - A = TYPEcreate_from_body_anonymously(B); - SCOPEadd_super(A); -} -attribute_type(A) ::= basic_type(B). -{ - A = TYPEcreate_from_body_anonymously(B); - SCOPEadd_super(A); -} -attribute_type(A) ::= defined_type(B). -{ - A = B; -} - -explicit_attr_list(A) ::= /* NULL body */. -{ - A = LISTcreate(); -} -explicit_attr_list(A) ::= explicit_attr_list(B) explicit_attribute(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} - -bag_type(A) ::= TOK_BAG bound_spec(B) TOK_OF attribute_type(C). -{ - A = TYPEBODYcreate(bag_); - A->base = C; - A->upper = B.upper_limit; - A->lower = B.lower_limit; -} -bag_type(A) ::= TOK_BAG TOK_OF attribute_type(B). -{ - A = TYPEBODYcreate(bag_); - A->base = B; -} - -basic_type(A) ::= TOK_BOOLEAN. -{ - A = TYPEBODYcreate(boolean_); -} -basic_type(A) ::= TOK_INTEGER precision_spec(B). -{ - A = TYPEBODYcreate(integer_); - A->precision = B; -} -basic_type(A) ::= TOK_REAL precision_spec(B). -{ - A = TYPEBODYcreate(real_); - A->precision = B; -} -basic_type(A) ::= TOK_NUMBER. -{ - A = TYPEBODYcreate(number_); -} -basic_type(A) ::= TOK_LOGICAL. -{ - A = TYPEBODYcreate(logical_); -} -basic_type(A) ::= TOK_BINARY precision_spec(B) optional_fixed(C). -{ - A = TYPEBODYcreate(binary_); - A->precision = B; - A->flags.fixed = C.fixed; -} -basic_type(A) ::= TOK_STRING precision_spec(B) optional_fixed(C). -{ - A = TYPEBODYcreate(string_); - A->precision = B; - A->flags.fixed = C.fixed; -} - -block_list ::= /* NULL */. -block_list(A) ::= block_list(B) block_member. -{ - A = B; -} - -block_member(A) ::= declaration(B). -{ - A = B; -} -block_member(A) ::= include_directive(B). -{ - A = B; -} -block_member(A) ::= rule_decl(B). -{ - A = B; -} - -by_expression(A) ::= /* NULL by_expression */. -{ - A = LITERAL_ONE; -} -by_expression(A) ::= TOK_BY expression(B). -{ - A = B; -} - -cardinality_op(A) ::= TOK_LEFT_CURL expression(B) TOK_COLON expression(C) - TOK_RIGHT_CURL. -{ - A.lower_limit = B; - A.upper_limit = C; -} - -case_action(A) ::= case_labels(B) TOK_COLON statement(C). -{ - A = CASE_ITcreate(B, C); - SYMBOLset(A); -} - -case_action_list(A) ::= /* no case_actions */. -{ - A = LISTcreate(); -} -case_action_list(A) ::= case_action_list(B) case_action(C). -{ - yyerrok; - - A = B; - - LISTadd_last(A, (Generic)C); -} - -case_block(A) ::= case_action_list(B) case_otherwise(C). -{ - A = B; - - if (C) { - LISTadd_last(A, - (Generic)C); - } -} - -case_labels(A) ::= expression(B). -{ - A = LISTcreate(); - - LISTadd_last(A, (Generic)B); -} -case_labels(A) ::= case_labels(B) TOK_COMMA expression(C). -{ - yyerrok; - - A = B; - LISTadd_last(A, (Generic)C); -} - -case_otherwise(A) ::= /* no otherwise clause */. -{ - A = (Case_Item)0; -} -case_otherwise(A) ::= TOK_OTHERWISE TOK_COLON statement(B). -{ - A = CASE_ITcreate(LIST_NULL, B); - SYMBOLset(A); -} - -case_statement(A) ::= TOK_CASE expression(B) TOK_OF case_block(C) TOK_END_CASE - semicolon. -{ - A = CASEcreate(B, C); -} +/* precedence */ +%left T_EQ T_NEQ T_LTEQ T_GTEQ T_LT T_GT T_INST_EQ T_INST_NEQ T_IN T_LIKE . +%left T_PLUS T_MINUS T_OR T_XOR T_ANDOR . +%left T_TIMES T_RDIV T_IDIV T_MOD T_AND T_CONCAT . +%right T_EXP . +%right UNARY_OP . +%left T_LBRKT T_RBRKT T_LPAREN T_RPAREN T_ONEOF . +%nonassoc T_DOT T_BACKSLASH . -compound_statement(A) ::= TOK_BEGIN statement_rep(B) TOK_END semicolon. -{ - A = COMP_STMTcreate(B); -} - -constant(A) ::= TOK_PI. -{ - A = LITERAL_PI; -} - -constant(A) ::= TOK_E. -{ - A = LITERAL_E; -} - -/* package this up as an attribute */ -constant_body ::= identifier(A) TOK_COLON attribute_type(B) TOK_ASSIGNMENT - expression(C) semicolon. -{ - Variable v; - - A->type = B; - v = VARcreate(A, B); - v->initializer = C; - v->flags.constant = 1; - DICTdefine(CURRENT_SCOPE->symbol_table, A->symbol.name, (Generic)v, - &A->symbol, OBJ_VARIABLE); -} - -constant_body_list ::= /* NULL */. -constant_body_list(A) ::= constant_body(B) constant_body_list. -{ - A = B; -} - -constant_decl(A) ::= TOK_CONSTANT(B) constant_body_list TOK_END_CONSTANT - semicolon. -{ - A = B; -} - -declaration(A) ::= entity_decl(B). -{ - A = B; -} -declaration(A) ::= function_decl(B). -{ - A = B; -} -declaration(A) ::= procedure_decl(B). -{ - A = B; -} -declaration(A) ::= type_decl(B). -{ - A = B; -} - -derive_decl(A) ::= /* NULL body */. -{ - A = LISTcreate(); -} -derive_decl(A) ::= TOK_DERIVE derived_attribute_rep(B). -{ - A = B; -} - -derived_attribute(A) ::= attribute_decl(B) TOK_COLON attribute_type(C) - initializer(D) semicolon. -{ - A = VARcreate(B, C); - A->initializer = D; - A->flags.attribute = true; -} - -derived_attribute_rep(A) ::= derived_attribute(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -derived_attribute_rep(A) ::= derived_attribute_rep(B) derived_attribute(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} - -entity_body(A) ::= explicit_attr_list(B) derive_decl(C) inverse_clause(D) - unique_clause(E) where_rule_OPT(F). -{ - A.attributes = B; - /* this is flattened out in entity_decl - DEL */ - LISTadd_last(A.attributes, (Generic)C); - - if (D != LIST_NULL) { - LISTadd_last(A.attributes, (Generic)D); - } - - A.unique = E; - A.where = F; -} - -entity_decl ::= entity_header subsuper_decl(A) semicolon entity_body(B) - TOK_END_ENTITY semicolon. -{ - CURRENT_SCOPE->u.entity->subtype_expression = A.subtypes; - CURRENT_SCOPE->u.entity->supertype_symbols = A.supertypes; - LISTdo( B.attributes, l, Linked_List ) { - LISTdo_n( l, a, Variable, b ) { - ENTITYadd_attribute(CURRENT_SCOPE, a); - } LISTod; - } LISTod; - CURRENT_SCOPE->u.entity->abstract = A.abstract; - CURRENT_SCOPE->u.entity->unique = B.unique; - CURRENT_SCOPE->where = B.where; - POP_SCOPE(); -} - -entity_header ::= TOK_ENTITY TOK_IDENTIFIER(A). -{ - Entity e = ENTITYcreate(A.symbol); - - if (print_objects_while_running & OBJ_ENTITY_BITS) { - fprintf( stderr, "parse: %s (entity)\n", A.symbol->name); - } - - PUSH_SCOPE(e, A.symbol, OBJ_ENTITY); -} - -enumeration_type ::= TOK_ENUMERATION TOK_OF nested_id_list(A). -{ - int value = 0; - Expression x; - Symbol *tmp; - TypeBody tb; - tb = TYPEBODYcreate(enumeration_); - CURRENT_SCOPE->u.type->head = 0; - CURRENT_SCOPE->u.type->body = tb; - tb->list = A; - - if (!CURRENT_SCOPE->symbol_table) { - CURRENT_SCOPE->symbol_table = DICTcreate(25); - } - if (!PREVIOUS_SCOPE->enum_table) { - PREVIOUS_SCOPE->enum_table = DICTcreate(25); - } - LISTdo_links(A, id) { - tmp = (Symbol *)id->data; - id->data = (Generic)(x = EXPcreate(CURRENT_SCOPE)); - x->symbol = *(tmp); - x->u.integer = ++value; - - /* define both in enum scope and scope of */ - /* 1st visibility */ - DICT_define(CURRENT_SCOPE->symbol_table, x->symbol.name, - (Generic)x, &x->symbol, OBJ_EXPRESSION); - DICTdefine(PREVIOUS_SCOPE->enum_table, x->symbol.name, - (Generic)x, &x->symbol, OBJ_EXPRESSION); - SYMBOL_destroy(tmp); - } LISTod; -} - -escape_statement(A) ::= TOK_ESCAPE semicolon. -{ - A = STATEMENT_ESCAPE; -} - -/* 10303-11:2004 production 177 - * attribute_decl = attribute_id | redeclared_attribute . - * - * also - * 178 attribute_id = simple_id . - * 279 redeclared_attribute = qualified_attribute [ RENAMED attribute_id ] . - * 275 qualified_attribute = SELF group_qualifier attribute_qualifier . - * - * NOTE - production 279 isn't implemented - */ -attribute_decl(A) ::= TOK_IDENTIFIER(B). -{ - A = EXPcreate(Type_Attribute); - A->symbol = *B.symbol; - SYMBOL_destroy(B.symbol); -} -attribute_decl(A) ::= TOK_SELF TOK_BACKSLASH TOK_IDENTIFIER(B) TOK_DOT - TOK_IDENTIFIER(C). -{ - A = EXPcreate(Type_Expression); - A->e.op1 = EXPcreate(Type_Expression); - A->e.op1->e.op_code = OP_GROUP; - A->e.op1->e.op1 = EXPcreate(Type_Self); - A->e.op1->e.op2 = EXPcreate_from_symbol(Type_Entity, B.symbol); - SYMBOL_destroy(B.symbol); - - A->e.op_code = OP_DOT; - A->e.op2 = EXPcreate_from_symbol(Type_Attribute, C.symbol); - SYMBOL_destroy(C.symbol); -} - -attribute_decl_list(A) ::= attribute_decl(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); - -} -attribute_decl_list(A) ::= attribute_decl_list(B) TOK_COMMA - attribute_decl(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} - -optional(A) ::= /*NULL*/. -{ - A.optional = 0; -} -optional(A) ::= TOK_OPTIONAL. -{ - A.optional = 1; -} - -explicit_attribute(A) ::= attribute_decl_list(B) TOK_COLON optional(C) - attribute_type(D) semicolon. -{ - Variable v; - - LISTdo_links (B, attr) - v = VARcreate((Expression)attr->data, D); - v->flags.optional = C.optional; - v->flags.attribute = true; - attr->data = (Generic)v; - LISTod; - - A = B; -} - -express_file ::= schema_decl_list. - -schema_decl_list(A) ::= schema_decl(B). -{ - A = B; -} -schema_decl_list(A) ::= schema_decl_list(B) schema_decl. -{ - A = B; -} - -expression(A) ::= simple_expression(B). -{ - A = B; -} -expression(A) ::= expression(B) TOK_AND expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_AND, B, C); -} -expression(A) ::= expression(B) TOK_OR expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_OR, B, C); -} -expression(A) ::= expression(B) TOK_XOR expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_XOR, B, C); -} -expression(A) ::= expression(B) TOK_LESS_THAN expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_LESS_THAN, B, C); -} -expression(A) ::= expression(B) TOK_GREATER_THAN expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_GREATER_THAN, B, C); -} -expression(A) ::= expression(B) TOK_EQUAL expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_EQUAL, B, C); -} -expression(A) ::= expression(B) TOK_LESS_EQUAL expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_LESS_EQUAL, B, C); -} -expression(A) ::= expression(B) TOK_GREATER_EQUAL expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_GREATER_EQUAL, B, C); -} -expression(A) ::= expression(B) TOK_NOT_EQUAL expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_NOT_EQUAL, B, C); -} -expression(A) ::= expression(B) TOK_INST_EQUAL expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_INST_EQUAL, B, C); -} -expression(A) ::= expression(B) TOK_INST_NOT_EQUAL expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_INST_NOT_EQUAL, B, C); -} -expression(A) ::= expression(B) TOK_IN expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_IN, B, C); -} -expression(A) ::= expression(B) TOK_LIKE expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_LIKE, B, C); -} -expression ::= simple_expression cardinality_op simple_expression. -{ - yyerrok; -} - -simple_expression(A) ::= unary_expression(B). -{ - A = B; -} -simple_expression(A) ::= simple_expression(B) TOK_CONCAT_OP - simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_CONCAT, B, C); -} -simple_expression(A) ::= simple_expression(B) TOK_EXP simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_EXP, B, C); -} -simple_expression(A) ::= simple_expression(B) TOK_TIMES simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_TIMES, B, C); -} -simple_expression(A) ::= simple_expression(B) TOK_DIV simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_DIV, B, C); -} -simple_expression(A) ::= simple_expression(B) TOK_REAL_DIV simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_REAL_DIV, B, C); -} -simple_expression(A) ::= simple_expression(B) TOK_MOD simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_MOD, B, C); -} -simple_expression(A) ::= simple_expression(B) TOK_PLUS simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_PLUS, B, C); -} -simple_expression(A) ::= simple_expression(B) TOK_MINUS simple_expression(C). -{ - yyerrok; - - A = BIN_EXPcreate(OP_MINUS, B, C); -} - -expression_list(A) ::= expression(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -expression_list(A) ::= expression_list(B) TOK_COMMA expression(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} - -var(A) ::= /* NULL */. -{ - A.var = 0; -} -var(A) ::= TOK_VAR. -{ - A.var = 1; -} - -formal_parameter(A) ::= var(B) id_list(C) TOK_COLON parameter_type(D). -{ - Symbol *tmp; - Expression e; - Variable v; - - A = C; - LISTdo_links(A, param) - tmp = (Symbol*)param->data; - - e = EXPcreate_from_symbol(Type_Attribute, tmp); - v = VARcreate(e, D); - v->flags.var = B.var; /* NOTE this was flags.optional... ?! */ - v->flags.parameter = true; - param->data = (Generic)v; - - /* link it in to the current scope's dict */ - DICTdefine(CURRENT_SCOPE->symbol_table, - tmp->name, (Generic)v, tmp, OBJ_VARIABLE); - - LISTod; -} - -formal_parameter_list(A) ::= /* no parameters */. -{ - A = LIST_NULL; -} -formal_parameter_list(A) ::= TOK_LEFT_PAREN formal_parameter_rep(B) - TOK_RIGHT_PAREN. -{ - A = B; - -} - -formal_parameter_rep(A) ::= formal_parameter(B). -{ - A = B; - -} -formal_parameter_rep(A) ::= formal_parameter_rep(B) semicolon - formal_parameter(C). -{ - A = B; - LISTadd_all(A, C); -} - -parameter_type(A) ::= basic_type(B). -{ - A = TYPEcreate_from_body_anonymously(B); - SCOPEadd_super(A); -} -parameter_type(A) ::= conformant_aggregation(B). -{ - A = TYPEcreate_from_body_anonymously(B); - SCOPEadd_super(A); -} -parameter_type(A) ::= defined_type(B). -{ - A = B; -} -parameter_type(A) ::= generic_type(B). -{ - A = B; -} - -function_call(A) ::= function_id(B) actual_parameters(C). -{ - A = EXPcreate(Type_Funcall); - A->symbol = *B; - SYMBOL_destroy(B); - A->u.funcall.list = C; -} - -function_decl ::= function_header(A) action_body(B) TOK_END_FUNCTION - semicolon. -{ - FUNCput_body(CURRENT_SCOPE, B); - ALGput_full_text(CURRENT_SCOPE, A, SCANtell()); - POP_SCOPE(); -} - -function_header(A) ::= fh_lineno(B) fh_push_scope fh_plist TOK_COLON - parameter_type(C) semicolon. -{ - Function f = CURRENT_SCOPE; - - f->u.func->return_type = C; - A = B; -} - -fh_lineno(A) ::= TOK_FUNCTION. -{ - A = SCANtell(); -} - -fh_push_scope ::= TOK_IDENTIFIER(A). -{ - Function f = ALGcreate(OBJ_FUNCTION); - tag_count = 0; - if (print_objects_while_running & OBJ_FUNCTION_BITS) { - fprintf( stderr, "parse: %s (function)\n", A.symbol->name); - } - PUSH_SCOPE(f, A.symbol, OBJ_FUNCTION); -} - -fh_plist ::= formal_parameter_list(A). -{ - Function f = CURRENT_SCOPE; - f->u.func->parameters = A; - f->u.func->pcount = LISTget_length(A); - f->u.func->tag_count = tag_count; - tag_count = -1; /* done with parameters, no new tags can be defined */ -} - -function_id(A) ::= TOK_IDENTIFIER(B). -{ - A = B.symbol; -} -function_id(A) ::= TOK_BUILTIN_FUNCTION(B). -{ - A = B.symbol; - -} - -conformant_aggregation(A) ::= aggregate_type(B). -{ - A = B; - -} -conformant_aggregation(A) ::= TOK_ARRAY TOK_OF optional_or_unique(B) - parameter_type(C). -{ - A = TYPEBODYcreate(array_); - A->flags.optional = B.optional; - A->flags.unique = B.unique; - A->base = C; -} -conformant_aggregation(A) ::= TOK_ARRAY bound_spec(B) TOK_OF - optional_or_unique(C) parameter_type(D). -{ - A = TYPEBODYcreate(array_); - A->flags.optional = C.optional; - A->flags.unique = C.unique; - A->base = D; - A->upper = B.upper_limit; - A->lower = B.lower_limit; -} -conformant_aggregation(A) ::= TOK_BAG TOK_OF parameter_type(B). -{ - A = TYPEBODYcreate(bag_); - A->base = B; - -} -conformant_aggregation(A) ::= TOK_BAG bound_spec(B) TOK_OF parameter_type(C). -{ - A = TYPEBODYcreate(bag_); - A->base = C; - A->upper = B.upper_limit; - A->lower = B.lower_limit; -} -conformant_aggregation(A) ::= TOK_LIST TOK_OF unique(B) parameter_type(C). -{ - A = TYPEBODYcreate(list_); - A->flags.unique = B.unique; - A->base = C; - -} -conformant_aggregation(A) ::= TOK_LIST bound_spec(B) TOK_OF unique(C) - parameter_type(D). -{ - A = TYPEBODYcreate(list_); - A->base = D; - A->flags.unique = C.unique; - A->upper = B.upper_limit; - A->lower = B.lower_limit; -} -conformant_aggregation(A) ::= TOK_SET TOK_OF parameter_type(B). -{ - A = TYPEBODYcreate(set_); - A->base = B; -} -conformant_aggregation(A) ::= TOK_SET bound_spec(B) TOK_OF parameter_type(C). -{ - A = TYPEBODYcreate(set_); - A->base = C; - A->upper = B.upper_limit; - A->lower = B.lower_limit; -} - -generic_type(A) ::= TOK_GENERIC. -{ - A = Type_Generic; - - if (tag_count < 0) { - Symbol sym; - sym.line = yylineno; - sym.filename = current_filename; - ERRORreport_with_symbol(UNLABELLED_PARAM_TYPE, &sym, - CURRENT_SCOPE_NAME); - } -} -generic_type(A) ::= TOK_GENERIC TOK_COLON TOK_IDENTIFIER(B). -{ - TypeBody g = TYPEBODYcreate(generic_); - A = TYPEcreate_from_body_anonymously(g); - - SCOPEadd_super(A); - - g->tag = TYPEcreate_user_defined_tag(A, CURRENT_SCOPE, B.symbol); - if (g->tag) { - SCOPEadd_super(g->tag); - } -} - -id_list(A) ::= TOK_IDENTIFIER(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B.symbol); +%include { -} -id_list(A) ::= id_list(B) TOK_COMMA TOK_IDENTIFIER(C). -{ - yyerrok; +#include +#include +#include +#include - A = B; - LISTadd_last(A, (Generic)C.symbol); -} +#include "bstrlib.h" +#include "lexsupport.h" -identifier(A) ::= TOK_SELF. -{ - A = EXPcreate(Type_Self); -} -identifier(A) ::= TOK_QUESTION_MARK. -{ - A = LITERAL_INFINITY; -} -identifier(A) ::= TOK_IDENTIFIER(B). -{ - A = EXPcreate(Type_Identifier); - A->symbol = *(B.symbol); - SYMBOL_destroy(B.symbol); -} +Linked_List PARSEnew_schemas; -if_statement(A) ::= TOK_IF expression(B) TOK_THEN statement_rep(C) TOK_END_IF - semicolon. -{ - A = CONDcreate(B, C, STATEMENT_LIST_NULL); -} -if_statement(A) ::= TOK_IF expression(B) TOK_THEN statement_rep(C) TOK_ELSE - statement_rep(D) TOK_END_IF semicolon. -{ - A = CONDcreate(B, C, D); } -include_directive ::= TOK_INCLUDE TOK_STRING_LITERAL(A) semicolon. -{ - SCANinclude_file(A.string); -} +schema_id ::= T_SIMPLE_ID . +rule_id ::= T_SIMPLE_ID . +subtype_constraint_id ::= T_SIMPLE_ID . +parameter_id ::= T_SIMPLE_ID . +variable_id ::= T_SIMPLE_ID . +attribute_id ::= T_SIMPLE_ID . +enumeration_id ::= T_SIMPLE_ID . -increment_control ::= TOK_IDENTIFIER(A) TOK_ASSIGNMENT expression(B) TOK_TO - expression(C) by_expression(D). -{ - Increment i = INCR_CTLcreate(A.symbol, B, C, D); +type_label_id ::= T_SIMPLE_ID . +rule_label_id ::= T_SIMPLE_ID . - /* scope doesn't really have/need a name, I suppose */ - /* naming it by the iterator variable is fine */ +schema_ref ::= T_SCHEMA_REF . +function_ref ::= T_FUNCTION_REF . +procedure_ref ::= T_PROCEDURE_REF . +type_ref ::= T_TYPE_REF . +entity_ref ::= T_ENTITY_REF . - PUSH_SCOPE(i, (Symbol *)0, OBJ_INCREMENT); -} +parameter_ref ::= T_PARAMETER_REF . +variable_ref ::= T_VARIABLE_REF . +constant_ref ::= T_CONSTANT_REF . +enumeration_ref ::= T_ENUMERATION_REF. -initializer(A) ::= TOK_ASSIGNMENT expression(B). -{ - A = B; -} +attribute_ref ::= T_SIMPLE_REF . -/* 10303-11:2004 production 259 - * named_type_or_rename = named_types [ AS ( entity_id | type_id ) ] . - */ -rename ::= TOK_IDENTIFIER(A). -{ - (*interface_func)(CURRENT_SCOPE, interface_schema, A.symbol, A.symbol); -} -rename ::= TOK_IDENTIFIER(A) TOK_AS TOK_IDENTIFIER(B). -{ - (*interface_func)(CURRENT_SCOPE, interface_schema, A.symbol, B.symbol); -} +abstract_supertype ::= T_ABSTRACT T_SUPERTYPE T_SEMICOLON . +abstract_supertype ::= . -rename_list(A) ::= rename(B). -{ - A = B; -} -rename_list(A) ::= rename_list(B) TOK_COMMA rename. -{ - A = B; -} +abstract_entity_declaration ::= T_ABSTRACT . +abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE . +abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE subtype_constraint . -/* 10303-11:2004 production 336 - * use_clause = USE FROM schema_ref [ ’(’ named_type_or_rename { ’,’ named_type_or_rename } ’)’ ] ’;’ . - */ -parened_rename_list ::= TOK_LEFT_PAREN rename_list TOK_RIGHT_PAREN. + /* + * to avoid the parser choking, we define actual_parameter_list like this + * you'll find the brackets where actual_parameter_list is consumed + * TODO: is this still true - tbc / rework + */ +actual_parameter_list ::= actual_parameter_list T_COMMA parameter . +actual_parameter_list ::= parameter . + +add_like_op ::= T_PLUS . +add_like_op ::= T_MINUS . +add_like_op ::= T_OR . +add_like_op ::= T_XOR . + +element_list ::= element_list T_COMMA element . +element_list ::= element . +aggregate_initializer ::= T_LBRKT element_list T_RBRKT . +aggregate_initializer ::= T_LBRKT T_RBRKT . + +aggregate_source ::= simple_expression . +aggregate_type ::= T_AGGREGATE T_OF parameter_type . +aggregate_type ::= T_AGGREGATE T_COLON type_label T_OF parameter_type . + +aggregation_types ::= array_type . +aggregation_types ::= bag_type . +aggregation_types ::= list_type . +aggregation_types ::= set_type . + +algorithm_head ::= declaration_list constant_decl local_decl . + +declaration_list ::= declaration_list declaration . +declaration_list ::= . -reference_clause ::= TOK_REFERENCE TOK_FROM TOK_IDENTIFIER(A) semicolon. -{ - if (!CURRENT_SCHEMA->ref_schemas) { - CURRENT_SCHEMA->ref_schemas = LISTcreate(); - } +stmt_list ::= stmt_list stmt . +stmt_list ::= stmt . - LISTadd_last(CURRENT_SCHEMA->ref_schemas, (Generic)A.symbol); -} -reference_clause(A) ::= reference_head(B) parened_rename_list semicolon. -{ - A = B; -} +qualifier_list ::= qualifier_list qualifier . +qualifier_list ::= . + +alias_stmt ::= T_ALIAS variable_id T_FOR general_ref qualifier_list T_SEMICOLON stmt_list T_END_ALIAS T_SEMICOLON . + +array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE instantiable_type . +array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL instantiable_type . +array_type ::= T_ARRAY bound_spec T_OF instantiable_type . -reference_head ::= TOK_REFERENCE TOK_FROM TOK_IDENTIFIER(A). -{ - interface_schema = A.symbol; - interface_func = SCHEMAadd_reference; -} +assignment_stmt ::= general_ref qualifier_list T_ASSIGN expression T_SEMICOLON . +attribute_decl ::= attribute_id . +attribute_decl ::= redeclared_attribute . +attribute_qualifier ::= T_DOT attribute_ref . -use_clause ::= TOK_USE TOK_FROM TOK_IDENTIFIER(A) semicolon. -{ - if (!CURRENT_SCHEMA->use_schemas) { - CURRENT_SCHEMA->use_schemas = LISTcreate(); - } +bag_type ::= T_BAG bound_spec T_OF instantiable_type . +bag_type ::= T_BAG T_OF instantiable_type . - LISTadd_last(CURRENT_SCHEMA->use_schemas, (Generic)A.symbol); -} -use_clause(A) ::= use_head(B) parened_rename_list semicolon. -{ - A = B; -} +binary_type ::= T_BINARY width_spec . +binary_type ::= T_BINARY . +boolean_type ::= T_BOOLEAN . +bound_1 ::= numeric_expression . +bound_2 ::= numeric_expression . +bound_spec ::= T_LBRKT bound_1 T_COLON bound_2 T_RBRKT . -use_head ::= TOK_USE TOK_FROM TOK_IDENTIFIER(A). -{ - interface_schema = A.symbol; - interface_func = SCHEMAadd_use; -} +built_in_constant ::= T_CONST_E . +built_in_constant ::= T_PI . +built_in_constant ::= T_SELF . +built_in_constant ::= T_QMARK . -interface_specification(A) ::= use_clause(B). -{ - A = B; -} -interface_specification(A) ::= reference_clause(B). -{ - A = B; -} +built_in_function ::= T_ABS . +built_in_function ::= T_ACOS . +built_in_function ::= T_ASIN . +built_in_function ::= T_ATAN . +built_in_function ::= T_BLENGTH . +built_in_function ::= T_COS . +built_in_function ::= T_EXISTS . -interface_specification_list ::= /*NULL*/. -interface_specification_list(A) ::= interface_specification_list(B) - interface_specification. -{ - A = B; -} +built_in_function ::= T_EXP . +built_in_function ::= T_FORMAT . +built_in_function ::= T_HIBOUND . +built_in_function ::= T_HIINDEX . +built_in_function ::= T_LENGTH . +built_in_function ::= T_LOBOUND . +built_in_function ::= T_LOINDEX . -interval(A) ::= TOK_LEFT_CURL simple_expression(B) rel_op(C) - simple_expression(D) rel_op(E) simple_expression(F) right_curl. -{ - Expression tmp1, tmp2; +built_in_function ::= T_LOG . +built_in_function ::= T_LOG2 . +built_in_function ::= T_LOG10 . +built_in_function ::= T_NVL . +built_in_function ::= T_ODD . +built_in_function ::= T_ROLESOF . +built_in_function ::= T_SIN . +built_in_function ::= T_SIZEOF . - A = (Expression)0; - tmp1 = BIN_EXPcreate(C, B, D); - tmp2 = BIN_EXPcreate(E, D, F); - A = BIN_EXPcreate(OP_AND, tmp1, tmp2); -} +built_in_function ::= T_SQRT . +built_in_function ::= T_TAN . +built_in_function ::= T_TYPEOF . +built_in_function ::= T_USEDIN . +built_in_function ::= T_VALUE . +built_in_function ::= T_VALUE_IN . +built_in_function ::= T_VALUE_UNIQUE . -/* defined_type might have to be something else since it's really an - * entity_ref */ -set_or_bag_of_entity(A) ::= defined_type(B). -{ - A.type = B; - A.body = 0; -} -set_or_bag_of_entity(A) ::= TOK_SET TOK_OF defined_type(B). -{ - A.type = 0; - A.body = TYPEBODYcreate(set_); - A.body->base = B; +built_in_procedure ::= T_INSERT . +built_in_procedure ::= T_REMOVE . -} -set_or_bag_of_entity(A) ::= TOK_SET bound_spec(B) TOK_OF defined_type(C). -{ - A.type = 0; - A.body = TYPEBODYcreate(set_); - A.body->base = C; - A.body->upper = B.upper_limit; - A.body->lower = B.lower_limit; -} -set_or_bag_of_entity(A) ::= TOK_BAG bound_spec(B) TOK_OF defined_type(C). -{ - A.type = 0; - A.body = TYPEBODYcreate(bag_); - A.body->base = C; - A.body->upper = B.upper_limit; - A.body->lower = B.lower_limit; -} -set_or_bag_of_entity(A) ::= TOK_BAG TOK_OF defined_type(B). -{ - A.type = 0; - A.body = TYPEBODYcreate(bag_); - A.body->base = B; -} +case_action ::= case_label_list T_COLON stmt . -/* 10303-11:2004 production 249 - * inverse_clause = INVERSE inverse_attr { inverse_attr } . - */ -inverse_attr_list(A) ::= inverse_attr(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -inverse_attr_list(A) ::= inverse_attr_list(B) inverse_attr(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} +case_otherwise ::= T_OTHERWISE T_COLON stmt . +case_otherwise ::= . + +case_label_list ::= case_label_list T_COMMA case_label . +case_label_list ::= case_label . -/* 10303-11:2004 production 248 - * inverse_attr = attribute_decl ’:’ [ ( SET | BAG ) [ bound_spec ] OF ] entity_ref FOR [ entity_ref ’.’ ] attribute_ref ’;’ . - * - * NOTE - production 279 (RENAMED attr) isn't implemented - */ -inverse_attr(A) ::= attribute_decl(B) TOK_COLON set_or_bag_of_entity(C) - TOK_FOR TOK_IDENTIFIER(D) semicolon. -{ - if (C.type) { - A = VARcreate(B, C.type); - } else { - Type t = TYPEcreate_from_body_anonymously(C.body); - SCOPEadd_super(t); - A = VARcreate(B, t); - } - - A->flags.attribute = true; - A->inverse_symbol = D.symbol; -} +case_label ::= expression . -/* 10303-11:2004 production 249 - * inverse_clause = INVERSE inverse_attr { inverse_attr } . - */ -inverse_clause(A) ::= /*NULL*/. -{ - A = LIST_NULL; -} -inverse_clause(A) ::= TOK_INVERSE inverse_attr_list(B). -{ - A = B; -} +case_action_list ::= case_action_list case_action . +case_action_list ::= . -/* 10303-11:2004 production 185 bound_spec = '[' bound_1 ':' bound_2 ']' . */ -bound_spec(A) ::= TOK_LEFT_BRACKET expression(B) TOK_COLON expression(C) - TOK_RIGHT_BRACKET. -{ - A.lower_limit = B; - A.upper_limit = C; -} +case_stmt ::= T_CASE selector T_OF case_action_list case_otherwise T_END_CASE T_SEMICOLON . -list_type(A) ::= TOK_LIST bound_spec(B) TOK_OF unique(C) attribute_type(D). -{ - A = TYPEBODYcreate(list_); - A->base = D; - A->flags.unique = C.unique; - A->lower = B.lower_limit; - A->upper = B.upper_limit; -} -list_type(A) ::= TOK_LIST TOK_OF unique(B) attribute_type(C). -{ - A = TYPEBODYcreate(list_); - A->base = C; - A->flags.unique = B.unique; -} +compound_stmt ::= T_BEGIN stmt_list T_END T_SEMICOLON . -literal(A) ::= TOK_INTEGER_LITERAL(B). -{ - if (B.iVal == 0) { - A = LITERAL_ZERO; - } else if (B.iVal == 1) { - A = LITERAL_ONE; - } else { - A = EXPcreate_simple(Type_Integer); - A->u.integer = (int)B.iVal; - resolved_all(A); - } -} -literal(A) ::= TOK_REAL_LITERAL(B). -{ - /* if rVal (a double) is nonzero and has magnitude <= the smallest non-denormal float, print a warning */ - if( ( fabs( B.rVal ) <= FLT_MIN ) && ( fabs( B.rVal ) > 0 ) ) { - Symbol sym; - sym.line = yylineno; - sym.filename = current_filename; - ERRORreport_with_symbol(WARN_SMALL_REAL, &sym, B.rVal ); - } - if( fabs( B.rVal ) < DBL_MIN ) { - A = LITERAL_ZERO; - } else { - A = EXPcreate_simple(Type_Real); - A->u.real = B.rVal; - resolved_all(A); - } -} -literal(A) ::= TOK_STRING_LITERAL(B). -{ - A = EXPcreate_simple(Type_String); - A->symbol.name = B.string; - resolved_all(A); -} -literal(A) ::= TOK_STRING_LITERAL_ENCODED(B). -{ - A = EXPcreate_simple(Type_String_Encoded); - A->symbol.name = B.string; - resolved_all(A); -} -literal(A) ::= TOK_LOGICAL_LITERAL(B). -{ - A = EXPcreate_simple(Type_Logical); - A->u.logical = B.logical; - resolved_all(A); -} -literal(A) ::= TOK_BINARY_LITERAL(B). -{ - A = EXPcreate_simple(Type_Binary); - A->symbol.name = B.binary; - resolved_all(A); -} -literal(A) ::= constant(B). -{ - A = B; -} +concrete_types ::= aggregation_types . +concrete_types ::= simple_types . +concrete_types ::= type_ref . -local_initializer(A) ::= TOK_ASSIGNMENT expression(B). -{ - A = B; -} +constant_body ::= T_SIMPLE_ID T_COLON instantiable_type T_ASSIGN expression T_SEMICOLON . -local_variable ::= id_list(A) TOK_COLON parameter_type(B) semicolon. -{ - Expression e; - Variable v; - LISTdo(A, sym, Symbol *) - - /* convert symbol to name-expression */ - - e = EXPcreate(Type_Attribute); - e->symbol = *sym; SYMBOL_destroy(sym); - v = VARcreate(e, B); - v->offset = local_var_count++; - DICTdefine(CURRENT_SCOPE->symbol_table, e->symbol.name, (Generic)v, &e->symbol, OBJ_VARIABLE); - LISTod; - LISTfree(A); -} +constant_decl ::= T_CONSTANT constant_body_list T_END_CONSTANT T_SEMICOLON . +constant_decl ::= . -local_variable ::= id_list(A) TOK_COLON parameter_type(B) local_initializer(C) semicolon. -{ - Expression e; - Variable v; - LISTdo(A, sym, Symbol *) - e = EXPcreate(Type_Attribute); - e->symbol = *sym; SYMBOL_destroy(sym); - v = VARcreate(e, B); - v->offset = local_var_count++; - v->initializer = C; - DICTdefine(CURRENT_SCOPE->symbol_table, e->symbol.name, (Generic)v, - &e->symbol, OBJ_VARIABLE); - LISTod; - LISTfree(A); -} +constant_body_list ::= constant_body_list constant_body . +constant_body_list ::= constant_body . -local_body ::= /* no local_variables */. -local_body(A) ::= local_variable(B) local_body. -{ - A = B; -} +constant_factor ::= built_in_constant . +constant_factor ::= constant_ref . -local_decl ::= TOK_LOCAL local_decl_rules_on local_body TOK_END_LOCAL semicolon local_decl_rules_off. +constructed_types ::= enumeration_type . +constructed_types ::= select_type . -local_decl_rules_on ::= /* subroutine */. -{ - tag_count = 0; /* don't signal an error if we find a generic_type */ - local_var_count = 0; /* used to keep local var decl's in the same order */ -} +declaration ::= entity_decl . +declaration ::= function_decl . +declaration ::= procedure_decl . +declaration ::= subtype_constraint_decl . +declaration ::= type_decl . -local_decl_rules_off ::= /* subroutine */. -{ - tag_count = -1; /* signal an error if we find a generic_type */ -} +derived_attr ::= attribute_decl T_COLON parameter_type T_ASSIGN expression T_SEMICOLON . -defined_type(A) ::= TOK_IDENTIFIER(B). -{ - A = TYPEcreate_name(B.symbol); - SCOPEadd_super(A); - SYMBOL_destroy(B.symbol); -} +derive_clause ::= T_DERIVE derived_attr_list . +derive_clause ::= . -defined_type_list(A) ::= defined_type(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); +derived_attr_list ::= derived_attr_list derived_attr . +derived_attr_list ::= derived_attr . -} -defined_type_list(A) ::= defined_type_list(B) TOK_COMMA defined_type(C). -{ - A = B; - LISTadd_last(A, - (Generic)C); -} +domain_rule ::= rule_label_id T_COLON expression . +domain_rule ::= expression . -nested_id_list(A) ::= TOK_LEFT_PAREN id_list(B) TOK_RIGHT_PAREN. -{ - A = B; -} +element ::= expression T_COLON repetition . +element ::= expression . -oneof_op(A) ::= TOK_ONEOF(B). -{ - A = B; -} +entity_body ::= explicit_attr_list derive_clause inverse_clause unique_clause where_clause . -optional_or_unique(A) ::= /* NULL body */. -{ - A.unique = 0; - A.optional = 0; -} -optional_or_unique(A) ::= TOK_OPTIONAL. -{ - A.unique = 0; - A.optional = 1; -} -optional_or_unique(A) ::= TOK_UNIQUE. -{ - A.unique = 1; - A.optional = 0; -} -optional_or_unique(A) ::= TOK_OPTIONAL TOK_UNIQUE. -{ - A.unique = 1; - A.optional = 1; -} -optional_or_unique(A) ::= TOK_UNIQUE TOK_OPTIONAL. -{ - A.unique = 1; - A.optional = 1; -} - -optional_fixed(A) ::= /* nuthin' */. -{ - A.fixed = 0; -} -optional_fixed(A) ::= TOK_FIXED. -{ - A.fixed = 1; -} - -precision_spec(A) ::= /* no precision specified */. -{ - A = (Expression)0; -} -precision_spec(A) ::= TOK_LEFT_PAREN expression(B) TOK_RIGHT_PAREN. -{ - A = B; -} +explicit_attr_list ::= explicit_attr_list explicit_attr . +explicit_attr_list ::= . + +entity_constructor ::= entity_ref T_LPAREN expression_list T_RPAREN . +entity_constructor ::= entity_ref T_LPAREN T_RPAREN . + +expression_list ::= expression_list T_COMMA expression . +expression_list ::= expression . + +entity_decl ::= entity_head entity_body T_END_ENTITY T_SEMICOLON . +entity_head ::= T_ENTITY T_SIMPLE_ID subsuper T_SEMICOLON . +enumeration_extension ::= T_BASED_ON type_ref T_WITH enumeration_items . +enumeration_extension ::= T_BASED_ON type_ref . -/* NOTE: actual parameters cannot go to NULL, since this causes - * a syntactic ambiguity (see note at actual_parameters). hence - * the need for the second branch of this rule. - */ - -proc_call_statement(A) ::= procedure_id(B) actual_parameters(C) semicolon. -{ - A = PCALLcreate(C); - A->symbol = *(B); -} -proc_call_statement(A) ::= procedure_id(B) semicolon. -{ - A = PCALLcreate((Linked_List)0); - A->symbol = *(B); -} - -procedure_decl ::= procedure_header(A) action_body(B) TOK_END_PROCEDURE - semicolon. -{ - PROCput_body(CURRENT_SCOPE, B); - ALGput_full_text(CURRENT_SCOPE, A, SCANtell()); - POP_SCOPE(); -} +enumeration_items ::= T_LPAREN enumeration_id_list T_RPAREN . +enumeration_id_list ::= enumeration_id_list T_COMMA enumeration_id . +enumeration_id_list ::= enumeration_id . -procedure_header(A) ::= TOK_PROCEDURE ph_get_line(B) ph_push_scope - formal_parameter_list(C) semicolon. -{ - Procedure p = CURRENT_SCOPE; - p->u.proc->parameters = C; - p->u.proc->pcount = LISTget_length(C); - p->u.proc->tag_count = tag_count; - tag_count = -1; /* done with parameters, no new tags can be defined */ - A = B; -} +enumeration_reference ::= type_ref T_DOT enumeration_ref . +enumeration_reference ::= enumeration_ref . -ph_push_scope ::= TOK_IDENTIFIER(A). -{ - Procedure p = ALGcreate(OBJ_PROCEDURE); - tag_count = 0; +enumeration_type ::= T_EXTENSIBLE T_ENUMERATION T_OF enumeration_items . +enumeration_type ::= T_EXTENSIBLE T_ENUMERATION enumeration_extension . +enumeration_type ::= T_EXTENSIBLE T_ENUMERATION . +enumeration_type ::= T_ENUMERATION T_OF enumeration_items . +enumeration_type ::= T_ENUMERATION enumeration_extension . +enumeration_type ::= T_ENUMERATION . - if (print_objects_while_running & OBJ_PROCEDURE_BITS) { - fprintf( stderr, "parse: %s (procedure)\n", A.symbol->name); - } +escape_stmt ::= T_ESCAPE T_SEMICOLON . - PUSH_SCOPE(p, A.symbol, OBJ_PROCEDURE); -} +explicit_attr ::= attribute_decl_list T_COLON T_OPTIONAL parameter_type T_SEMICOLON . +explicit_attr ::= attribute_decl_list T_COLON parameter_type T_SEMICOLON . -ph_get_line(A) ::= /* subroutine */. -{ - A = SCANtell(); -} +attribute_decl_list ::= attribute_decl_list T_COMMA attribute_decl . +attribute_decl_list ::= attribute_decl . -procedure_id(A) ::= TOK_IDENTIFIER(B). -{ - A = B.symbol; -} -procedure_id(A) ::= TOK_BUILTIN_PROCEDURE(B). -{ - A = B.symbol; -} +expression ::= simple_expression rel_op_extended simple_expression . +expression ::= simple_expression . -group_ref(A) ::= TOK_BACKSLASH TOK_IDENTIFIER(B). -{ - A = BIN_EXPcreate(OP_GROUP, (Expression)0, (Expression)0); - A->e.op2 = EXPcreate(Type_Identifier); - A->e.op2->symbol = *B.symbol; - SYMBOL_destroy(B.symbol); -} +factor ::= simple_factor T_EXP simple_factor . +factor ::= simple_factor . -qualifier(A) ::= TOK_DOT TOK_IDENTIFIER(B). -{ - A.expr = A.first = BIN_EXPcreate(OP_DOT, (Expression)0, (Expression)0); - A.expr->e.op2 = EXPcreate(Type_Identifier); - A.expr->e.op2->symbol = *B.symbol; - SYMBOL_destroy(B.symbol); -} -qualifier(A) ::= TOK_BACKSLASH TOK_IDENTIFIER(B). [TOK_NOT] -{ - A.expr = A.first = BIN_EXPcreate(OP_GROUP, (Expression)0, (Expression)0); - A.expr->e.op2 = EXPcreate(Type_Identifier); - A.expr->e.op2->symbol = *B.symbol; - SYMBOL_destroy(B.symbol); -} +formal_parameter ::= parameter_id_list T_COLON parameter_type . -/* 10303-11:2004 production 239 index_qualifier = '[' index_1 [ ':' index_2 ] ']' . */ -qualifier(A) ::= TOK_LEFT_BRACKET simple_expression(B) TOK_RIGHT_BRACKET. -{ - A.expr = A.first = BIN_EXPcreate(OP_ARRAY_ELEMENT, (Expression)0, - (Expression)0); - A.expr->e.op2 = B; -} +parameter_id_list ::= parameter_id_list T_COMMA parameter_id . +parameter_id_list ::= parameter_id . -/* 10303-11:2004 production 239 index_qualifier = '[' index_1 [ ':' index_2 ] ']' . */ -qualifier(A) ::= TOK_LEFT_BRACKET simple_expression(B) TOK_COLON - simple_expression(C) TOK_RIGHT_BRACKET. -{ - A.expr = A.first = TERN_EXPcreate(OP_SUBCOMPONENT, (Expression)0, - (Expression)0, (Expression)0); - A.expr->e.op2 = B; - A.expr->e.op3 = C; -} +function_call ::= built_in_function T_LPAREN actual_parameter_list T_RPAREN . +function_call ::= built_in_function . +function_call ::= function_ref T_LPAREN actual_parameter_list T_RPAREN . +function_call ::= function_ref . -query_expression(A) ::= query_start(B) expression(C) TOK_RIGHT_PAREN. -{ - A = B; - A->u.query->expression = C; - POP_SCOPE(); -} +function_decl ::= function_head algorithm_head stmt_list T_END_FUNCTION T_SEMICOLON . +function_head ::= T_FUNCTION T_SIMPLE_ID T_LPAREN formal_parameter_list T_RPAREN T_COLON parameter_type T_SEMICOLON . +function_head ::= T_FUNCTION T_SIMPLE_ID T_COLON parameter_type T_SEMICOLON . -query_start(A) ::= TOK_QUERY TOK_LEFT_PAREN TOK_IDENTIFIER(B) TOK_ALL_IN - expression(C) TOK_SUCH_THAT. -{ - A = QUERYcreate(B.symbol, C); - SYMBOL_destroy(B.symbol); - PUSH_SCOPE(A->u.query->scope, (Symbol *)0, OBJ_QUERY); -} +formal_parameter_list ::= formal_parameter_list T_SEMICOLON formal_parameter . +formal_parameter_list ::= formal_parameter . -rel_op(A) ::= TOK_LESS_THAN. -{ - A = OP_LESS_THAN; -} -rel_op(A) ::= TOK_GREATER_THAN. -{ - A = OP_GREATER_THAN; -} -rel_op(A) ::= TOK_EQUAL. -{ - A = OP_EQUAL; -} -rel_op(A) ::= TOK_LESS_EQUAL. -{ - A = OP_LESS_EQUAL; -} -rel_op(A) ::= TOK_GREATER_EQUAL. -{ - A = OP_GREATER_EQUAL; -} -rel_op(A) ::= TOK_NOT_EQUAL. -{ - A = OP_NOT_EQUAL; -} -rel_op(A) ::= TOK_INST_EQUAL. -{ - A = OP_INST_EQUAL; -} -rel_op(A) ::= TOK_INST_NOT_EQUAL. -{ - A = OP_INST_NOT_EQUAL; -} +generalized_types ::= aggregate_type . +generalized_types ::= general_aggregation_types . +generalized_types ::= generic_entity_type . +generalized_types ::= generic_type . -/* repeat_statement causes a scope creation if an increment_control exists */ -repeat_statement(A) ::= TOK_REPEAT increment_control while_control(B) - until_control(C) semicolon statement_rep(D) - TOK_END_REPEAT semicolon. -{ - A = LOOPcreate(CURRENT_SCOPE, B, C, D); +general_aggregation_types ::= general_array_type . +general_aggregation_types ::= general_bag_type . +general_aggregation_types ::= general_list_type . +general_aggregation_types ::= general_set_type . - /* matching PUSH_SCOPE is in increment_control */ - POP_SCOPE(); -} -repeat_statement(A) ::= TOK_REPEAT while_control(B) until_control(C) semicolon - statement_rep(D) TOK_END_REPEAT semicolon. -{ - A = LOOPcreate((struct Scope_ *)0, B, C, D); -} +general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE parameter_type . +general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL parameter_type . +general_array_type ::= T_ARRAY bound_spec T_OF T_UNIQUE parameter_type . +general_array_type ::= T_ARRAY bound_spec T_OF parameter_type . +general_array_type ::= T_ARRAY T_OF T_OPTIONAL T_UNIQUE parameter_type . +general_array_type ::= T_ARRAY T_OF T_OPTIONAL parameter_type . +general_array_type ::= T_ARRAY T_OF T_UNIQUE parameter_type . +general_array_type ::= T_ARRAY T_OF parameter_type . + +general_bag_type ::= T_BAG bound_spec T_OF parameter_type . +general_bag_type ::= T_BAG T_OF parameter_type . + +general_list_type ::= T_LIST bound_spec T_OF T_UNIQUE parameter_type . +general_list_type ::= T_LIST bound_spec T_OF parameter_type . +general_list_type ::= T_LIST T_OF T_UNIQUE parameter_type . +general_list_type ::= T_LIST T_OF parameter_type . -return_statement(A) ::= TOK_RETURN semicolon. -{ - A = RETcreate((Expression)0); -} -return_statement(A) ::= TOK_RETURN TOK_LEFT_PAREN expression(B) TOK_RIGHT_PAREN - semicolon. -{ - A = RETcreate(B); -} +general_ref ::= parameter_ref . +general_ref ::= variable_ref . + +general_set_type ::= T_SET bound_spec T_OF parameter_type . +general_set_type ::= T_SET T_OF parameter_type . + +generic_entity_type ::= T_GENERIC_ENTITY T_COLON type_label . +generic_entity_type ::= T_GENERIC_ENTITY . +generic_type ::= T_GENERIC T_COLON type_label . +generic_type ::= T_GENERIC . +group_qualifier ::= T_BACKSLASH entity_ref . +if_stmt ::= T_IF logical_expression T_THEN stmt_list T_ELSE stmt_list T_END_IF T_SEMICOLON . +if_stmt ::= T_IF logical_expression T_THEN stmt_list T_END_IF T_SEMICOLON . +increment ::= numeric_expression . +increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2 T_BY increment . +increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2 . +increment_control ::= . +index ::= numeric_expression . +index_1 ::= index . +index_2 ::= index . +index_qualifier ::= T_LBRKT index_1 T_COLON index_2 T_RBRKT . +index_qualifier ::= T_LBRKT index_1 T_RBRKT . + +instantiable_type ::= concrete_types . +instantiable_type ::= entity_ref . + +integer_type ::= T_INTEGER . + +interface_specification ::= reference_clause . +interface_specification ::= use_clause . + +interval ::= T_LCURL interval_low interval_op interval_item interval_op interval_high T_RCURL . +interval_high ::= simple_expression . +interval_item ::= simple_expression . +interval_low ::= simple_expression . +interval_op ::= T_LT . +interval_op ::= T_LTEQ . + +inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR attribute_ref T_SEMICOLON . +inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR attribute_ref T_SEMICOLON . + +inverse_clause ::= T_INVERSE inverse_attr_list . +inverse_clause ::= . + +inverse_attr_list ::= inverse_attr_list inverse_attr . +inverse_attr_list ::= inverse_attr . + +list_type ::= T_LIST bound_spec T_OF T_UNIQUE instantiable_type . +list_type ::= T_LIST bound_spec T_OF instantiable_type . +list_type ::= T_LIST T_OF T_UNIQUE instantiable_type . +list_type ::= T_LIST T_OF instantiable_type . + +literal ::= T_BINARY_LITERAL . +literal ::= logical_literal . +literal ::= real_literal . +literal ::= string_literal . + +real_literal ::= T_INTEGER_LITERAL . +real_literal ::= T_REAL_LITERAL . + +local_decl ::= T_LOCAL local_variable_list T_END_LOCAL T_SEMICOLON . +local_decl ::= . + +local_variable_list ::= local_variable_list local_variable . +local_variable_list ::= local_variable . + +local_variable ::= variable_id_list T_COLON parameter_type T_ASSIGN expression T_SEMICOLON . +local_variable ::= variable_id_list T_COLON parameter_type T_SEMICOLON . + +variable_id_list ::= variable_id_list T_COMMA variable_id . +variable_id_list ::= variable_id . + +logical_expression ::= expression . + +logical_literal ::= T_FALSE . +logical_literal ::= T_TRUE . +logical_literal ::= T_UNKNOWN . +logical_type ::= T_LOGICAL . + +multiplication_like_op ::= T_TIMES . +multiplication_like_op ::= T_RDIV . +multiplication_like_op ::= T_IDIV . +multiplication_like_op ::= T_MOD . +multiplication_like_op ::= T_AND . +multiplication_like_op ::= T_CONCAT . + +named_types ::= entity_ref . +named_types ::= type_ref . + +named_type_or_rename ::= named_types T_AS T_SIMPLE_ID . +named_type_or_rename ::= named_types . + +null_stmt ::= T_SEMICOLON . +number_type ::= T_NUMBER . +numeric_expression ::= simple_expression . + +one_of ::= T_ONEOF T_LPAREN supertype_expression_list T_RPAREN . +supertype_expression_list ::= supertype_expression_list T_COMMA supertype_expression . +supertype_expression_list ::= supertype_expression . + +parameter ::= expression . + +parameter_type ::= generalized_types . +parameter_type ::= named_types . +parameter_type ::= simple_types . + +population ::= entity_ref . +precision_spec ::= numeric_expression . +primary ::= literal . + /* TODO: if qualifier_list is empty then the returned expression can be simplified? */ +primary ::= qualifiable_factor qualifier_list . -right_curl ::= TOK_RIGHT_CURL. -{ - yyerrok; -} +procedure_call_stmt ::= built_in_procedure T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON . +procedure_call_stmt ::= built_in_procedure T_SEMICOLON . +procedure_call_stmt ::= procedure_ref T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON . +procedure_call_stmt ::= procedure_ref T_SEMICOLON . -rule_decl ::= rule_header(A) action_body(B) where_rule(C) TOK_END_RULE - semicolon. -{ - RULEput_body(CURRENT_SCOPE, B); - RULEput_where(CURRENT_SCOPE, C); - ALGput_full_text(CURRENT_SCOPE, A, SCANtell()); - POP_SCOPE(); -} +procedure_decl ::= procedure_head algorithm_head stmt_list T_END_PROCEDURE T_SEMICOLON . +procedure_decl ::= procedure_head algorithm_head T_END_PROCEDURE T_SEMICOLON . -rule_formal_parameter(A) ::= TOK_IDENTIFIER(B). -{ - Expression e; - Type t; - - /* it's true that we know it will be an entity_ type later */ - TypeBody tb = TYPEBODYcreate(set_); - tb->base = TYPEcreate_name(B.symbol); - SCOPEadd_super(tb->base); - t = TYPEcreate_from_body_anonymously(tb); - SCOPEadd_super(t); - e = EXPcreate_from_symbol(t, B.symbol); - A = VARcreate(e, t); - A->flags.attribute = true; - A->flags.parameter = true; - - /* link it in to the current scope's dict */ - DICTdefine(CURRENT_SCOPE->symbol_table, B.symbol->name, (Generic)A, - B.symbol, OBJ_VARIABLE); -} +procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_LPAREN varopt_formal_parameter_list T_RPAREN T_SEMICOLON . +procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_SEMICOLON . -rule_formal_parameter_list(A) ::= rule_formal_parameter(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -rule_formal_parameter_list(A) ::= rule_formal_parameter_list(B) TOK_COMMA - rule_formal_parameter(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} +varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON T_VAR formal_parameter . +varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON formal_parameter . +varopt_formal_parameter_list ::= T_VAR formal_parameter . +varopt_formal_parameter_list ::= formal_parameter . -rule_header(A) ::= rh_start(B) rule_formal_parameter_list(C) TOK_RIGHT_PAREN - semicolon. -{ - CURRENT_SCOPE->u.rule->parameters = C; +qualifiable_factor ::= attribute_ref . +qualifiable_factor ::= constant_factor . +qualifiable_factor ::= function_call . +qualifiable_factor ::= general_ref . +qualifiable_factor ::= population . - A = B; -} +qualified_attribute ::= T_SELF group_qualifier attribute_qualifier . -rh_start(A) ::= TOK_RULE rh_get_line(B) TOK_IDENTIFIER(C) TOK_FOR - TOK_LEFT_PAREN. -{ - Rule r = ALGcreate(OBJ_RULE); +qualifier ::= attribute_qualifier . +qualifier ::= group_qualifier . +qualifier ::= index_qualifier . - if (print_objects_while_running & OBJ_RULE_BITS) { - fprintf( stderr, "parse: %s (rule)\n", C.symbol->name); - } +query_expression ::= T_QUERY T_LPAREN variable_id T_ALL_IN aggregate_source T_PIPE logical_expression T_RPAREN . +real_type ::= T_REAL T_LPAREN precision_spec T_RPAREN . +real_type ::= T_REAL . +redeclared_attribute ::= qualified_attribute T_RENAMED attribute_id . +redeclared_attribute ::= qualified_attribute . - PUSH_SCOPE(r, C.symbol, OBJ_RULE); +referenced_attribute ::= attribute_ref . +referenced_attribute ::= qualified_attribute . - A = B; -} +reference_clause ::= T_REFERENCE T_FROM schema_ref T_LPAREN resource_or_rename_list T_RPAREN T_SEMICOLON . +reference_clause ::= T_REFERENCE T_FROM schema_ref T_SEMICOLON . +resource_or_rename_list ::= resource_or_rename_list T_COMMA resource_or_rename . +resource_or_rename_list ::= resource_or_rename . -rh_get_line(A) ::= /* subroutine */. -{ - A = SCANtell(); -} +rel_op ::= T_LT . +rel_op ::= T_GT . +rel_op ::= T_LTEQ . +rel_op ::= T_GTEQ . +rel_op ::= T_NEQ . +rel_op ::= T_EQ . +rel_op ::= T_INST_NEQ . +rel_op ::= T_INST_EQ . -schema_body(A) ::= interface_specification_list(B) block_list. -{ - A = B; -} -schema_body(A) ::= interface_specification_list(B) constant_decl block_list. -{ - A = B; -} +rel_op_extended ::= rel_op . +rel_op_extended ::= T_IN . +rel_op_extended ::= T_LIKE . + +rename_id ::= T_SIMPLE_ID . + +repeat_control ::= increment_control while_control until_control . +repeat_stmt ::= T_REPEAT repeat_control T_SEMICOLON stmt_list T_END_REPEAT T_SEMICOLON . + +repetition ::= numeric_expression . + +resource_or_rename ::= resource_ref T_AS rename_id . +resource_or_rename ::= resource_ref . + +resource_ref ::= constant_ref . +resource_ref ::= entity_ref . +resource_ref ::= function_ref . +resource_ref ::= procedure_ref . +resource_ref ::= type_ref . + +return_stmt ::= T_RETURN T_LPAREN expression T_RPAREN T_SEMICOLON . +return_stmt ::= T_RETURN T_SEMICOLON . -schema_decl ::= schema_header schema_body TOK_END_SCHEMA semicolon. -{ - POP_SCOPE(); -} -schema_decl(A) ::= include_directive(B). -{ - A = B; -} +rule_decl ::= rule_head algorithm_head stmt_list where_clause T_END_RULE T_SEMICOLON . +rule_decl ::= rule_head algorithm_head where_clause T_END_RULE T_SEMICOLON . -schema_header ::= TOK_SCHEMA TOK_IDENTIFIER(A) semicolon. -{ - Schema schema = ( Schema ) DICTlookup(CURRENT_SCOPE->symbol_table, A.symbol->name); - - if (print_objects_while_running & OBJ_SCHEMA_BITS) { - fprintf( stderr, "parse: %s (schema)\n", A.symbol->name); - } - - if (EXPRESSignore_duplicate_schemas && schema) { - SCANskip_to_end_schema(parseData.scanner); - PUSH_SCOPE_DUMMY(); - } else { - schema = SCHEMAcreate(); - LISTadd_last(PARSEnew_schemas, (Generic)schema); - PUSH_SCOPE(schema, A.symbol, OBJ_SCHEMA); - } -} +rule_head ::= T_RULE rule_id T_FOR T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON . +entity_ref_list ::= entity_ref_list T_COMMA entity_ref . +entity_ref_list ::= entity_ref . + +schema_body ::= interface_specification_list constant_decl declaration_or_rule_decl_list . + +interface_specification_list ::= interface_specification_list interface_specification . +interface_specification_list ::= . + +declaration_or_rule_decl ::= declaration . +declaration_or_rule_decl ::= rule_decl . + +declaration_or_rule_decl_list ::= declaration_or_rule_decl_list declaration_or_rule_decl . +declaration_or_rule_decl_list ::= . + +schema_decl ::= T_SCHEMA schema_id schema_version_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON . +schema_decl ::= T_SCHEMA schema_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON . + +schema_version_id ::= string_literal . +selector ::= expression . -select_type(A) ::= TOK_SELECT TOK_LEFT_PAREN defined_type_list(B) - TOK_RIGHT_PAREN. -{ - A = TYPEBODYcreate(select_); - A->list = B; -} +select_extension ::= T_BASED_ON type_ref T_WITH select_list . +select_extension ::= T_BASED_ON type_ref . -semicolon ::= TOK_SEMICOLON. -{ - yyerrok; -} +select_list ::= T_LPAREN named_types_list T_RPAREN . +named_types_list ::= named_types_list T_COMMA named_types . +named_types_list ::= named_types . -set_type(A) ::= TOK_SET bound_spec(B) TOK_OF attribute_type(C). -{ - A = TYPEBODYcreate(set_); - A->base = C; - A->lower = B.lower_limit; - A->upper = B.upper_limit; -} -set_type(A) ::= TOK_SET TOK_OF attribute_type(B). -{ - A = TYPEBODYcreate(set_); - A->base = B; -} +select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_list . +select_type ::= T_EXTENSIBLE T_SELECT select_list . +select_type ::= T_SELECT select_list . +select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_extension . +select_type ::= T_EXTENSIBLE T_SELECT select_extension . +select_type ::= T_SELECT select_extension . +select_type ::= T_SELECT . -skip_statement(A) ::= TOK_SKIP semicolon. -{ - A = STATEMENT_SKIP; -} +set_type ::= T_SET bound_spec T_OF instantiable_type . +set_type ::= T_SET T_OF instantiable_type . -statement(A) ::= alias_statement(B). -{ - A = B; -} -statement(A) ::= assignment_statement(B). -{ - A = B; -} -statement(A) ::= case_statement(B). -{ - A = B; -} -statement(A) ::= compound_statement(B). -{ - A = B; -} -statement(A) ::= escape_statement(B). -{ - A = B; -} -statement(A) ::= if_statement(B). -{ - A = B; -} -statement(A) ::= proc_call_statement(B). -{ - A = B; -} -statement(A) ::= repeat_statement(B). -{ - A = B; -} -statement(A) ::= return_statement(B). -{ - A = B; -} -statement(A) ::= skip_statement(B). -{ - A = B; -} +simple_expression ::= term_list . +term_list ::= term_list add_like_op term . +term_list ::= term . -statement_rep(A) ::= /* no statements */. -{ - A = LISTcreate(); -} -statement_rep(A) ::= /* ignore null statement */ semicolon statement_rep(B). -{ - A = B; -} -statement_rep(A) ::= statement(B) statement_rep(C). -{ - A = C; - LISTadd_first(A, (Generic)B); -} +simple_factor ::= aggregate_initializer . +simple_factor ::= entity_constructor . +simple_factor ::= enumeration_reference . +simple_factor ::= interval . +simple_factor ::= query_expression . -/* if the actions look backwards, remember the declaration syntax: - * SUPERTYPE OF ... SUBTYPE OF ... - */ +simple_factor ::= T_LPAREN expression T_RPAREN . +simple_factor ::= primary . -subsuper_decl(A) ::= /* NULL body */. -{ - A.subtypes = EXPRESSION_NULL; - A.abstract = false; - A.supertypes = LIST_NULL; -} -subsuper_decl(A) ::= supertype_decl(B). -{ - A.subtypes = B.subtypes; - A.abstract = B.abstract; - A.supertypes = LIST_NULL; -} -subsuper_decl(A) ::= subtype_decl(B). -{ - A.supertypes = B; - A.abstract = false; - A.subtypes = EXPRESSION_NULL; -} -subsuper_decl(A) ::= supertype_decl(B) subtype_decl(C). -{ - A.subtypes = B.subtypes; - A.abstract = B.abstract; - A.supertypes = C; -} + /* UNARY_OP */ +simple_factor ::= T_PLUS T_LPAREN expression T_RPAREN . [UNARY_OP] +simple_factor ::= T_PLUS primary . [UNARY_OP] +simple_factor ::= T_MINUS T_LPAREN expression T_RPAREN . [UNARY_OP] +simple_factor ::= T_MINUS primary . [UNARY_OP] +simple_factor ::= T_NOT T_LPAREN expression T_RPAREN . [UNARY_OP] +simple_factor ::= T_NOT primary . [UNARY_OP] -subtype_decl(A) ::= TOK_SUBTYPE TOK_OF TOK_LEFT_PAREN defined_type_list(B) - TOK_RIGHT_PAREN. -{ - A = B; -} +simple_types ::= binary_type . +simple_types ::= boolean_type . +simple_types ::= integer_type . +simple_types ::= logical_type . +simple_types ::= number_type . +simple_types ::= real_type . +simple_types ::= string_type . -supertype_decl(A) ::= TOK_ABSTRACT TOK_SUPERTYPE. -{ - A.subtypes = (Expression)0; - A.abstract = true; -} -supertype_decl(A) ::= TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN - supertype_expression(B) TOK_RIGHT_PAREN. -{ - A.subtypes = B; - A.abstract = false; -} -supertype_decl(A) ::= TOK_ABSTRACT TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN - supertype_expression(B) TOK_RIGHT_PAREN. -{ - A.subtypes = B; - A.abstract = true; -} +skip_stmt ::= T_SKIP T_SEMICOLON . -supertype_expression(A) ::= supertype_factor(B). -{ - A = B.subtypes; -} -supertype_expression(A) ::= supertype_expression(B) TOK_AND supertype_factor(C). -{ - A = BIN_EXPcreate(OP_AND, B, C.subtypes); -} -supertype_expression(A) ::= supertype_expression(B) TOK_ANDOR - supertype_factor(C). -{ - A = BIN_EXPcreate(OP_ANDOR, B, C.subtypes); -} +stmt ::= alias_stmt . +stmt ::= assignment_stmt . +stmt ::= case_stmt . +stmt ::= compound_stmt . +stmt ::= escape_stmt . +stmt ::= if_stmt . +stmt ::= null_stmt . -supertype_expression_list(A) ::= supertype_expression(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -supertype_expression_list(A) ::= supertype_expression_list(B) TOK_COMMA - supertype_expression(C). -{ - LISTadd_last(B, (Generic)C); - A = B; -} +stmt ::= procedure_call_stmt . +stmt ::= repeat_stmt . +stmt ::= return_stmt . +stmt ::= skip_stmt . -supertype_factor(A) ::= identifier(B). -{ - A.subtypes = B; -} -supertype_factor(A) ::= oneof_op TOK_LEFT_PAREN supertype_expression_list(B) - TOK_RIGHT_PAREN. -{ - A.subtypes = EXPcreate(Type_Oneof); - A.subtypes->u.list = B; -} -supertype_factor(A) ::= TOK_LEFT_PAREN supertype_expression(B) TOK_RIGHT_PAREN. -{ - A.subtypes = B; -} +string_literal ::= T_STRING_LITERAL . +string_literal ::= T_ENCODED_STRING_LITERAL . -type(A) ::= aggregation_type(B). -{ - A.type = 0; - A.body = B; -} -type(A) ::= basic_type(B). -{ - A.type = 0; - A.body = B; -} -type(A) ::= defined_type(B). -{ - A.type = B; - A.body = 0; -} -type(A) ::= select_type(B). -{ - A.type = 0; - A.body = B; -} +string_type ::= T_STRING width_spec . +string_type ::= T_STRING . -type_item_body(A) ::= enumeration_type(B). -{ - A = B; -} -type_item_body ::= type(A). -{ - CURRENT_SCOPE->u.type->head = A.type; - CURRENT_SCOPE->u.type->body = A.body; -} +subsuper ::= supertype_constraint subtype_declaration . +subsuper ::= supertype_constraint . +subsuper ::= subtype_declaration . +subsuper ::= . -type_item ::= ti_start type_item_body semicolon. +subtype_constraint ::= T_OF T_LPAREN supertype_expression T_RPAREN . -ti_start ::= TOK_IDENTIFIER(A) TOK_EQUAL. -{ - Type t = TYPEcreate_name(A.symbol); - PUSH_SCOPE(t, A.symbol, OBJ_TYPE); -} +subtype_constraint_body ::= abstract_supertype total_over supertype_expression T_SEMICOLON . +subtype_constraint_body ::= abstract_supertype total_over . -type_decl(A) ::= td_start(B) TOK_END_TYPE semicolon. -{ - A = B; -} +subtype_constraint_decl ::= subtype_constraint_head subtype_constraint_body T_END_SUBTYPE_CONSTRAINT T_SEMICOLON . +subtype_constraint_head ::= T_SUBTYPE_CONSTRAINT subtype_constraint_id T_FOR entity_ref T_SEMICOLON . +subtype_declaration ::= T_SUBTYPE T_OF T_LPAREN entity_ref_list T_RPAREN . -td_start(A) ::= TOK_TYPE(B) type_item where_rule_OPT(C). -{ - CURRENT_SCOPE->where = C; - POP_SCOPE(); - A = B; -} +supertype_constraint ::= abstract_entity_declaration . +supertype_constraint ::= abstract_supertype_declaration . +supertype_constraint ::= supertype_rule . -general_ref(A) ::= assignable(B) group_ref(C). -{ - C->e.op1 = B; - A = C; -} -general_ref(A) ::= assignable(B). -{ - A = B; -} +supertype_expression ::= supertype_factor_list . +supertype_factor_list ::= supertype_factor_list T_ANDOR supertype_factor . +supertype_factor_list ::= supertype_factor . -unary_expression(A) ::= aggregate_initializer(B). -{ - A = B; -} -unary_expression(A) ::= unary_expression(B) qualifier(C). -{ - C.first->e.op1 = B; - A = C.expr; -} -unary_expression(A) ::= literal(B). -{ - A = B; -} -unary_expression(A) ::= function_call(B). -{ - A = B; -} -unary_expression(A) ::= identifier(B). -{ - A = B; -} -unary_expression(A) ::= TOK_LEFT_PAREN expression(B) TOK_RIGHT_PAREN. -{ - A = B; -} -unary_expression(A) ::= interval(B). -{ - A = B; -} -unary_expression(A) ::= query_expression(B). -{ - A = B; -} -unary_expression(A) ::= TOK_NOT unary_expression(B). -{ - A = UN_EXPcreate(OP_NOT, B); -} -unary_expression(A) ::= TOK_PLUS unary_expression(B). [TOK_NOT] -{ - A = B; -} -unary_expression(A) ::= TOK_MINUS unary_expression(B). [TOK_NOT] -{ - A = UN_EXPcreate(OP_NEGATE, B); -} +supertype_factor ::= supertype_term_list . +supertype_term_list ::= supertype_term_list T_AND supertype_term . +supertype_term_list ::= supertype_term . -unique(A) ::= /* look for optional UNIQUE */. -{ - A.unique = 0; -} -unique(A) ::= TOK_UNIQUE. -{ - A.unique = 1; -} +supertype_rule ::= T_SUPERTYPE subtype_constraint . -/* 10303-11:2004 production 275 - * qualified_attribute = SELF group_qualifier attribute_qualifier . - * - * NOTE rule 279 doesn't seem to be implemented - * redeclared_attribute = qualified_attribute [ RENAMED attribute_id ] . - */ -qualified_attr(A) ::= attribute_decl(B). -{ - A = B; -} +supertype_term ::= entity_ref . +supertype_term ::= one_of . +supertype_term ::= T_LPAREN supertype_expression T_RPAREN . -qualified_attr_list(A) ::= qualified_attr(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -qualified_attr_list(A) ::= qualified_attr_list(B) TOK_COMMA qualified_attr(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} +term ::= factor_list . -labelled_attrib_list(A) ::= qualified_attr_list(B) semicolon. -{ - LISTadd_first(B, (Generic)EXPRESSION_NULL); - A = B; -} -labelled_attrib_list(A) ::= TOK_IDENTIFIER(B) TOK_COLON qualified_attr_list(C) - semicolon. -{ - LISTadd_first(C, (Generic)B.symbol); - A = C; -} +factor_list ::= factor_list multiplication_like_op factor . +factor_list ::= factor . -/* returns a list */ -labelled_attrib_list_list(A) ::= labelled_attrib_list(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -labelled_attrib_list_list(A) ::= labelled_attrib_list_list(B) - labelled_attrib_list(C). -{ - LISTadd_last(B, (Generic)C); - A = B; -} +total_over ::= T_TOTAL_OVER T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON . +total_over ::= . -unique_clause(A) ::= /* unique clause is always optional */. -{ - A = 0; -} -unique_clause(A) ::= TOK_UNIQUE labelled_attrib_list_list(B). -{ - A = B; -} +type_head ::= T_TYPE T_SIMPLE_ID T_EQ . +type_decl ::= type_head underlying_type T_SEMICOLON where_clause T_END_TYPE T_SEMICOLON . +type_label ::= type_label_id . -until_control(A) ::= /* NULL */. -{ - A = 0; -} -until_control(A) ::= TOK_UNTIL expression(B). -{ - A = B; -} +underlying_type ::= concrete_types . +underlying_type ::= constructed_types . -where_clause(A) ::= expression(B) semicolon. -{ - A = WHERE_new(); - A->label = SYMBOLcreate("", yylineno, current_filename); - A->expr = B; -} -where_clause(A) ::= TOK_IDENTIFIER(B) TOK_COLON expression(C) semicolon. -{ - A = WHERE_new(); - A->label = B.symbol; - A->expr = C; - - if (!CURRENT_SCOPE->symbol_table) { - CURRENT_SCOPE->symbol_table = DICTcreate(25); - } - - DICTdefine(CURRENT_SCOPE->symbol_table, B.symbol->name, (Generic)A, - B.symbol, OBJ_WHERE); -} +unique_clause ::= T_UNIQUE unique_rule_list . +unique_clause ::= . +unique_rule_list ::= unique_rule_list unique_rule T_SEMICOLON . +unique_rule_list ::= unique_rule T_SEMICOLON . -where_clause_list(A) ::= where_clause(B). -{ - A = LISTcreate(); - LISTadd_last(A, (Generic)B); -} -where_clause_list(A) ::= where_clause_list(B) where_clause(C). -{ - A = B; - LISTadd_last(A, (Generic)C); -} +unique_rule ::= rule_label_id T_COLON referenced_attribute_list . +unique_rule ::= referenced_attribute_list . +referenced_attribute_list ::= referenced_attribute_list T_COMMA referenced_attribute . +referenced_attribute_list ::= referenced_attribute . -where_rule(A) ::= TOK_WHERE where_clause_list(B). -{ - A = B; -} +until_control ::= T_UNTIL logical_expression . +until_control ::= . -where_rule_OPT(A) ::= /* NULL body: no where rule */. -{ - A = LIST_NULL; -} -where_rule_OPT(A) ::= where_rule(B). -{ - A = B; -} +use_clause ::= T_USE T_FROM schema_ref T_LPAREN named_type_or_rename_list T_RPAREN T_SEMICOLON . +use_clause ::= T_USE T_FROM schema_ref T_SEMICOLON . +named_type_or_rename_list ::= named_type_or_rename_list T_COMMA named_type_or_rename . +named_type_or_rename_list ::= named_type_or_rename . -while_control(A) ::= /* NULL */. -{ - A = 0; -} -while_control(A) ::= TOK_WHILE expression(B). -{ - A = B; -} +where_clause ::= T_WHERE domain_rule_list . +where_clause ::= . +domain_rule_list ::= domain_rule T_SEMICOLON . +domain_rule_list ::= domain_rule_list domain_rule T_SEMICOLON . -%syntax_error { - Symbol sym; +while_control ::= T_WHILE logical_expression . +while_control ::= . +width ::= numeric_expression . +width_spec ::= T_LPAREN width T_RPAREN T_FIXED . +width_spec ::= T_LPAREN width T_RPAREN . - (void) yymajor; /* quell unused param warning */ - (void) yyminor; - yyerrstatus++; +express_file ::= schema_decl_list . - sym.line = yylineno; - sym.filename = current_filename; +schema_decl_list ::= schema_decl_list schema_decl . +schema_decl_list ::= schema_decl . - ERRORreport_with_symbol(SYNTAX, &sym, "Syntax error", - CURRENT_SCOPE_TYPE_PRINTABLE, CURRENT_SCOPE_NAME); +%syntax_error { + yyerror("syntax error on token type: '%s', val: '%s'", pState->lineno, yyTokenName[yymajor], yyminor->cstr); } -%stack_size 0 - -%stack_overflow { - fprintf(stderr, "Express parser experienced stack overflow.\n"); - /* - * fprintf(stderr, "Last token had value %x\n", yypMinor->yy0.val); - * fprintf(stderr, "Last token had value %x\n", yypParser->yytos->minor.yy0.val); - */ -} diff --git a/src/express/expr.c b/src/express/expr.c index 7f814cf89..de896df83 100644 --- a/src/express/expr.c +++ b/src/express/expr.c @@ -152,8 +152,10 @@ void EXPcleanup( void ) { */ static int EXP_resolve_op_dot_fuzzy( Type selection, Symbol sref, Expression * e, Variable * v, char * dt, struct Symbol_ ** where, int s_id ) { + Symbol *ep; Expression item; Variable tmp; + Linked_List supert, subt, uniqSubs; int options = 0; struct Symbol_ *w = NULL; @@ -170,15 +172,15 @@ static int EXP_resolve_op_dot_fuzzy( Type selection, Symbol sref, Expression * e *where = w; } *v = tmp; - *dt = DICT_type; + *dt = OBJ_VARIABLE; return 1; } else { return 0; } - case select_: { - Linked_List supert = LISTcreate(); - Linked_List subt = LISTcreate(); - Linked_List uniqSubs = LISTcreate(); + case select_: + supert = LISTcreate(); + subt = LISTcreate(); + uniqSubs = LISTcreate(); selection->search_id = s_id; LISTdo( selection->u.type->body->list, t, Type ) { int nr = EXP_resolve_op_dot_fuzzy( t, sref, e, v, dt, &w, s_id ); @@ -224,13 +226,15 @@ static int EXP_resolve_op_dot_fuzzy( Type selection, Symbol sref, Expression * e LISTfree( subt ); LISTfree( uniqSubs ); return options; - } case enumeration_: - item = ( Expression )DICTlookup( TYPEget_enum_tags( selection ), sref.name ); - if( item ) { + ep = HASHsearch(TYPEget_enum_tags( selection ), (Symbol) {.name = sref.name}, HASH_FIND); + if (ep) { + item = ep->data; *e = item; - *dt = DICT_type; + *dt = OBJ_ENUM; return 1; + } else { + return 0; } default: return 0; @@ -238,6 +242,7 @@ static int EXP_resolve_op_dot_fuzzy( Type selection, Symbol sref, Expression * e } Type EXPresolve_op_dot( Expression expr, Scope scope ) { + Symbol *ep; Expression op1 = expr->e.op1; Expression op2 = expr->e.op2; Variable v = 0; @@ -318,7 +323,7 @@ Type EXPresolve_op_dot( Expression expr, Scope scope ) { fprintf( stderr, "EXPresolved_op_dot: attribute not an attribute?\n" ); ERRORabort( 0 ); } - + break; default: /* compile-time ambiguous */ if( where ) { @@ -337,10 +342,12 @@ Type EXPresolve_op_dot( Expression expr, Scope scope ) { resolve_failed( expr ); return( Type_Bad ); } + /* TODO: now checked in parser? if( DICT_type != OBJ_VARIABLE ) { fprintf( stderr, "EXPresolved_op_dot: attribute not an attribute?\n" ); ERRORabort( 0 ); } + */ op2->u.variable = v; op2->return_type = v->type; @@ -357,9 +364,11 @@ Type EXPresolve_op_dot( Expression expr, Scope scope ) { resolve_failed( expr ); return( Type_Bad ); } + /* TODO: now checked in parser? if( DICT_type != OBJ_VARIABLE ) { fprintf( stderr, "ERROR: EXPresolved_op_dot: attribute not an attribute?\n" ); } + */ op2->u.variable = v; /* changed to set return_type */ @@ -369,14 +378,16 @@ Type EXPresolve_op_dot( Expression expr, Scope scope ) { case enumeration_: /* enumerations within a select will be handled by `case select_` above, * which calls EXP_resolve_op_dot_fuzzy(). */ - item = ( Expression )DICTlookup( TYPEget_enum_tags( op1type ), op2->symbol.name ); - if( !item ) { + ep = HASHsearch(TYPEget_enum_tags( op1type ), (Symbol) { .name = op2->symbol.name }, HASH_FIND); + if (!ep) { ERRORreport_with_symbol(ENUM_NO_SUCH_ITEM, &op2->symbol, op1type->symbol.name, op2->symbol.name ); resolve_failed( expr ); return( Type_Bad ); } - + + /* TODO: ep->data, ep->type? */ + item = ep->data; op2->u.expression = item; op2->return_type = item->type; resolved_all( expr ); @@ -600,17 +611,24 @@ Type EXPresolve_op_relational( Expression e, Scope s ) { void EXPresolve_op_default( Expression e, Scope s ) { int failed = 0; - - switch( OPget_number_of_operands( e->e.op_code ) ) { - case 3: - EXPresolve( e->e.op3, s, Type_Dont_Care ); - failed = is_resolve_failed( e->e.op3 ); - case 2: - EXPresolve( e->e.op2, s, Type_Dont_Care ); - failed |= is_resolve_failed( e->e.op2 ); + int nargs = OPget_number_of_operands( e->e.op_code ); + + if (nargs == 3) { + EXPresolve( e->e.op3, s, Type_Dont_Care ); + failed = is_resolve_failed( e->e.op3 ); + } + + if (nargs >= 2) { + EXPresolve( e->e.op2, s, Type_Dont_Care ); + failed |= is_resolve_failed( e->e.op2 ); + } + + if (1) { /* (nargs >= 1) */ + EXPresolve( e->e.op1, s, Type_Dont_Care ); + failed |= is_resolve_failed( e->e.op1 ); } - EXPresolve( e->e.op1, s, Type_Dont_Care ); - if( failed || is_resolve_failed( e->e.op1 ) ) { + + if (failed) { resolve_failed( e ); } else { resolved_all( e ); diff --git a/src/express/express.c b/src/express/express.c index 82e7b7889..3162ae1d9 100644 --- a/src/express/express.c +++ b/src/express/express.c @@ -74,23 +74,28 @@ #include #include "sc_memmgr.h" + #include "express/memory.h" +#include "express/hash.h" #include "express/basic.h" #include "express/express.h" #include "express/resolve.h" #include "express/factory.h" -#include "stack.h" #include "express/scope.h" +#include "express/exp_kw.h" + +#include "stack.h" #include "token_type.h" +#include "lexsupport.h" #include "expparse.h" #include "expscan.h" -#include "parse_data.h" -#include "express/lexact.h" +#if 0 void * ParseAlloc( void * ( *mallocProc )( size_t ) ); void ParseFree( void * parser, void ( *freeProc )( void * ) ); void Parse( void * parser, int tokenID, YYSTYPE data, parse_data_t parseData ); void ParseTrace(FILE *TraceFILE, char *zTracePrompt); +#endif Linked_List EXPRESS_path; int EXPRESSpass; @@ -108,13 +113,14 @@ bool EXPRESSignore_duplicate_schemas = false; Function funcdef(char *name, int pcount, Type ret_typ); void procdef(char *name, int pcount); void BUILTINSinitialize(); -Dictionary EXPRESSbuiltins; /* procedures/functions */ +Hash_Table EXPRESSbuiltins; /* procedures/functions */ struct Scope_ * FUNC_NVL; struct Scope_ * FUNC_USEDIN; +#if 0 extern Express yyexpresult; - +#endif extern Linked_List PARSEnew_schemas; void SCOPEinitialize( void ); @@ -255,7 +261,6 @@ void EXPRESSinitialize( void ) { ERRORinitialize(); HASHinitialize(); /* comes first - used by just about everything else! */ - DICTinitialize(); LISTinitialize(); /* ditto */ STACKinitialize(); PASSinitialize(); @@ -278,8 +283,6 @@ void EXPRESSinitialize( void ) { /* LOOP_CTLinitialize();*/ STMTinitialize(); - SCANinitialize(); - BUILTINSinitialize(); EXPRESS_PATHinit(); /* note, must follow defn of errors it needs! */ @@ -289,12 +292,10 @@ void EXPRESSinitialize( void ) { void EXPRESScleanup( void ) { EXPRESS_PATHfree(); - DICTcleanup(); ERRORcleanup(); RESOLVEcleanup(); TYPEcleanup(); EXPcleanup(); - SCANcleanup(); LISTcleanup(); } @@ -304,8 +305,10 @@ void EXPRESScleanup( void ) { ** Parse an Express source file into the Working Form. */ void EXPRESSparse( Express model, FILE * fp, char * filename ) { +#if 0 yyexpresult = model; - +#endif + if( !fp ) { fp = fopen( filename, "r" ); } @@ -340,12 +343,12 @@ void EXPRESSparse( Express model, FILE * fp, char * filename ) { } model->u.express->basename = ( char * )sc_malloc( length + 1 ); - memcpy( model->u.express->basename, filename, length ); + memcpy( model->u.express->basename, start, length ); model->u.express->basename[length] = '\0'; /* get new copy of filename to avoid being smashed */ /* by subsequent lookups on EXPRESS_path */ - model->u.express->filename = SCANstrdup( filename ); + model->u.express->filename = strdup( filename ); filename = model->u.express->filename; } @@ -353,6 +356,57 @@ void EXPRESSparse( Express model, FILE * fp, char * filename ) { PARSERrun( filename, model->u.express->file = fp ); } +static Express PARSERrun( char * filename, FILE * fp ) { + int tok; + struct YYSTYPE yylval; + struct YYSTATE *pState; + void *pParser, *pScanner; + + pScanner = yylexAlloc(); + pState = yystateAlloc(); + pParser = yyparseAlloc(sc_malloc); + + if( print_objects_while_running & OBJ_PASS_BITS ) { + fprintf( stderr, "parse (pass %d)\n", EXPRESSpass ); + } + + if( print_objects_while_running & OBJ_SCHEMA_BITS ) { + fprintf( stderr, "parse: %s (schema file)\n", filename ); + } + + yylexInit(pScanner, pState, fp); + + yyparseTrace(stderr, "dbg: "); + while ((tok = yylex(pScanner, &yylval))) { + yyparse(pParser, tok, &yylval, pState); + } + yyparse(pParser, 0, &yylval, pState); + +#if 0 + /* want 0 on success, 1 on invalid input, 2 on memory exhaustion */ + if( yyerrstatus != 0 ) { + fprintf( stderr, ">> Bailing! (yyerrstatus = %d)\n", yyerrstatus ); + ERRORreport( ERROR_bail_out ); + /* free model and model->u.express */ + return 0; + } + EXPRESSpass = 1; + +#endif + + /* TODO: yylexFree(pScanner) */ + yyparseFree(pParser, sc_free); + /* + yylexFree(pScanner); + yystateFree(pState); + */ + +#if 0 + return yyexpresult; +#endif +} + +#if 0 /* TODO LEMON ought to put this in expparse.h */ void parserInitState(); @@ -364,7 +418,7 @@ static Express PARSERrun( char * filename, FILE * fp ) { int tokenID; parse_data_t parseData; - void * parser = ParseAlloc( malloc ); + void * parser = ParseAlloc( sc_malloc ); perplex_t scanner = perplexFileScanner( fp ); parseData.scanner = scanner; @@ -397,10 +451,11 @@ static Express PARSERrun( char * filename, FILE * fp ) { EXPRESSpass = 1; perplexFree( scanner ); - ParseFree( parser, free ); + ParseFree( parser, sc_free ); return yyexpresult; } +#endif /** * find the final object to which a rename points @@ -409,52 +464,50 @@ static Express PARSERrun( char * filename, FILE * fp ) { * * Sept 2013 - remove unused param enum rename_type type (TODO should this be used)? */ -static void * SCOPEfind_for_rename( Scope schema, char * name ) { - void *result; - Rename * rename; +static Symbol *SCOPEfind_for_rename( Scope schema, const char * name ) { + Symbol *ep; /* object can only appear in top level symbol table */ /* OR in another rename clause */ - - result = DICTlookup( schema->symbol_table, name ); - if( result ) { - return result; + ep = HASHsearch(schema->symbol_table, (Symbol) {.name = name}, HASH_FIND); + if( ep ) { + return ep; } /* Occurs in a fully USE'd schema? */ LISTdo( schema->u.schema->use_schemas, use_schema, Schema ) { /* follow chain'd USEs */ - result = SCOPEfind_for_rename( use_schema, name ); - if( result ) { - return( result ); + ep = SCOPEfind_for_rename( use_schema, name ); + if (ep) { + return ep; } } LISTod; /* Occurs in a partially USE'd schema? */ - rename = ( Rename * )DICTlookup( schema->u.schema->usedict, name ); - if( rename ) { - RENAMEresolve( rename, schema ); - DICT_type = rename->type; - return( rename->object ); + ep = HASHsearch(schema->u.schema->usedict, (Symbol) {.name = name}, HASH_FIND); + if( ep ) { + RENAMEresolve( ep->data, schema ); + return ep; } LISTdo( schema->u.schema->uselist, r, Rename * ) if( !strcmp( ( r->nnew ? r->nnew : r->old )->name, name ) ) { RENAMEresolve( r, schema ); - DICT_type = r->type; - return( r->object ); + ep = SCOPEfind_for_rename( r->schema, r->old->name ); + if (ep) { + return ep; + } } LISTod; /* we are searching for an object to be interfaced from this schema. */ /* therefore, we *never* want to look at things which are REFERENCE'd */ /* *into* the current schema. -snc */ - - return 0; + return NULL; } void RENAMEresolve( Rename * r, Schema s ) { - void *remote; + Symbol *remote; /* if (is_resolved_rename_raw(r->old)) return;*/ if( r->object ) { @@ -474,13 +527,13 @@ void RENAMEresolve( Rename * r, Schema s ) { resolve_in_progress_raw( r->old ); remote = SCOPEfind_for_rename( r->schema, r->old->name ); - if( remote == 0 ) { + if (!remote) { ERRORreport_with_symbol( REF_NONEXISTENT, r->old, r->old->name, r->schema->symbol.name ); resolve_failed_raw( r->old ); } else { - r->object = remote; - r->type = DICT_type; + r->object = remote->data; + r->type = remote->type; switch( r->rename_type ) { case use: SCHEMAdefine_use( s, r ); @@ -496,30 +549,35 @@ void RENAMEresolve( Rename * r, Schema s ) { #ifdef using_enum_items_is_a_pain static void RENAMEresolve_enum( Type t, Schema s ) { - DictionaryEntry de; + Hash_Iterator it; + Symbol *ep; Expression x; - DICTdo_type_init( t->symbol_table, &de, OBJ_EXPRESSION ); - while( 0 != ( x = ( Expression )DICTdo( &de ) ) ) { + HASHdo_init( t->symbol_table, &it, OBJ_EXPRESSION ); + while( (ep = HASHdo( &it )) ) { + x = ep->data; + /* TODO: if this isn't required, should we delete it? */ /* SCHEMAadd_use(s, v*/ /* raw(x->symbol.name);*/ } } #endif -Schema EXPRESSfind_schema( Dictionary modeldict, char * name ) { +Schema EXPRESSfind_schema( Hash_Table modeldict, const char *name ) { + Symbol *ep; Schema s; FILE * fp; - char * src, *dest; - char lower[MAX_SCHEMA_FILENAME_SIZE]; /* avoid lowerizing original */ + const char *src; + char lower[MAX_SCHEMA_FILENAME_SIZE], *dest; if( print_objects_while_running & OBJ_SCHEMA_BITS ) { fprintf( stderr, "pass %d: %s (schema reference)\n", EXPRESSpass, name ); } - s = ( Schema )DICTlookup( modeldict, name ); - if( s ) { + ep = HASHsearch(modeldict, (Symbol) {.name = name}, HASH_FIND); + if (ep) { + s = ep->data; return s; } @@ -545,12 +603,12 @@ Schema EXPRESSfind_schema( Dictionary modeldict, char * name ) { EXPRESSpass, dir->full ); } - express = PARSERrun( SCANstrdup( dir->full ), fp ); + express = PARSERrun( strdup( dir->full ), fp ); if( express ) { - s = ( Schema )DICTlookup( modeldict, name ); - } - if( s ) { - return s; + ep = HASHsearch(modeldict, (Symbol) {.name = name}, HASH_FIND); + if( ep ) { + return ep->data; + } } ERRORreport( SCHEMA_NOT_IN_OWN_SCHEMA_FILE, name, dir->full ); @@ -571,7 +629,7 @@ Schema EXPRESSfind_schema( Dictionary modeldict, char * name ) { * because of partial schema references * \sa connect_schema_lists() */ -static void connect_lists( Dictionary modeldict, Schema schema, Linked_List list ) { +static void connect_lists( Hash_Table modeldict, Schema schema, Linked_List list ) { Rename * r; /* translate symbols to schemas */ @@ -592,7 +650,7 @@ static void connect_lists( Dictionary modeldict, Schema schema, Linked_List list * same as `connect_lists` except for full schemas * \sa connect_lists() */ -static void connect_schema_lists( Dictionary modeldict, Schema schema, Linked_List schema_list ) { +static void connect_schema_lists( Hash_Table modeldict, Schema schema, Linked_List schema_list ) { Symbol * sym; Schema ref_schema; @@ -620,8 +678,10 @@ void EXPRESSresolve( Express model ) { /* comes first - DEL */ Schema schema; - DictionaryEntry de; + Hash_Iterator it; + Symbol *ep; + /* TODO: do we really need to use setjmp? */ jmp_buf env; if( setjmp( env ) ) { return; @@ -668,8 +728,10 @@ void EXPRESSresolve( Express model ) { } /* connect the object in each rename clause to the real object */ - DICTdo_type_init( model->symbol_table, &de, OBJ_SCHEMA ); - while( 0 != ( schema = ( Schema )DICTdo( &de ) ) ) { + HASHdo_init( model->symbol_table, &it, OBJ_SCHEMA ); + while( (ep = HASHdo(&it)) ) { + schema = ep->data; + if( is_not_resolvable( schema ) ) { continue; } @@ -703,8 +765,10 @@ void EXPRESSresolve( Express model ) { fprintf( stderr, "pass %d: resolving sub and supertypes\n", EXPRESSpass ); } - DICTdo_type_init( model->symbol_table, &de, OBJ_SCHEMA ); - while( 0 != ( schema = ( Schema )DICTdo( &de ) ) ) { + HASHdo_init( model->symbol_table, &it, OBJ_SCHEMA ); + while( (ep = HASHdo(&it)) ) { + schema = ep->data; + if( is_not_resolvable( schema ) ) { continue; } @@ -734,8 +798,10 @@ void EXPRESSresolve( Express model ) { fprintf( stderr, "pass %d: resolving implied USE's\n", EXPRESSpass ); } - DICTdo_type_init( model->symbol_table, &de, OBJ_SCHEMA ); - while( 0 != ( schema = ( Schema )DICTdo( &de ) ) ) { + HASHdo_init( model->symbol_table, &it, OBJ_SCHEMA ); + while( (ep = HASHdo(&it)) ) { + schema = ep->data; + if( is_not_resolvable( schema ) ) { continue; } @@ -746,8 +812,11 @@ void EXPRESSresolve( Express model ) { } if( schema->u.schema->usedict ) { - DICTdo_init( schema->u.schema->usedict, &fg ) - while( 0 != ( r = ( Rename )DICTdo( &fg ) ) ) { + Hash_Iterator iv; + HASHdo_init( schema->u.schema->usedict, &iv, OBJ_ANY ) + while( (ep = HASHdo( &iv )) ) { + r = ep->data; + if( ( r->type = OBJ_TYPE ) && ( ( Type )r->object )->body && TYPEis_enumeration( ( Type )r->object ) ) { RENAMEresolve_enum( ( Type )r->object, schema ); @@ -771,12 +840,16 @@ void EXPRESSresolve( Express model ) { } /* mark everything resolved if possible */ - DICTdo_init( model->symbol_table, &de ); - while( 0 != ( schema = ( Schema )DICTdo( &de ) ) ) { +#if 0 + HASHdo_init( model->symbol_table, &it, '*' ); + while( (ep = HASHdo( &it ) ) ) { + schema = it->data; + if( is_resolvable( schema ) ) { resolved_all( schema ); } } +#endif } Function funcdef(char *name, int pcount, Type ret_typ) { @@ -786,7 +859,7 @@ Function funcdef(char *name, int pcount, Type ret_typ) { f->u.func->return_type = ret_typ; f->u.func->builtin = true; resolved_all(f); - DICTdefine(EXPRESSbuiltins, name, f, 0, OBJ_FUNCTION); + HASHsearch(EXPRESSbuiltins, (Symbol) {.name = name, .data = f, .type = OBJ_FUNCTION}, HASH_INSERT); return f; } @@ -796,11 +869,11 @@ void procdef(char *name, int pcount) { p->u.proc->pcount = pcount; p->u.proc->builtin = true; resolved_all(p); - DICTdefine(EXPRESSbuiltins, name, p, 0, OBJ_PROCEDURE); + HASHsearch(EXPRESSbuiltins, (Symbol) {.name = name, .data = p, .type = OBJ_PROCEDURE}, HASH_INSERT); } void BUILTINSinitialize() { - EXPRESSbuiltins = DICTcreate( 35 ); + EXPRESSbuiltins = HASHcreate(); procdef("INSERT", 3 ); procdef("REMOVE", 2 ); diff --git a/src/express/expscan.l b/src/express/expscan.l index cbd56c535..64df831d7 100644 --- a/src/express/expscan.l +++ b/src/express/expscan.l @@ -1,335 +1,844 @@ +#include +#include + +#include "sc_memmgr.h" -/* - * Lex source for Fed-X lexical analyzer. - * - * This software was developed by U.S. Government employees as part of - * their official duties and is not subject to copyright. - * - * $Log: expscan.l,v $ - * Revision 1.12 1997/05/29 20:17:34 sauderd - * Made some changes to Symbol (to be Symbol_) and false and true to be False - * and True. These changes affect the generated expscan.c file so that it will - * compile. - * - * Revision 1.11 1994/11/22 18:32:39 clark - * Part 11 IS; group reference - * - * Revision 1.10 1994/05/12 17:22:23 libes - * added #ifdefs for flex - * - * Revision 1.9 1994/05/12 17:18:10 libes - * made flex understand multiple files - * - * Revision 1.8 1994/05/11 19:50:00 libes - * numerous fixes - * - * Revision 1.7 1993/10/15 18:47:26 libes - * CADDETC certified - * - * Revision 1.5 1993/02/22 21:46:33 libes - * fixed unmatched_open_comment handler - * - * Revision 1.4 1992/08/18 17:11:36 libes - * rm'd extraneous error messages - * - * Revision 1.3 1992/06/08 18:05:20 libes - * prettied up interface to print_objects_when_running - * - * Revision 1.2 1992/05/31 08:30:54 libes - * multiple files - * - * Revision 1.1 1992/05/28 03:52:25 libes - * Initial revision - * - * Revision 1.4 1992/05/05 19:49:03 libes - * final alpha - * - * Revision 1.3 1992/02/12 07:02:49 libes - * do sub/supertypes - * - * Revision 1.2 1992/02/09 00:49:04 libes - * does ref/use correctly - * - * Revision 1.1 1992/02/05 08:40:30 libes - * Initial revision - * - * Revision 1.0.1.1 1992/01/22 02:47:57 libes - * copied from ~pdes - * - * Revision 4.9 1991/06/14 20:49:12 libes - * removed old infinity, added backslash - * - * Revision 4.8.1.1 1991/05/16 04:07:57 libes - * made scanner (under lex) understand hooks for doing include directive - * - * Revision 4.8.1.0 1991/05/16 01:10:15 libes - * branch for fixes to old code - * - * Revision 4.8 1991/05/03 21:09:02 libes - * Added sanity check to make sure lex/flex match -DLEX/FLEX - * - * Revision 4.7 1991/05/02 05:49:18 libes - * fixed bug in testing for exceeding open_comment[nesting_level] - * - * Revision 4.6 1991/04/29 19:44:40 libes - * Print all open comments rather than just one. - * - * Revision 4.5 1991/04/29 15:39:02 libes - * Changed commenting style (back) as per SNC who claims that N9 meant to - * say that tail remarks cannot occur in an open comment, nor can nested - * comments begin in a tail remark. - * - * Revision 4.4 1991/04/29 15:01:46 libes - * Add bounds checking to nesting level history - * - * Revision 4.3 1991/04/26 20:12:50 libes - * Made scanner work with lex - * Simulated exclusive states with inclusive states - * Fixed line counting - * Speeded up whitespace matching - * Convert unknown chars to whitespace - * Disabled default rule matching (enabled "jamming") - * Enabled detection/diagnostics of unterminated comments and strings literals - * Enabled detection/diagnostics of unexpected close comments - * Disabled detection/diagnostics of nested comments - * - * Revision 4.2 1990/12/18 14:00:04 clark - * Cosmetic changes - * - * Revision 4.1 90/09/13 16:29:00 clark - * BPR 2.1 alpha - * - */ - -#include "express/basic.h" -#include "express/error.h" -#include "express/lexact.h" -#include "express/express.h" #include "expparse.h" -#include "expscan.h" +#include "lexsupport.h" + +/*!types:re2c*/ + +void yy_push_state(int new_state, struct exp_scanner *scanner); +int yy_exch_state(int new_state, struct exp_scanner *scanner); +void yy_pop_state(struct exp_scanner *scanner); +int yy_top_state(struct exp_scanner *scanner); -enum { INITIAL, code, comment, return_end_schema }; +void brkt_push(struct intList *nesting); +int brkt_pop(struct intList *nesting); -extern int yylineno; -extern bool yyeof; -static int nesting_level = 0; +void lexdebug(int state, unsigned char symbol); -/* can't imagine this will ever be more than 2 or 3 - DEL */ -#define MAX_NESTED_COMMENTS 20 -static struct Symbol_ open_comment[MAX_NESTED_COMMENTS]; +#define IBUFSZ 128 -static_inline -int -SCANnextchar(char* buffer) +int yylex(struct exp_scanner *pScanner, struct YYSTYPE *plval) { - extern bool SCANread(void); -#ifdef keep_nul - static int escaped = 0; -#endif - - if (SCANtext_ready || SCANread()) { -#ifdef keep_nul - if (!*SCANcurrent) { - buffer[0] = SCAN_ESCAPE; - *SCANcurrent = '0'; - return 1; - } else if ((*SCANcurrent == SCAN_ESCAPE) && !escaped) { - escaped = 1; - buffer[0] = SCAN_ESCAPE; - return 1; - } - SCANbuffer.numRead--; -#endif - buffer[0] = *(SCANcurrent++); - if (!isascii(buffer[0])) { - ERRORreport_with_line(NONASCII_CHAR,yylineno, - 0xff & buffer[0]); - buffer[0] = ' '; /* substitute space */ - } - return 1; - } else - return 0; -} + int scanner_modes[] = {yycP1, yycP2, yycP3}; + size_t midx; + unsigned char ibuffer[IBUFSZ]; + unsigned char *id; + /*!stags:re2c format = 'unsigned char *@@;'; */ + int *brkt_nesting; + struct scope_def *sp, *scope; + int idx, tok, ibufchk = 0; + struct YYSTATE *pState = pScanner->state; + + plval->scope_idx = -1; + + /*!rules:re2c + + re2c:yyfill:enable = 0; + re2c:cond:divider = '/****************** @@ *****************/'; + + digit = [0-9] ; + xdigit = digit | [A-Fa-f] ; + letter = [A-Za-z] ; + not_paren_star_special = [!"#$%&+,-./:;<=>?@[\\\]^_`{|}~'] ; + + WS = [ \t\r\n] ; + BREAK = WS | ";" ; + + NOT_PAREN_STAR = letter | digit | not_paren_star_special ; + SPECIAL = not_paren_star_special | [()*] ; + + SIMPLE_ID = letter ( letter | digit | "_" )* ; + + "(*" { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + yy_push_state(yycCOMMENT, pScanner); + continue; + } + + "--" ( NOT_PAREN_STAR | [ \r\t)(*] )* / "\n" { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; + } -#define NEWLINE (yylineno++) + "--" { yyerror("invalid characters in tail remark! '%.*s'", pScanner->lineno, 20, pScanner->cur); } -/* when lex looks ahead over a newline, error messages get thrown off */ -/* Fortunately, we know when that occurs, so adjust for it by this hack */ -#define LINENO_FUDGE (yylineno - 1) + "'" ("''" | NOT_PAREN_STAR \ ['] | [)(*] | WS )* "'" { continue; } -/* added for re-initializing parser -snc 22-Apr-1992 */ -void -SCAN_lex_init(char *filename, FILE *fp) { + "'" { yyerror("invalid string literal! '%.*s'", pScanner->lineno, 20, pScanner->cur); } - /* return to initial scan buffer */ - SCAN_current_buffer = 0; - *(SCANcurrent = SCANbuffer.text) = '\0'; - SCANbuffer.readEof = false; - SCANbuffer.file = fp; - SCANbuffer.filename = (filename ? filename : ""); - current_filename = SCANbuffer.filename; -} -%% -digit = [0-9]; -integer = digit+; -letter = [A-Za-z]; -id_char = [A-Za-z0-9_]; - -<> => code - -/* Added * at the end of next rule (to make lexer faster) - DEL */ -<*>[\t ]* { IGNORE_TOKEN; } -<*>'\n' { - NEWLINE; - IGNORE_TOKEN; -} + ( NOT_PAREN_STAR \ ['-] )+ { continue; } -"--"[^\n]*'\n' { - NEWLINE; - SCANsave_comment(yytext); - IGNORE_TOKEN; -} + [)(*'-] { continue; } -<*>"(*" => comment { - /* nested comment errors will occur with most deeply nested - DEL */ - if (nesting_level < MAX_NESTED_COMMENTS) { - open_comment[nesting_level].line = yylineno; - open_comment[nesting_level].filename = current_filename; + "(*" { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + yy_push_state(yycCOMMENT, pScanner); + continue; + } + "*"+ ")" { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + yy_pop_state(pScanner); + continue; + } + "*"+ { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; + } + NOT_PAREN_STAR+ { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; + } + [)(] { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; } - nesting_level++; - IGNORE_TOKEN; -} - { + + 'SCHEMA' WS+ @id SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_SCHEMA_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "SCHEMA", OBJ_SCHEMA_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } + 'FUNCTION' WS+ @id SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_FUNCTION_REF, pScanner); -/* real literal (like, think it'll fly?!) */ -(integer)'.'(integer)?([eE][+-]?(integer))? { - return SCANprocess_real_literal(yytext); -} + idx = scope_alloc(pState->scope_stack, "FUNCTION", OBJ_FUNCTION_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); -/* integer literal */ -integer { - return SCANprocess_integer_literal(yytext); -} + continue; + } + 'PROCEDURE' WS+ @id SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_PROCEDURE_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "PROCEDURE", OBJ_PROCEDURE_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } + 'RULE' WS+ @id SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_RULE_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "RULE", OBJ_RULE_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } + 'ENTITY' WS+ @id SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_ENTITY_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "ENTITY", OBJ_ENTITY_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } + 'TYPE' WS+ @id SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_TYPE_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "TYPE", OBJ_TYPE_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } -/* binary literal */ -'%'[01]+ { - return SCANprocess_binary_literal(yytext); -} + 'END_' ('SCHEMA'|'FUNCTION'|'PROCEDURE'|'RULE'|'ENTITY'|'TYPE') / BREAK { + scope_pop(pState, pScanner); + continue; + } -/* identifier/keyword */ -(letter)(id_char)* { - return SCANprocess_identifier_or_keyword(yytext); -} + "'" ("''" | NOT_PAREN_STAR \ ['] | [)(*] | WS )* "'" { continue; } + SIMPLE_ID { continue; } + * { continue; } -/* bad identifier */ -[_A-Za-z]id_char* { - ERRORreport_with_line(BAD_IDENTIFIER, yylineno, yytext); - return SCANprocess_identifier_or_keyword(yytext); -} -/* string literal */ -"'"([^'\n]|"''")*"'" { - /* ' keep font-lock happy */ - return SCANprocess_string(yytext); -} + "=" { return T_EQ; } + 'ENUMERATION' / WS { + yy_push_state(yycENUM, pScanner); + return T_ENUMERATION; + } + 'EXTENSIBLE' / WS { return T_EXTENSIBLE; } + 'WHERE' / WS { + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_WHERE; + } + ";" / WS* 'WHERE' { return T_SEMICOLON; } + ";" { + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_SEMICOLON; + } + ";" / WS* 'END_TYPE' { return T_SEMICOLON; } + 'END_TYPE' / BREAK { + yy_pop_state(pScanner); + scope_pop(pState, pScanner); + return T_END_TYPE; + } + "" { yy_push_state(yycSTMT, pScanner); continue; } + + "(" { yy_push_state(yycENUM_ID_LIST, pScanner); return T_LPAREN; } + ")" { yy_pop_state(pScanner); return T_RPAREN; } + "" :=> P3 + + 'DERIVE' / WS { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = false; + pScanner->in_rules_clause = false; + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycID_LIST, pScanner); + return T_DERIVE; + } + 'INVERSE' / WS { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = true; + pScanner->in_rules_clause = false; + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycID_LIST, pScanner); + return T_INVERSE; + } + 'UNIQUE' / WS { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = false; + pScanner->in_rules_clause = true; + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_UNIQUE; + } + 'WHERE' / WS { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = false; + pScanner->in_rules_clause = true; + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_WHERE; + } + ":" / [^=<] { + if (pScanner->in_inverse_clause || pScanner->in_explicit_attr) { + pScanner->scope_aux = scope_pop(pState, pScanner); + } + if (!pScanner->in_inverse_clause) { + yy_push_state(yycSTMT, pScanner); + } else { + yy_push_state(yycINV_FOR_STMT, pScanner); + } + return T_COLON; + } + ";" / WS* ('DERIVE'|'INVERSE'|'UNIQUE'|'WHERE'|'END_ENTITY') BREAK { + if (pScanner->scope_aux) { + scope_push(pState, pScanner->scope_aux, pScanner); + pScanner->scope_aux = 0; + } + return T_SEMICOLON; + } + ";" { + if (pScanner->scope_aux) { + scope_push(pState, pScanner->scope_aux, pScanner); + pScanner->scope_aux = 0; + } + if (!pScanner->in_rules_clause) { + yy_push_state(yycID_LIST, pScanner); + } else { + yy_push_state(yycLABEL_OPT, pScanner); + } + return T_SEMICOLON; + } + 'END_ENTITY' / BREAK { + scope_pop(pState, pScanner); + yy_pop_state(pScanner); + return T_END_ENTITY; + } + "" :=> P3 -"'"([^'\n]|"''")*'\n' { - ERRORreport_with_line(UNTERMINATED_STRING, LINENO_FUDGE); - NEWLINE; - return SCANprocess_string(yytext); -} + [(;] { + /* TODO: bracket_count */ + pScanner->id_ref_typ = T_PARAMETER_REF; + yy_push_state(yycID_LIST, pScanner); + return ( *pScanner->tok == '(' ) ? T_LPAREN : T_SEMICOLON; + } + ")" { + /* TODO: bracket_count */ + yy_pop_state(pScanner); + return T_RPAREN; + } + 'VAR' / WS { + pScanner->id_ref_typ = T_PARAMETER_REF; + yy_push_state(yycID_LIST, pScanner); + return T_VAR; + } + "" :=> P3 -'"'[^\"\n]*'"' { - return SCANprocess_encoded_string(yytext); -} + 'WHERE'/ WS { + pScanner->in_rules_clause = true; + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_WHERE; + } + ";" { + if (!pScanner->in_rules_clause) { + /* TODO: is this branch ever followed? */ + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycSTMT, pScanner); + } else { + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + } + return T_SEMICOLON; + } + ";" / WS* 'WHERE' WS { return T_SEMICOLON; } + ";" / WS* 'END_RULE' { return T_SEMICOLON; } + 'END_RULE' / BREAK { + pScanner->in_rules_clause = false; + scope_pop(pState, pScanner); + return T_END_RULE; + } + "" { yy_push_state(yycSTMT, pScanner); continue; } + + ")" { + brkt_nesting = pScanner->brkt_nesting->entry + pScanner->brkt_nesting->qty; + if (!--*brkt_nesting) { + brkt_pop(pScanner->brkt_nesting); + scope_pop(pState, pScanner); + yy_pop_state(pScanner); + } + return T_RPAREN; + } + "(" { + brkt_nesting = pScanner->brkt_nesting->entry + pScanner->brkt_nesting->qty; + ++*brkt_nesting; + return T_LPAREN; + } + "" :=> P3 -'"'[^\"\n]*'\n' { - ERRORreport_with_line(UNTERMINATED_STRING, LINENO_FUDGE); - NEWLINE; - return SCANprocess_encoded_string(yytext); -} + 'RENAMED' / WS { + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_RENAMED; + } + [,:] { --pScanner->cur; yy_pop_state(pScanner); continue; } + "" :=> P3 -';'[ \t]*"--"[^\n]*'\n' { - NEWLINE; - return SCANprocess_semicolon(yytext, 1); -} + ";" { --pScanner->cur; yy_pop_state(pScanner); continue; } + "" :=> P3 -";" { return SCANprocess_semicolon(yytext, 0); } -":=" { return TOK_ASSIGNMENT; } -":" { return TOK_COLON; } -"," { return TOK_COMMA; } -"||" { return TOK_CONCAT_OP; } -"." { return TOK_DOT; } -"=" { return TOK_EQUAL; } -"**" { return TOK_EXP; } -"|" { return TOK_SUCH_THAT; } -"<*" { return TOK_ALL_IN; } -">=" { return TOK_GREATER_EQUAL; } -">" { return TOK_GREATER_THAN; } -"?" { return TOK_QUESTION_MARK; } -":=:" { return TOK_INST_EQUAL; } -":<>:" { return TOK_INST_NOT_EQUAL; } -"[" { return TOK_LEFT_BRACKET; } -"{" { return TOK_LEFT_CURL; } -"(" { return TOK_LEFT_PAREN; } -"<=" { return TOK_LESS_EQUAL; } -"<" { return TOK_LESS_THAN; } -"-" { return TOK_MINUS; } -"<>" { return TOK_NOT_EQUAL; } -"+" { return TOK_PLUS; } -"/" { return TOK_REAL_DIV; } -"]" { return TOK_RIGHT_BRACKET; } -"}" { return TOK_RIGHT_CURL; } -")" { return TOK_RIGHT_PAREN; } -"*" { return TOK_TIMES; } -"\\" { return TOK_BACKSLASH; } - -} /* */ - -'X' => code { - return TOK_END_SCHEMA; -} + 'FOR' / WS { yy_push_state(yycINV_FOR, pScanner); return T_FOR; } + ";" { --pScanner->cur; yy_pop_state(pScanner); continue; } + "" :=> P3 + + "%" [01]+ { return T_BINARY_LITERAL; } + + digit+ { return T_INTEGER_LITERAL; } + + digit+ "." digit* ([eE] [+-]? digit+)? { return T_REAL_LITERAL; } + + "'" ("''" | NOT_PAREN_STAR \ ['] | [)(*] | WS )* "'" { return T_STRING_LITERAL; } -"*)" { - if (0 == --nesting_level) { - YYSETCONDITION(code); + "\"" ( xdigit{4} )+ "\"" { return T_ENCODED_STRING_LITERAL; } + "\"" { yyerror("invalid encoded string literal! '%.*s'", pScanner->lineno, 20, pScanner->cur); } + + 'SCHEMA'/ WS { + pScanner->scope_typ = OBJ_SCHEMA_BITS; + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_SCHEMA; + } + 'END_SCHEMA' / BREAK { + scope_pop(pState, pScanner); + return T_END_SCHEMA; } - IGNORE_TOKEN; -} -"*)" { - ERRORreport_with_line(UNMATCHED_CLOSE_COMMENT, yylineno); - IGNORE_TOKEN; -} + 'TYPE' / WS { + pScanner->scope_typ = OBJ_TYPE_BITS; + yy_push_state(yycTYPE, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_TYPE; + } - { + 'ENTITY' / WS { + pScanner->scope_typ = OBJ_ENTITY_BITS; + pScanner->id_ref_typ = T_SIMPLE_REF; + pScanner->in_inverse_clause = false; + pScanner->in_explicit_attr = true; + pScanner->in_rules_clause = false; + pScanner->scope_aux = 0; + + yy_push_state(yycENTITY, pScanner); + yy_push_state(yycSTMT, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + + return T_ENTITY; + } + + 'FUNCTION' / WS* SIMPLE_ID WS* "(" { + pScanner->scope_typ = OBJ_FUNCTION_BITS; + yy_push_state(yycARG_LIST, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_FUNCTION; + } + 'FUNCTION' / WS { + pScanner->scope_typ = OBJ_FUNCTION_BITS; + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_FUNCTION; + } + 'END_FUNCTION' / BREAK { + scope_pop(pState, pScanner); + return T_END_FUNCTION; + } -'\n' { - NEWLINE; - IGNORE_TOKEN; + 'PROCEDURE' / WS* SIMPLE_ID WS* "(" { + pScanner->scope_typ = OBJ_PROCEDURE_BITS; + yy_push_state(yycARG_LIST, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_PROCEDURE; + } + 'PROCEDURE' / WS { + pScanner->scope_typ = OBJ_PROCEDURE_BITS; + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_PROCEDURE; + } + 'END_PROCEDURE' / BREAK { + scope_pop(pState, pScanner); + return T_END_PROCEDURE; + } + + 'RULE' / WS { + pScanner->scope_typ = OBJ_RULE_BITS; + yy_push_state(yycRULE, pScanner); + yy_push_state(yycSTMT, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_RULE; + } + + 'ALIAS' / WS { + idx = scope_alloc(pState->scope_stack, "ALIAS", OBJ_ALIAS_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "QANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + pScanner->anon_scope_cnt++; + + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_ALIAS; + } + 'END_ALIAS' / BREAK { + scope_pop(pState, pScanner); + return T_END_ALIAS; + } + + 'SUBTYPE_CONSTRAINT' / WS { + /* _ref not supported, as only used in remarks */ + pScanner->id_ref_typ = T_INVALID; + + yy_push_state(yycSUBTYPE_CONS, pScanner); + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_SUBTYPE_CONSTRAINT; + } + + 'END_SUBTYPE_CONSTRAINT' / BREAK { + /* TODO: not clear, rework? - the Entity scope is pushed in */ + scope_pop(pState, pScanner); + return T_END_SUBTYPE_CONSTRAINT; + } + + 'REPEAT' / WS+ SIMPLE_ID WS* ":=" { + idx = scope_alloc(pState->scope_stack, "REPEAT", OBJ_REPEAT_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "REP_ANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + pScanner->anon_scope_cnt++; + + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_REPEAT; + } + 'REPEAT' / WS { + idx = scope_alloc(pState->scope_stack, "REPEAT", OBJ_REPEAT_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "REP_ANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + pScanner->anon_scope_cnt++; + return T_REPEAT; + } + 'END_REPEAT' / BREAK { + scope_pop(pState, pScanner); + return T_END_REPEAT; + } + + 'QUERY' / WS* "(" { + /* TODO: clean up this mess! */ + idx = scope_alloc(pState->scope_stack, "QUERY", OBJ_QUERY_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "QRY_ANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + + brkt_push(pScanner->brkt_nesting); + brkt_nesting = pScanner->brkt_nesting->entry + pScanner->brkt_nesting->qty; + ++*brkt_nesting; + + pScanner->anon_scope_cnt++; + + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycQUERY, pScanner); + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_QUERY; + } + + 'CONSTANT' / WS { + yy_push_state(yycCONSTANT, pScanner); + return T_CONSTANT; + } + + 'LOCAL' / WS { + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycLOCAL, pScanner); + yy_push_state(yycID_LIST, pScanner); + return T_LOCAL; + } + + /* recognise type_ref '.' */ + SIMPLE_ID / WS* "." WS* SIMPLE_ID WS* [^.] { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + tok = resolve_symbol(pState, ibuffer, pScanner); + if (tok == T_TYPE_REF) + yy_push_state(yycENUM_REF, pScanner); + return tok; + } + + /* recognise group_qualifier */ + "\\" / WS* SIMPLE_ID { + yy_push_state(yycENTITY_REF, pScanner); + return T_BACKSLASH; + } + + /* return only T_SIMPLE_ID for all occurences of type_label */ + 'GENERIC_ENTITY' / WS* ":" [^=<] { + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_GENERIC_ENTITY; + } + + 'AGGREGATE' / WS* ":" [^=<] { + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_AGGREGATE; + } + + 'GENERIC' / WS* ":" [^=<] { + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_GENERIC; + } + + "." / WS* SIMPLE_ID { + yy_push_state(yycDOT_ATTR, pScanner); + return T_DOT; + } + + SIMPLE_ID { + int i; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + for (i=0; reserved_keywords[i].kw != NULL; i++) { + if (!strcasecmp(ibuffer, reserved_keywords[i].kw)) { + return reserved_keywords[i].token; + } + } + + tok = resolve_symbol(pState, ibuffer, pScanner); + plval->cstr = strdup(ibuffer); + return tok; + } + + /* special characters */ + "+" { return T_PLUS; } + "-" { return T_MINUS; } + "*" { return T_TIMES; } + "/" { return T_RDIV; } + "**" { return T_EXP; } + + "=" { return T_EQ; } + "<>" { return T_NEQ; } + ">" { return T_GT; } + "<" { return T_LT; } + ">=" { return T_GTEQ; } + "<=" { return T_LTEQ; } + + "(" { return T_LPAREN; } + ")" { return T_RPAREN; } + "{" { return T_LCURL; } + "}" { return T_RCURL; } + "[" { return T_LBRKT; } + "]" { return T_RBRKT; } + + "," { return T_COMMA; } + ":" { return T_COLON; } + ";" { return T_SEMICOLON; } + + "\\" { return T_BACKSLASH; } + "." { return T_DOT; } + "<*" { return T_ALL_IN; } + "|" { return T_PIPE; } + ":=" { return T_ASSIGN; } + "||" { return T_CONCAT; } + ":=:" { return T_INST_EQ; } + ":<>:" { return T_INST_NEQ; } + + "?" { return T_QMARK; } + + [!"#$%&@^_`'] { return T_INVALID; } + + <*> ( WS \ [\n] )+ { continue; } + <*> [\n] { pScanner->lineno++; continue; } + + SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + idx = scope_find(pState, pScanner->scope_typ, ibuffer, pScanner); + scope_push(pState, idx, pScanner); + yy_pop_state(pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } + + SIMPLE_ID { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, pScanner->id_ref_typ, pScanner); + yy_pop_state(pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } + [(:] { return ( *pScanner->tok == '(' ) ? T_LPAREN : T_COLON; } + + SIMPLE_ID / WS* [,:)] { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, pScanner->id_ref_typ, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } + 'SELF' / WS* "\\" { yy_push_state(yycREDECL, pScanner); return T_SELF; } + "," { return T_COMMA; } + "" { yy_pop_state(pScanner); continue; } + + SIMPLE_ID / WS* [,)] { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, T_ENUMERATION_REF, pScanner); + add_symbol(pState->scope_stack->entry + sp->parent, ibuffer, T_ENUMERATION_REF, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } + "," { return T_COMMA; } + ")" { --pScanner->cur; yy_pop_state(pScanner); continue; } + + SIMPLE_ID / WS* ":" { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, pScanner->id_ref_typ, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } + "" { yy_exch_state(yycSTMT, pScanner); continue; } + + "." { return T_DOT; } + SIMPLE_ID { + yy_pop_state(pScanner); + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_ENUMERATION_REF; + } + + SIMPLE_ID { + yy_pop_state(pScanner); + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_ENTITY_REF; + } + + SIMPLE_ID { + yy_pop_state(pScanner); + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_REF; + } + + ":" { yy_push_state(yycSTMT, pScanner); return T_COLON; } + ";" { return T_SEMICOLON; } + ";" / WS* 'END_CONSTANT' { return T_SEMICOLON; } + 'END_CONSTANT' / BREAK { + yy_pop_state(pScanner); + return T_END_CONSTANT; + } + SIMPLE_ID / WS* ":" { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, T_CONSTANT_REF, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } + + ":" { yy_push_state(yycSTMT, pScanner); return T_COLON; } + ";" { + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycID_LIST, pScanner); + return T_SEMICOLON; + } + ";" / WS* 'END_LOCAL' { return T_SEMICOLON; } + 'END_LOCAL' / BREAK { + yy_pop_state(pScanner); + return T_END_LOCAL; + } + + SIMPLE_ID / WS* "." { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_ENTITY_REF; + } + SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_REF; + } + ";" { --pScanner->cur; yy_pop_state(pScanner); continue; } + + 'FOR' / WS { return T_FOR; } + SIMPLE_ID { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + idx = scope_find(pState, OBJ_ENTITY_BITS, ibuffer, pScanner); + scope_push(pState, idx, pScanner); + plval->cstr = strdup(ibuffer); + return T_ENTITY_REF; + } + ";" { yy_pop_state(pScanner); return T_SEMICOLON; } + + * { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } + + */ + + switch(pScanner->mode) { + case yycP3: + goto lbl_p3; + case yycP1: + goto lbl_prescan; + case yycP2: + yyerror("internal error - scanner should not be able to reach mode P2 here!", pScanner->lineno); + default: + yyerror("invalid scanning mode!", pScanner->lineno); + } + +lbl_prescan: + for (midx=0; midx < sizeof(scanner_modes); midx++ ) { + yylexReset(pScanner, scanner_modes[midx]); + pScanner->lineno = 1; + +lbl_p3: + while (pScanner->cur < pScanner->lim) { + if (ibufchk >= IBUFSZ) + yyerror("id buffer overflow - undefined behaviour!", pScanner->lineno); + + pScanner->tok = pScanner->cur; + + /*!use:re2c + re2c:define:YYCTYPE = 'unsigned char'; + re2c:define:YYDEBUG = 'if (pScanner->debug) lexdebug' ; + re2c:define:YYGETCONDITION = 'yy_top_state(pScanner)' ; + re2c:define:YYGETCONDITION:naked = 1 ; + re2c:define:YYSETCONDITION = '(void)(@@);' ; + re2c:define:YYSETCONDITION:naked = 1 ; + re2c:define:YYCURSOR = 'pScanner->cur' ; + re2c:define:YYLIMIT = 'pScanner->lim' ; + re2c:define:YYMARKER = 'pScanner->mrk' ; + re2c:define:YYCTXMARKER = 'pScanner->ctx' ; + */ + } + + if (pScanner->mode == yycP3) + break; + } + + return 0; } -[^*()\n]* { IGNORE_TOKEN; } -[*()] { IGNORE_TOKEN; } -} /* */ +void brkt_push(struct intList *nesting) { + int *brkt_count; + nesting->qty++; + brkt_count = nesting->entry + nesting->qty; + *brkt_count = 0; +} -/* As per N15, 7.1.5.3, all other recognized chars are incorrect - DEL */ -[$%&@\^{}~] { - ERRORreport_with_line(UNEXPECTED_CHARACTER,yylineno,yytext[0]); - IGNORE_TOKEN; +int brkt_pop(struct intList *nesting) { + nesting->qty--; + return 0; } -/* ... and unrecognized characters are treated as whitespace - DEL */ -<*>[^] { IGNORE_TOKEN; } -%% -void -SCANskip_to_end_schema(perplex_t scanner) -{ - while (yylex(scanner) != TOK_END_SCHEMA); +void yy_push_state(int new_state, struct exp_scanner *scanner) { + int *p; + size_t sz; + + if (scanner->cond_top + 1 < scanner->cond_stack->mlen) { + scanner->cond_stack->entry[++scanner->cond_top] = new_state; + } else { + sz = scanner->cond_stack->mlen + 10; + p = sc_realloc(scanner->cond_stack->entry, sz * sizeof(int)); + if (!p) + yyerror("condition stack overflow!", 0); + scanner->cond_stack->entry = p; + scanner->cond_stack->mlen = sz; + scanner->cond_stack->entry[++scanner->cond_top] = new_state; + } +} + +int yy_exch_state(int new_state, struct exp_scanner *scanner) { + int old_state; + + if (scanner->cond_top >= scanner->cond_stack->mlen) + yyerror("fatal, lexer condition stack is invalid!", 0); + + old_state = scanner->cond_stack->entry[scanner->cond_top]; + scanner->cond_stack->entry[scanner->cond_top] = new_state; + return old_state; +} + +void yy_pop_state(struct exp_scanner *scanner) { + if (!scanner->cond_top) + yyerror("fatal, lexer trying invalid condition stack pop!", 0); + + scanner->cond_top--; +} - perplexUnput(scanner, 'X'); /* any old character */ +int yy_top_state(struct exp_scanner *scanner) { + return scanner->cond_stack->entry[scanner->cond_top]; +} - YYSETCONDITION(return_end_schema); +void lexdebug(int state, unsigned char symbol) { + fprintf(stderr, "LEXSTATE(%i): %c\n", state, symbol); } diff --git a/src/express/factory.c b/src/express/factory.c index daf6ee7d3..472a106a1 100644 --- a/src/express/factory.c +++ b/src/express/factory.c @@ -2,7 +2,7 @@ #include "express/type.h" #include "express/expr.h" -#include "express/dict.h" +#include "symbol_impl.h" /* TODO: use enum? */ Type Type_Bad; @@ -137,14 +137,14 @@ void FACTORYinitialize() { /** Create and return an empty scope inside a parent scope. */ Scope SCOPEcreate( char type ) { Scope d = SCOPE_new(); - d->symbol_table = DICTcreate( 50 ); + d->symbol_table = HASHcreate(); d->type = type; return d; } Scope SCOPEcreate_tiny( char type ) { Scope d = SCOPE_new(); - d->symbol_table = DICTcreate( 1 ); + d->symbol_table = HASHcreate(); d->type = type; return d; } @@ -166,7 +166,7 @@ Scope SCOPEcreate_nostab( char type ) { /** Create and return a schema. */ Schema SCHEMAcreate( void ) { Scope s = SCOPEcreate( OBJ_SCHEMA ); - s->enum_table = DICTcreate(50); + s->enum_table = HASHcreate(); s->u.schema = SCHEMA_new(); return s; } @@ -174,13 +174,15 @@ Schema SCHEMAcreate( void ) { /** * create a type with no symbol table */ -Type TYPEcreate_nostab( struct Symbol_ *symbol, Scope scope, char objtype ) { +Type TYPEcreate_nostab( Symbol *symbol, Scope scope, char objtype ) { + Symbol e; Type t = SCOPEcreate_nostab( OBJ_TYPE ); TypeHead th = TYPEHEAD_new(); t->u.type = th; t->symbol = *symbol; - DICTdefine( scope->symbol_table, symbol->name, t, &t->symbol, objtype ); + e = (Symbol) {.name = symbol->name, .data = t, .type = objtype}; + HASHsearch( scope->symbol_table, e, HASH_INSERT ); return t; } @@ -212,7 +214,6 @@ Type TYPEcreate_from_body_anonymously( TypeBody tb ) { t->u.type = th; t->u.type->body = tb; t->symbol.name = 0; - SYMBOLset( t ); return t; } @@ -222,16 +223,14 @@ TypeBody TYPEBODYcreate( enum type_enum type ) { return tb; } -Symbol * SYMBOLcreate( char * name, int line, const char * filename ) { +Symbol *SYMBOLcreate(char * name, int type, int ref_tok, int line, const char * filename) { Symbol * sym = SYMBOL_new(); sym->name = name; + sym->type = type; + sym->ref_tok = ref_tok; sym->line = line; - sym->filename = filename; /* NOTE this used the global 'current_filename', - * instead of 'filename'. This func is only - * called in two places, and both calls use - * 'current_filename'. Changed this to avoid - * potential future headaches. (MAP, Jan 12) - */ + sym->filename = filename; + return sym; } @@ -276,7 +275,6 @@ Variable VARcreate( Expression name, Type type ) { Expression EXPcreate( Type type ) { Expression e; e = EXP_new(); - SYMBOLset( e ); e->type = type; e->return_type = Type_Unknown; return( e ); @@ -289,7 +287,6 @@ Expression EXPcreate( Type type ) { Expression EXPcreate_simple( Type type ) { Expression e; e = EXP_new(); - SYMBOLset( e ); e->type = e->return_type = type; return( e ); } @@ -366,7 +363,9 @@ Expression QUERYcreate( Symbol * local, Expression aggregate ) { Variable v = VARcreate( e2, Type_Attribute ); - DICTdefine( s->symbol_table, local->name, v, &e2->symbol, OBJ_VARIABLE ); + HASHsearch( s->symbol_table, + (Symbol) {.name = local->name, .data = v, .type = OBJ_VARIABLE}, + HASH_INSERT ); e->u.query = QUERY_new(); e->u.query->scope = s; e->u.query->local = v; diff --git a/src/express/generated/expparse.c b/src/express/generated/expparse.c index 217c349d6..a3cc2889b 100644 --- a/src/express/generated/expparse.c +++ b/src/express/generated/expparse.c @@ -1,220 +1,133 @@ -/* Driver template for the LEMON parser generator. -** The author disclaims copyright to this source code. +/* +** 2000-05-29 +** +** The author disclaims copyright to this source code. In place of +** a legal notice, here is a blessing: +** +** May you do good and not evil. +** May you find forgiveness for yourself and forgive others. +** May you share freely, never taking more than you give. +** +************************************************************************* +** Driver template for the LEMON parser generator. +** +** The "lemon" program processes an LALR(1) input grammar file, then uses +** this template to construct a parser. The "lemon" program inserts text +** at each "%%" line. Also, any "P-a-r-s-e" identifer prefix (without the +** interstitial "-" characters) contained in this template is changed into +** the value of the %name directive from the grammar. Otherwise, the content +** of this template is copied straight through into the generate parser +** source file. +** +** The following is the concatenation of all %include directives from the +** input grammar file: */ -/* First off, code is included that follows the "include" declaration -** in the input grammar file. */ #include -#line 2 "expparse.y" - -#include -#include "token_type.h" -#include "parse_data.h" - -int yyerrstatus = 0; -#define yyerrok (yyerrstatus = 0) - -YYSTYPE yylval; - - /* - * YACC grammar for Express parser. - * - * This software was developed by U.S. Government employees as part of - * their official duties and is not subject to copyright. - * - * $Log: expparse.y,v $ - * Revision 1.23 1997/11/14 17:09:04 libes - * allow multiple group references - * - * ** 22 older revision log records removed 3 January 2014 ** - */ - -#include "express/symbol.h" -#include "express/linklist.h" -#include "stack.h" -#include "express/express.h" -#include "express/schema.h" -#include "express/entity.h" -#include "express/resolve.h" -#include "expscan.h" -#include - - extern int print_objects_while_running; - - int tag_count; /**< use this to count tagged GENERIC types in the formal - * argument lists. Gross, but much easier to do it this - * way then with the 'help' of yacc. Set it to -1 to - * indicate that tags cannot be defined, only used - * (outside of formal parameter list, i.e. for return - * types). Hey, as long as there's a gross hack sitting - * around, we might as well milk it for all it's worth! - * - snc - */ - - int local_var_count; /**< used to keep LOCAL variables in order - * used in combination with Variable.offset - */ - - Express yyexpresult; /* hook to everything built by parser */ +/************ Begin %include sections from the grammar ************************/ +#line 159 "expparse.y" - Symbol *interface_schema; /* schema of interest in use/ref clauses */ - void (*interface_func)(); /* func to attach rename clauses */ - /* record schemas found in a single parse here, allowing them to be */ - /* differentiated from other schemas parsed earlier */ - Linked_List PARSEnew_schemas; - - void SCANskip_to_end_schema(perplex_t scanner); - - int yylineno; - - bool yyeof = false; - -#define MAX_SCOPE_DEPTH 20 /* max number of scopes that can be nested */ - - static struct scope { - struct Scope_ *this_; - char type; /* one of OBJ_XXX */ - struct scope *pscope; /* pointer back to most recent scope */ - /* that has a printable name - for better */ - /* error messages */ - } scopes[MAX_SCOPE_DEPTH], *scope; -#define CURRENT_SCOPE (scope->this_) -#define PREVIOUS_SCOPE ((scope-1)->this_) -#define CURRENT_SCHEMA (scope->this_->u.schema) -#define CURRENT_SCOPE_NAME (OBJget_symbol(scope->pscope->this_,scope->pscope->type)->name) -#define CURRENT_SCOPE_TYPE_PRINTABLE (OBJget_type(scope->pscope->type)) - - /* ths = new scope to enter */ - /* sym = name of scope to enter into parent. Some scopes (i.e., increment) */ - /* are not named, in which case sym should be 0 */ - /* This is useful for when a diagnostic is printed, an earlier named */ - /* scoped can be used */ - /* typ = type of scope */ -#define PUSH_SCOPE(ths,sym,typ) \ - if (sym) DICTdefine(scope->this_->symbol_table,(sym)->name,(Generic)ths,sym,typ);\ - ths->superscope = scope->this_; \ - scope++; \ - scope->type = typ; \ - scope->pscope = (sym?scope:(scope-1)->pscope); \ - scope->this_ = ths; \ - if (sym) { \ - ths->symbol = *(sym); \ - } -#define POP_SCOPE() scope-- +#include +#include +#include +#include - /* PUSH_SCOPE_DUMMY just pushes the scope stack with nothing actually on it */ - /* Necessary for situations when a POP_SCOPE is unnecessary but inevitable */ -#define PUSH_SCOPE_DUMMY() scope++ +#include "bstrlib.h" +#include "lexsupport.h" - /* normally the superscope is added by PUSH_SCOPE, but some things (types) */ - /* bother to get pushed so fix them this way */ -#define SCOPEadd_super(ths) ths->superscope = scope->this_; +Linked_List PARSEnew_schemas; -#define ERROR(code) ERRORreport(code, yylineno) +#line 41 "expparse.c" +/**************** End of %include directives **********************************/ +/* These constants specify the various numeric values for terminal symbols +** in a format understandable to "makeheaders". This section is blank unless +** "lemon" is run with the "-m" command-line option. +***************** Begin makeheaders token definitions *************************/ +/**************** End makeheaders token definitions ***************************/ -void parserInitState() -{ - scope = scopes; - /* no need to define scope->this */ - scope->this_ = yyexpresult; - scope->pscope = scope; - scope->type = OBJ_EXPRESS; - yyexpresult->symbol.name = yyexpresult->u.express->filename; - yyexpresult->symbol.filename = yyexpresult->u.express->filename; - yyexpresult->symbol.line = 1; -} -#line 127 "expparse.c" -/* Next is all token values, in a form suitable for use by makeheaders. -** This section will be null unless lemon is run with the -m switch. -*/ -/* -** These constants (all generated automatically by the parser generator) -** specify the various kinds of tokens (terminals) that the parser -** understands. -** -** Each symbol here is a terminal symbol in the grammar. -*/ -/* Make sure the INTERFACE macro is defined. -*/ -#ifndef INTERFACE -# define INTERFACE 1 -#endif -/* The next thing included is series of defines which control +/* The next sections is a series of control #defines. ** various aspects of the generated parser. -** YYCODETYPE is the data type used for storing terminal -** and nonterminal numbers. "unsigned char" is -** used if there are fewer than 250 terminals -** and nonterminals. "int" is used otherwise. -** YYNOCODE is a number of type YYCODETYPE which corresponds -** to no legal terminal or nonterminal number. This -** number is used to fill in empty slots of the hash -** table. +** YYCODETYPE is the data type used to store the integer codes +** that represent terminal and non-terminal symbols. +** "unsigned char" is used if there are fewer than +** 256 symbols. Larger types otherwise. +** YYNOCODE is a number of type YYCODETYPE that is not used for +** any terminal or nonterminal symbol. ** YYFALLBACK If defined, this indicates that one or more tokens -** have fall-back values which should be used if the -** original value of the token will not parse. -** YYACTIONTYPE is the data type used for storing terminal -** and nonterminal numbers. "unsigned char" is -** used if there are fewer than 250 rules and -** states combined. "int" is used otherwise. -** ParseTOKENTYPE is the data type used for minor tokens given -** directly to the parser from the tokenizer. -** YYMINORTYPE is the data type used for all minor tokens. +** (also known as: "terminal symbols") have fall-back +** values which should be used if the original symbol +** would not parse. This permits keywords to sometimes +** be used as identifiers, for example. +** YYACTIONTYPE is the data type used for "action codes" - numbers +** that indicate what to do in response to the next +** token. +** yyparseTOKENTYPE is the data type used for minor type for terminal +** symbols. Background: A "minor type" is a semantic +** value associated with a terminal or non-terminal +** symbols. For example, for an "ID" terminal symbol, +** the minor type might be the name of the identifier. +** Each non-terminal can have a different minor type. +** Terminal symbols all have the same minor type, though. +** This macros defines the minor type for terminal +** symbols. +** YYMINORTYPE is the data type used for all minor types. ** This is typically a union of many types, one of -** which is ParseTOKENTYPE. The entry in the union -** for base tokens is called "yy0". +** which is yyparseTOKENTYPE. The entry in the union +** for terminal symbols is called "yy0". ** YYSTACKDEPTH is the maximum depth of the parser's stack. If ** zero the stack is dynamically sized using realloc() -** ParseARG_SDECL A static variable declaration for the %extra_argument -** ParseARG_PDECL A parameter declaration for the %extra_argument -** ParseARG_STORE Code to store %extra_argument into yypParser -** ParseARG_FETCH Code to extract %extra_argument from yypParser -** YYNSTATE the combined number of states. -** YYNRULE the number of rules in the grammar +** yyparseARG_SDECL A static variable declaration for the %extra_argument +** yyparseARG_PDECL A parameter declaration for the %extra_argument +** yyparseARG_STORE Code to store %extra_argument into yypParser +** yyparseARG_FETCH Code to extract %extra_argument from yypParser ** YYERRORSYMBOL is the code number of the error symbol. If not ** defined, then do no error processing. +** YYNSTATE the combined number of states. +** YYNRULE the number of rules in the grammar +** YYNTOKEN Number of terminal symbols +** YY_MAX_SHIFT Maximum value for shift actions +** YY_MIN_SHIFTREDUCE Minimum value for shift-reduce actions +** YY_MAX_SHIFTREDUCE Maximum value for shift-reduce actions +** YY_ERROR_ACTION The yy_action[] code for syntax error +** YY_ACCEPT_ACTION The yy_action[] code for accept +** YY_NO_ACTION The yy_action[] code for no-op +** YY_MIN_REDUCE Minimum value for reduce actions +** YY_MAX_REDUCE Maximum value for reduce actions */ +#ifndef INTERFACE +# define INTERFACE 1 +#endif +/************* Begin control #defines *****************************************/ #define YYCODETYPE unsigned short int -#define YYNOCODE 280 +#define YYNOCODE 393 #define YYACTIONTYPE unsigned short int -#define ParseTOKENTYPE YYSTYPE +#define yyparseTOKENTYPE struct YYSTYPE * typedef union { int yyinit; - ParseTOKENTYPE yy0; - struct qualifier yy46; - Variable yy91; - Op_Code yy126; - struct entity_body yy176; - Where yy234; - struct subsuper_decl yy242; - struct type_flags yy252; - struct upper_lower yy253; - Symbol* yy275; - Type yy297; - Case_Item yy321; - Statement yy332; - Linked_List yy371; - struct type_either yy378; - struct subtypes yy385; - Expression yy401; - TypeBody yy477; - Integer yy507; + yyparseTOKENTYPE yy0; + Linked_List yy583; + Expression yy593; + Case_Item yy707; } YYMINORTYPE; #ifndef YYSTACKDEPTH #define YYSTACKDEPTH 0 #endif -#define ParseARG_SDECL parse_data_t parseData ; -#define ParseARG_PDECL , parse_data_t parseData -#define ParseARG_FETCH parse_data_t parseData = yypParser->parseData -#define ParseARG_STORE yypParser->parseData = parseData -#define YYNSTATE 645 -#define YYNRULE 332 -#define YY_NO_ACTION (YYNSTATE+YYNRULE+2) -#define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1) -#define YY_ERROR_ACTION (YYNSTATE+YYNRULE) - -/* The yyzerominor constant is used to initialize instances of -** YYMINORTYPE objects to zero. */ -static const YYMINORTYPE yyzerominor = { 0 }; +#define yyparseARG_SDECL struct YYSTATE *pState ; +#define yyparseARG_PDECL , struct YYSTATE *pState +#define yyparseARG_FETCH struct YYSTATE *pState = yypParser->pState +#define yyparseARG_STORE yypParser->pState = pState +#define YYNSTATE 849 +#define YYNRULE 476 +#define YYNTOKEN 173 +#define YY_MAX_SHIFT 848 +#define YY_MIN_SHIFTREDUCE 849 +#define YY_MAX_SHIFTREDUCE 1324 +#define YY_ERROR_ACTION 1325 +#define YY_ACCEPT_ACTION 1326 +#define YY_NO_ACTION 1327 +#define YY_MIN_REDUCE 1328 +#define YY_MAX_REDUCE 1803 +/************* End control #defines *******************************************/ /* Define the yytestcase() macro to be a no-op if is not already defined ** otherwise. @@ -237,33 +150,35 @@ static const YYMINORTYPE yyzerominor = { 0 }; ** Suppose the action integer is N. Then the action is determined as ** follows ** -** 0 <= N < YYNSTATE Shift N. That is, push the lookahead +** 0 <= N <= YY_MAX_SHIFT Shift N. That is, push the lookahead ** token onto the stack and goto state N. ** -** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE. +** N between YY_MIN_SHIFTREDUCE Shift to an arbitrary state then +** and YY_MAX_SHIFTREDUCE reduce by rule N-YY_MIN_SHIFTREDUCE. ** -** N == YYNSTATE+YYNRULE A syntax error has occurred. +** N == YY_ERROR_ACTION A syntax error has occurred. ** -** N == YYNSTATE+YYNRULE+1 The parser accepts its input. +** N == YY_ACCEPT_ACTION The parser accepts its input. ** -** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused +** N == YY_NO_ACTION No such action. Denotes unused ** slots in the yy_action[] table. ** +** N between YY_MIN_REDUCE Reduce by rule N-YY_MIN_REDUCE +** and YY_MAX_REDUCE +** ** The action table is constructed as a single large table named yy_action[]. -** Given state S and lookahead X, the action is computed as +** Given state S and lookahead X, the action is computed as either: ** -** yy_action[ yy_shift_ofst[S] + X ] +** (A) N = yy_action[ yy_shift_ofst[S] + X ] +** (B) N = yy_default[S] ** -** If the index value yy_shift_ofst[S]+X is out of range or if the value -** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S] -** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table -** and that yy_default[S] should be used instead. +** The (A) formula is preferred. The B formula is used instead if +** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X. ** -** The formula above is for computing the action when the lookahead is +** The formulas above are for computing the action when the lookahead is ** a terminal symbol. If the lookahead is a non-terminal (as occurs after ** a reduce action) then the yy_reduce_ofst[] array is used in place of -** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of -** YY_SHIFT_USE_DFLT. +** the yy_shift_ofst[] array. ** ** The following are the tables generated in this section: ** @@ -275,693 +190,6154 @@ static const YYMINORTYPE yyzerominor = { 0 }; ** yy_reduce_ofst[] For each state, the offset into yy_action for ** shifting non-terminals after a reduce. ** yy_default[] Default action for each state. -*/ -#define YY_ACTTAB_COUNT (2659) +** +*********** Begin parsing tables **********************************************/ +#define YY_ACTTAB_COUNT (29641) static const YYACTIONTYPE yy_action[] = { - /* 0 */ 77, 78, 614, 67, 68, 45, 380, 71, 69, 70, - /* 10 */ 72, 248, 79, 74, 73, 16, 42, 583, 396, 395, - /* 20 */ 75, 483, 482, 388, 368, 599, 57, 56, 450, 602, - /* 30 */ 268, 597, 60, 35, 596, 379, 594, 598, 66, 89, - /* 40 */ 593, 44, 153, 158, 559, 619, 618, 113, 112, 569, - /* 50 */ 77, 78, 203, 550, 612, 168, 523, 249, 110, 613, - /* 60 */ 306, 15, 79, 611, 108, 16, 42, 175, 621, 606, - /* 70 */ 449, 525, 159, 388, 301, 378, 608, 607, 605, 604, - /* 80 */ 603, 405, 408, 183, 409, 179, 407, 169, 66, 387, - /* 90 */ 87, 978, 118, 403, 203, 619, 618, 113, 112, 401, - /* 100 */ 77, 78, 612, 544, 612, 60, 518, 244, 535, 613, - /* 110 */ 170, 611, 79, 611, 144, 16, 42, 549, 39, 606, - /* 120 */ 396, 395, 75, 388, 301, 82, 608, 607, 605, 604, - /* 130 */ 603, 524, 467, 454, 466, 469, 864, 465, 66, 387, - /* 140 */ 350, 468, 526, 234, 633, 619, 618, 396, 348, 75, - /* 150 */ 77, 78, 73, 132, 612, 467, 470, 466, 469, 613, - /* 160 */ 465, 311, 79, 611, 468, 16, 42, 346, 616, 606, - /* 170 */ 447, 122, 333, 388, 247, 224, 608, 607, 605, 604, - /* 180 */ 603, 467, 464, 466, 469, 550, 465, 550, 66, 387, - /* 190 */ 468, 227, 167, 113, 112, 619, 618, 113, 112, 557, - /* 200 */ 77, 78, 516, 346, 612, 467, 463, 466, 469, 613, - /* 210 */ 465, 39, 79, 611, 468, 16, 42, 359, 237, 606, - /* 220 */ 864, 122, 442, 312, 445, 615, 608, 607, 605, 604, - /* 230 */ 603, 367, 365, 361, 402, 731, 111, 545, 66, 387, - /* 240 */ 405, 209, 171, 373, 170, 619, 618, 337, 154, 549, - /* 250 */ 102, 549, 644, 251, 612, 777, 510, 334, 36, 613, - /* 260 */ 67, 68, 250, 611, 71, 69, 70, 72, 479, 606, - /* 270 */ 74, 73, 137, 144, 114, 344, 608, 607, 605, 604, - /* 280 */ 603, 589, 587, 590, 131, 585, 584, 588, 591, 387, - /* 290 */ 586, 67, 68, 514, 130, 71, 69, 70, 72, 609, - /* 300 */ 125, 74, 73, 777, 115, 154, 222, 620, 510, 23, - /* 310 */ 114, 473, 386, 510, 402, 496, 495, 494, 493, 492, - /* 320 */ 491, 490, 489, 488, 487, 2, 302, 512, 569, 322, - /* 330 */ 129, 318, 165, 373, 163, 623, 245, 243, 576, 575, - /* 340 */ 242, 240, 543, 527, 315, 451, 223, 29, 154, 215, - /* 350 */ 356, 236, 625, 19, 26, 626, 510, 3, 627, 632, - /* 360 */ 631, 521, 630, 629, 642, 162, 161, 343, 218, 5, - /* 370 */ 385, 286, 496, 495, 494, 493, 492, 491, 490, 489, - /* 380 */ 488, 487, 2, 71, 69, 70, 72, 129, 43, 74, - /* 390 */ 73, 431, 154, 355, 432, 430, 525, 433, 632, 631, - /* 400 */ 510, 630, 629, 41, 428, 39, 14, 204, 12, 134, - /* 410 */ 517, 13, 84, 107, 3, 496, 495, 494, 493, 492, - /* 420 */ 491, 490, 489, 488, 487, 2, 550, 612, 642, 429, - /* 430 */ 129, 642, 542, 520, 67, 68, 611, 304, 71, 69, - /* 440 */ 70, 72, 154, 298, 74, 73, 103, 335, 521, 40, - /* 450 */ 510, 39, 581, 63, 190, 521, 216, 3, 232, 496, - /* 460 */ 495, 494, 493, 492, 491, 490, 489, 488, 487, 2, - /* 470 */ 435, 67, 68, 335, 129, 71, 69, 70, 72, 91, - /* 480 */ 335, 74, 73, 434, 90, 154, 223, 354, 421, 580, - /* 490 */ 548, 640, 316, 510, 563, 559, 362, 641, 639, 638, - /* 500 */ 39, 3, 637, 636, 635, 634, 117, 229, 238, 496, - /* 510 */ 495, 494, 493, 492, 491, 490, 489, 488, 487, 2, - /* 520 */ 522, 121, 85, 521, 129, 185, 378, 519, 186, 154, - /* 530 */ 352, 401, 39, 309, 569, 331, 503, 510, 246, 164, - /* 540 */ 174, 623, 245, 243, 576, 575, 242, 240, 10, 349, - /* 550 */ 562, 3, 496, 495, 494, 493, 492, 491, 490, 489, - /* 560 */ 488, 487, 2, 330, 308, 551, 556, 129, 39, 628, - /* 570 */ 625, 173, 172, 626, 486, 100, 627, 632, 631, 154, - /* 580 */ 630, 629, 413, 362, 39, 182, 39, 510, 551, 425, - /* 590 */ 362, 202, 310, 98, 3, 520, 496, 495, 494, 493, - /* 600 */ 492, 491, 490, 489, 488, 487, 2, 135, 76, 377, - /* 610 */ 329, 129, 467, 462, 466, 469, 299, 465, 415, 297, - /* 620 */ 199, 468, 154, 376, 485, 375, 21, 558, 624, 625, - /* 630 */ 510, 560, 626, 529, 374, 627, 632, 631, 3, 630, - /* 640 */ 629, 120, 24, 126, 369, 140, 496, 495, 494, 493, - /* 650 */ 492, 491, 490, 489, 488, 487, 2, 529, 362, 14, - /* 660 */ 204, 129, 228, 353, 13, 378, 327, 351, 231, 53, - /* 670 */ 51, 54, 47, 49, 48, 52, 55, 46, 50, 14, - /* 680 */ 204, 57, 56, 230, 13, 402, 332, 60, 3, 496, - /* 690 */ 495, 494, 493, 492, 491, 490, 489, 488, 487, 2, - /* 700 */ 467, 461, 466, 469, 129, 465, 14, 204, 225, 468, - /* 710 */ 642, 13, 366, 188, 642, 315, 363, 444, 617, 364, - /* 720 */ 53, 51, 54, 47, 49, 48, 52, 55, 46, 50, - /* 730 */ 109, 3, 57, 56, 104, 360, 541, 106, 60, 515, - /* 740 */ 357, 221, 9, 20, 478, 477, 476, 601, 370, 27, - /* 750 */ 116, 220, 217, 212, 32, 637, 636, 635, 634, 117, - /* 760 */ 207, 18, 9, 20, 478, 477, 476, 347, 866, 206, - /* 770 */ 80, 25, 205, 342, 97, 637, 636, 635, 634, 117, - /* 780 */ 460, 201, 95, 160, 92, 336, 93, 198, 331, 9, - /* 790 */ 20, 478, 477, 476, 453, 197, 193, 192, 136, 426, - /* 800 */ 324, 187, 637, 636, 635, 634, 117, 189, 331, 323, - /* 810 */ 53, 51, 54, 47, 49, 48, 52, 55, 46, 50, - /* 820 */ 418, 321, 57, 56, 467, 459, 466, 469, 60, 465, - /* 830 */ 184, 416, 177, 468, 319, 331, 180, 176, 123, 58, - /* 840 */ 317, 53, 51, 54, 47, 49, 48, 52, 55, 46, - /* 850 */ 50, 441, 8, 57, 56, 196, 11, 643, 642, 60, - /* 860 */ 143, 53, 51, 54, 47, 49, 48, 52, 55, 46, - /* 870 */ 50, 325, 400, 57, 56, 39, 67, 68, 61, 60, - /* 880 */ 71, 69, 70, 72, 582, 622, 74, 73, 595, 21, - /* 890 */ 53, 51, 54, 47, 49, 48, 52, 55, 46, 50, - /* 900 */ 577, 574, 57, 56, 467, 458, 466, 469, 60, 465, - /* 910 */ 241, 573, 572, 468, 59, 239, 566, 578, 235, 53, - /* 920 */ 51, 54, 47, 49, 48, 52, 55, 46, 50, 37, - /* 930 */ 86, 57, 56, 119, 83, 569, 561, 60, 467, 457, - /* 940 */ 466, 469, 600, 465, 233, 141, 540, 468, 38, 105, - /* 950 */ 53, 51, 54, 47, 49, 48, 52, 55, 46, 50, - /* 960 */ 81, 533, 57, 56, 530, 115, 536, 539, 60, 359, - /* 970 */ 467, 456, 466, 469, 538, 465, 445, 537, 571, 468, - /* 980 */ 53, 51, 54, 47, 49, 48, 52, 55, 46, 50, - /* 990 */ 384, 599, 57, 56, 532, 602, 278, 597, 60, 253, - /* 1000 */ 596, 367, 594, 598, 531, 251, 593, 44, 153, 158, - /* 1010 */ 28, 528, 142, 254, 53, 51, 54, 47, 49, 48, - /* 1020 */ 52, 55, 46, 50, 137, 513, 57, 56, 508, 507, - /* 1030 */ 214, 506, 60, 27, 53, 51, 54, 47, 49, 48, - /* 1040 */ 52, 55, 46, 50, 505, 504, 57, 56, 4, 213, - /* 1050 */ 500, 498, 60, 497, 53, 51, 54, 47, 49, 48, - /* 1060 */ 52, 55, 46, 50, 208, 1, 57, 56, 484, 14, - /* 1070 */ 204, 480, 60, 244, 13, 467, 455, 466, 469, 472, - /* 1080 */ 465, 211, 446, 139, 468, 303, 452, 448, 99, 6, - /* 1090 */ 96, 53, 51, 54, 47, 49, 48, 52, 55, 46, - /* 1100 */ 50, 438, 195, 57, 56, 443, 252, 440, 194, 60, - /* 1110 */ 124, 439, 437, 436, 31, 191, 53, 51, 54, 47, - /* 1120 */ 49, 48, 52, 55, 46, 50, 599, 300, 57, 56, - /* 1130 */ 602, 427, 597, 326, 60, 596, 424, 594, 598, 17, - /* 1140 */ 423, 593, 44, 154, 157, 422, 420, 419, 417, 133, - /* 1150 */ 181, 510, 475, 20, 478, 477, 476, 414, 320, 412, - /* 1160 */ 411, 410, 406, 30, 154, 637, 636, 635, 634, 117, - /* 1170 */ 599, 178, 510, 521, 602, 151, 597, 88, 399, 596, - /* 1180 */ 404, 594, 598, 285, 547, 593, 44, 153, 158, 382, - /* 1190 */ 381, 546, 372, 371, 467, 200, 466, 469, 331, 465, - /* 1200 */ 534, 642, 338, 468, 499, 101, 22, 339, 244, 94, - /* 1210 */ 496, 495, 494, 493, 492, 491, 490, 489, 488, 487, - /* 1220 */ 509, 467, 127, 466, 469, 129, 465, 340, 341, 138, - /* 1230 */ 468, 496, 495, 494, 493, 492, 491, 490, 489, 488, - /* 1240 */ 487, 481, 62, 383, 599, 520, 129, 610, 602, 278, - /* 1250 */ 597, 592, 244, 596, 512, 594, 598, 501, 471, 593, - /* 1260 */ 44, 153, 158, 555, 53, 51, 54, 47, 49, 48, - /* 1270 */ 52, 55, 46, 50, 553, 314, 57, 56, 554, 599, - /* 1280 */ 65, 511, 60, 602, 151, 597, 474, 64, 596, 328, - /* 1290 */ 594, 598, 979, 979, 593, 44, 153, 158, 599, 305, - /* 1300 */ 358, 521, 602, 276, 597, 979, 979, 596, 362, 594, - /* 1310 */ 598, 307, 979, 593, 44, 153, 158, 34, 979, 7, - /* 1320 */ 979, 979, 979, 979, 979, 979, 244, 979, 979, 219, - /* 1330 */ 612, 979, 979, 979, 570, 625, 979, 313, 626, 611, - /* 1340 */ 33, 627, 632, 631, 569, 630, 629, 979, 246, 979, - /* 1350 */ 174, 623, 245, 243, 576, 575, 242, 240, 979, 979, - /* 1360 */ 979, 244, 979, 979, 502, 979, 979, 979, 128, 979, - /* 1370 */ 166, 979, 979, 520, 979, 979, 642, 210, 979, 979, - /* 1380 */ 244, 173, 172, 552, 599, 979, 979, 979, 602, 261, - /* 1390 */ 597, 979, 979, 596, 979, 594, 598, 979, 979, 593, - /* 1400 */ 44, 153, 158, 599, 979, 979, 521, 602, 579, 597, - /* 1410 */ 979, 979, 596, 979, 594, 598, 284, 979, 593, 44, - /* 1420 */ 153, 158, 599, 979, 979, 979, 602, 266, 597, 979, - /* 1430 */ 979, 596, 979, 594, 598, 979, 362, 593, 44, 153, - /* 1440 */ 158, 599, 979, 979, 979, 602, 265, 597, 979, 979, - /* 1450 */ 596, 979, 594, 598, 979, 979, 593, 44, 153, 158, - /* 1460 */ 979, 979, 979, 979, 979, 599, 244, 979, 979, 602, - /* 1470 */ 398, 597, 979, 979, 596, 979, 594, 598, 520, 979, - /* 1480 */ 593, 44, 153, 158, 599, 244, 979, 979, 602, 397, - /* 1490 */ 597, 979, 979, 596, 979, 594, 598, 979, 979, 593, - /* 1500 */ 44, 153, 158, 979, 244, 979, 979, 979, 979, 599, - /* 1510 */ 979, 979, 979, 602, 296, 597, 979, 979, 596, 979, - /* 1520 */ 594, 598, 979, 244, 593, 44, 153, 158, 599, 979, - /* 1530 */ 979, 979, 602, 295, 597, 979, 979, 596, 979, 594, - /* 1540 */ 598, 362, 979, 593, 44, 153, 158, 244, 979, 979, - /* 1550 */ 979, 979, 979, 979, 979, 979, 599, 979, 979, 979, - /* 1560 */ 602, 294, 597, 979, 979, 596, 244, 594, 598, 979, - /* 1570 */ 979, 593, 44, 153, 158, 979, 979, 979, 599, 979, - /* 1580 */ 979, 979, 602, 293, 597, 979, 979, 596, 979, 594, - /* 1590 */ 598, 244, 979, 593, 44, 153, 158, 599, 979, 979, - /* 1600 */ 979, 602, 292, 597, 979, 979, 596, 979, 594, 598, - /* 1610 */ 244, 979, 593, 44, 153, 158, 599, 979, 979, 979, - /* 1620 */ 602, 291, 597, 979, 979, 596, 979, 594, 598, 979, - /* 1630 */ 979, 593, 44, 153, 158, 979, 979, 599, 244, 979, - /* 1640 */ 979, 602, 290, 597, 979, 979, 596, 979, 594, 598, - /* 1650 */ 979, 979, 593, 44, 153, 158, 979, 979, 979, 979, - /* 1660 */ 244, 979, 979, 979, 979, 599, 979, 979, 979, 602, - /* 1670 */ 289, 597, 979, 979, 596, 979, 594, 598, 979, 244, - /* 1680 */ 593, 44, 153, 158, 599, 979, 979, 979, 602, 288, - /* 1690 */ 597, 979, 979, 596, 979, 594, 598, 979, 244, 593, - /* 1700 */ 44, 153, 158, 979, 979, 979, 599, 979, 979, 979, - /* 1710 */ 602, 287, 597, 979, 979, 596, 979, 594, 598, 244, - /* 1720 */ 979, 593, 44, 153, 158, 599, 979, 979, 979, 602, - /* 1730 */ 277, 597, 979, 979, 596, 979, 594, 598, 979, 979, - /* 1740 */ 593, 44, 153, 158, 599, 979, 979, 244, 602, 264, - /* 1750 */ 597, 979, 979, 596, 979, 594, 598, 979, 979, 593, - /* 1760 */ 44, 153, 158, 979, 979, 599, 244, 979, 979, 602, - /* 1770 */ 263, 597, 979, 979, 596, 979, 594, 598, 979, 979, - /* 1780 */ 593, 44, 153, 158, 979, 979, 979, 979, 244, 979, - /* 1790 */ 979, 979, 979, 599, 979, 979, 979, 602, 262, 597, - /* 1800 */ 979, 979, 596, 979, 594, 598, 979, 244, 593, 44, - /* 1810 */ 153, 158, 599, 979, 979, 979, 602, 275, 597, 979, - /* 1820 */ 979, 596, 979, 594, 598, 979, 244, 593, 44, 153, - /* 1830 */ 158, 979, 979, 979, 599, 979, 979, 979, 602, 274, - /* 1840 */ 597, 979, 979, 596, 979, 594, 598, 244, 979, 593, - /* 1850 */ 44, 153, 158, 599, 979, 979, 979, 602, 260, 597, - /* 1860 */ 979, 979, 596, 979, 594, 598, 979, 979, 593, 44, - /* 1870 */ 153, 158, 599, 979, 979, 244, 602, 259, 597, 979, - /* 1880 */ 979, 596, 979, 594, 598, 979, 979, 593, 44, 153, - /* 1890 */ 158, 979, 979, 599, 244, 979, 979, 602, 273, 597, - /* 1900 */ 979, 979, 596, 979, 594, 598, 979, 979, 593, 44, - /* 1910 */ 153, 158, 979, 979, 979, 979, 244, 979, 979, 979, - /* 1920 */ 979, 599, 979, 979, 979, 602, 150, 597, 979, 979, - /* 1930 */ 596, 979, 594, 598, 979, 244, 593, 44, 153, 158, - /* 1940 */ 599, 979, 979, 979, 602, 149, 597, 979, 979, 596, - /* 1950 */ 979, 594, 598, 979, 244, 593, 44, 153, 158, 979, - /* 1960 */ 979, 979, 599, 979, 979, 979, 602, 258, 597, 979, - /* 1970 */ 979, 596, 979, 594, 598, 244, 979, 593, 44, 153, - /* 1980 */ 158, 599, 979, 979, 979, 602, 257, 597, 979, 979, - /* 1990 */ 596, 979, 594, 598, 979, 979, 593, 44, 153, 158, - /* 2000 */ 599, 979, 979, 244, 602, 256, 597, 979, 979, 596, - /* 2010 */ 979, 594, 598, 979, 979, 593, 44, 153, 158, 979, - /* 2020 */ 979, 599, 244, 979, 979, 602, 148, 597, 979, 979, - /* 2030 */ 596, 979, 594, 598, 979, 979, 593, 44, 153, 158, - /* 2040 */ 979, 979, 979, 979, 244, 979, 979, 979, 979, 599, - /* 2050 */ 979, 979, 979, 602, 272, 597, 979, 979, 596, 979, - /* 2060 */ 594, 598, 979, 244, 593, 44, 153, 158, 599, 979, - /* 2070 */ 979, 979, 602, 255, 597, 979, 979, 596, 979, 594, - /* 2080 */ 598, 979, 244, 593, 44, 153, 158, 979, 979, 979, - /* 2090 */ 599, 979, 979, 979, 602, 271, 597, 979, 979, 596, - /* 2100 */ 979, 594, 598, 244, 979, 593, 44, 153, 158, 599, - /* 2110 */ 979, 979, 979, 602, 270, 597, 979, 979, 596, 979, - /* 2120 */ 594, 598, 979, 979, 593, 44, 153, 158, 599, 979, - /* 2130 */ 979, 244, 602, 269, 597, 979, 979, 596, 979, 594, - /* 2140 */ 598, 979, 979, 593, 44, 153, 158, 979, 979, 599, - /* 2150 */ 244, 979, 979, 602, 147, 597, 979, 979, 596, 979, - /* 2160 */ 594, 598, 979, 979, 593, 44, 153, 158, 979, 979, - /* 2170 */ 979, 979, 244, 979, 979, 979, 979, 599, 305, 358, - /* 2180 */ 979, 602, 267, 597, 979, 979, 596, 979, 594, 598, - /* 2190 */ 979, 244, 593, 44, 153, 158, 34, 979, 7, 979, - /* 2200 */ 979, 979, 979, 979, 979, 979, 979, 979, 219, 612, - /* 2210 */ 244, 599, 979, 979, 979, 602, 979, 597, 611, 33, - /* 2220 */ 596, 979, 594, 598, 979, 979, 593, 44, 279, 158, - /* 2230 */ 979, 244, 979, 979, 979, 979, 979, 979, 979, 979, - /* 2240 */ 979, 979, 979, 502, 979, 979, 599, 128, 979, 166, - /* 2250 */ 602, 979, 597, 979, 979, 596, 210, 594, 598, 244, - /* 2260 */ 979, 593, 44, 394, 158, 599, 979, 979, 979, 602, - /* 2270 */ 979, 597, 979, 979, 596, 979, 594, 598, 979, 979, - /* 2280 */ 593, 44, 393, 158, 979, 979, 599, 979, 979, 979, - /* 2290 */ 602, 979, 597, 244, 979, 596, 979, 594, 598, 979, - /* 2300 */ 979, 593, 44, 392, 158, 599, 979, 979, 979, 602, - /* 2310 */ 979, 597, 979, 979, 596, 979, 594, 598, 979, 979, - /* 2320 */ 593, 44, 391, 158, 979, 979, 599, 979, 244, 979, - /* 2330 */ 602, 979, 597, 979, 979, 596, 979, 594, 598, 979, - /* 2340 */ 979, 593, 44, 390, 158, 599, 979, 244, 979, 602, - /* 2350 */ 979, 597, 979, 979, 596, 979, 594, 598, 979, 979, - /* 2360 */ 593, 44, 389, 158, 979, 979, 979, 979, 244, 979, - /* 2370 */ 979, 979, 979, 979, 599, 979, 979, 979, 602, 979, - /* 2380 */ 597, 979, 979, 596, 979, 594, 598, 244, 979, 593, - /* 2390 */ 44, 283, 158, 979, 979, 568, 625, 979, 979, 626, - /* 2400 */ 979, 979, 627, 632, 631, 599, 630, 629, 244, 602, - /* 2410 */ 979, 597, 979, 979, 596, 979, 594, 598, 979, 979, - /* 2420 */ 593, 44, 282, 158, 979, 599, 979, 244, 979, 602, - /* 2430 */ 979, 597, 979, 979, 596, 979, 594, 598, 979, 979, - /* 2440 */ 593, 44, 146, 158, 979, 979, 979, 979, 599, 979, - /* 2450 */ 979, 979, 602, 979, 597, 979, 244, 596, 979, 594, - /* 2460 */ 598, 979, 979, 593, 44, 145, 158, 979, 979, 979, - /* 2470 */ 979, 979, 979, 599, 979, 979, 979, 602, 979, 597, - /* 2480 */ 979, 979, 596, 979, 594, 598, 979, 244, 593, 44, - /* 2490 */ 152, 158, 567, 625, 979, 979, 626, 979, 979, 627, - /* 2500 */ 632, 631, 599, 630, 629, 979, 602, 244, 597, 979, - /* 2510 */ 979, 596, 979, 594, 598, 979, 979, 593, 44, 280, - /* 2520 */ 158, 979, 979, 979, 979, 979, 979, 979, 979, 979, - /* 2530 */ 244, 979, 979, 599, 979, 979, 979, 602, 979, 597, - /* 2540 */ 979, 979, 596, 979, 594, 598, 979, 979, 593, 44, - /* 2550 */ 281, 158, 979, 599, 979, 244, 979, 602, 979, 597, - /* 2560 */ 979, 979, 596, 979, 594, 598, 979, 979, 593, 44, - /* 2570 */ 599, 156, 979, 979, 602, 979, 597, 979, 979, 596, - /* 2580 */ 979, 594, 598, 979, 244, 593, 44, 979, 155, 979, - /* 2590 */ 565, 625, 979, 979, 626, 979, 979, 627, 632, 631, - /* 2600 */ 979, 630, 629, 979, 979, 979, 979, 979, 979, 979, - /* 2610 */ 979, 979, 979, 979, 979, 244, 564, 625, 979, 979, - /* 2620 */ 626, 979, 979, 627, 632, 631, 979, 630, 629, 226, - /* 2630 */ 625, 979, 979, 626, 979, 244, 627, 632, 631, 979, - /* 2640 */ 630, 629, 979, 979, 979, 979, 345, 625, 979, 979, - /* 2650 */ 626, 979, 244, 627, 632, 631, 979, 630, 629, + /* 0 */ 72, 107, 1, 544, 674, 523, 522, 521, 524, 466, + /* 10 */ 467, 525, 308, 307, 448, 1435, 1435, 523, 522, 521, + /* 20 */ 524, 78, 107, 525, 79, 107, 1435, 125, 1435, 45, + /* 30 */ 1435, 1326, 189, 676, 126, 466, 467, 1435, 1435, 1435, + /* 40 */ 1435, 1435, 1435, 1435, 1435, 1435, 848, 179, 1435, 439, + /* 50 */ 296, 678, 126, 1435, 296, 1435, 299, 468, 439, 296, + /* 60 */ 773, 110, 341, 1435, 1435, 1435, 1435, 1435, 1435, 1435, + /* 70 */ 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, + /* 80 */ 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, + /* 90 */ 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, 1435, + /* 100 */ 1435, 1435, 1767, 589, 296, 1339, 1339, 1767, 130, 298, + /* 110 */ 8, 1435, 1435, 44, 1767, 238, 237, 1608, 1435, 1608, + /* 120 */ 1435, 1435, 778, 1339, 1339, 1435, 1703, 776, 1435, 1435, + /* 130 */ 1435, 1767, 1767, 1435, 1435, 1435, 1608, 1608, 807, 1435, + /* 140 */ 1608, 29, 1435, 150, 1746, 484, 549, 448, 298, 1435, + /* 150 */ 1435, 1435, 1435, 447, 609, 607, 624, 1435, 1435, 1435, + /* 160 */ 1435, 629, 625, 241, 448, 1538, 1538, 1760, 233, 526, + /* 170 */ 1435, 555, 448, 113, 628, 769, 1538, 176, 1538, 1760, + /* 180 */ 1538, 526, 589, 296, 1328, 210, 233, 1538, 1538, 1538, + /* 190 */ 1538, 1538, 1538, 1538, 1538, 1538, 1760, 1760, 1538, 475, + /* 200 */ 473, 450, 446, 1538, 623, 1538, 488, 220, 1748, 143, + /* 210 */ 1608, 1608, 1339, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + /* 220 */ 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + /* 230 */ 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + /* 240 */ 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, 1538, + /* 250 */ 1538, 1538, 816, 622, 365, 364, 1608, 771, 419, 1608, + /* 260 */ 764, 1538, 1538, 592, 758, 423, 427, 426, 1538, 619, + /* 270 */ 1538, 1538, 466, 467, 623, 1538, 448, 1631, 1538, 1538, + /* 280 */ 1538, 442, 306, 1538, 1538, 1538, 447, 800, 723, 1538, + /* 290 */ 302, 727, 1538, 448, 1631, 1328, 1328, 619, 1462, 1538, + /* 300 */ 1538, 1538, 1538, 447, 207, 768, 1681, 1538, 1538, 1538, + /* 310 */ 1538, 447, 470, 608, 216, 1740, 1740, 714, 1462, 585, + /* 320 */ 1538, 25, 798, 622, 764, 1542, 1740, 298, 1740, 470, + /* 330 */ 1740, 782, 475, 473, 450, 446, 780, 1740, 1740, 1740, + /* 340 */ 1740, 1740, 1740, 1740, 1740, 1740, 561, 233, 1740, 475, + /* 350 */ 473, 450, 446, 1740, 301, 1740, 1801, 475, 473, 450, + /* 360 */ 446, 489, 300, 1740, 1740, 1740, 1740, 1740, 1740, 1740, + /* 370 */ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, + /* 380 */ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, + /* 390 */ 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, 1740, + /* 400 */ 1740, 1740, 141, 591, 597, 585, 452, 122, 484, 548, + /* 410 */ 1630, 1740, 1740, 618, 43, 447, 616, 767, 1740, 479, + /* 420 */ 1740, 1740, 564, 588, 623, 1740, 1759, 1630, 1740, 1740, + /* 430 */ 1740, 489, 447, 1740, 1740, 1740, 800, 807, 1759, 1740, + /* 440 */ 1484, 618, 1740, 208, 615, 1542, 619, 298, 1542, 1740, + /* 450 */ 1740, 1740, 1740, 27, 1744, 1759, 1759, 1740, 1740, 1740, + /* 460 */ 1740, 475, 473, 450, 446, 1739, 1739, 233, 550, 470, + /* 470 */ 1740, 1744, 798, 622, 343, 342, 1739, 568, 1739, 275, + /* 480 */ 1739, 449, 1744, 558, 117, 799, 614, 1739, 1739, 1739, + /* 490 */ 1739, 1739, 1739, 1739, 1739, 1739, 1637, 1637, 1739, 214, + /* 500 */ 1637, 1332, 847, 1739, 1332, 1739, 1332, 1778, 582, 588, + /* 510 */ 241, 1332, 584, 1739, 1739, 1739, 1739, 1739, 1739, 1739, + /* 520 */ 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, + /* 530 */ 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, + /* 540 */ 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, 1739, + /* 550 */ 1739, 1739, 130, 8, 589, 585, 453, 1687, 238, 237, + /* 560 */ 1364, 1739, 1739, 592, 1687, 106, 760, 1390, 1739, 112, + /* 570 */ 1739, 1739, 1778, 84, 623, 1739, 560, 1364, 1739, 1739, + /* 580 */ 1739, 489, 624, 1739, 1739, 1739, 1390, 448, 1364, 1739, + /* 590 */ 618, 1687, 1739, 615, 1637, 1332, 186, 1349, 786, 1739, + /* 600 */ 1739, 1739, 1739, 784, 1687, 1569, 1687, 1739, 1739, 1739, + /* 610 */ 1739, 1348, 233, 1348, 1687, 1738, 1738, 1687, 1803, 1375, + /* 620 */ 1739, 1348, 612, 622, 1375, 1375, 1738, 725, 1738, 210, + /* 630 */ 1738, 696, 697, 1793, 801, 614, 2, 1738, 1738, 1738, + /* 640 */ 1738, 1738, 1738, 1738, 1738, 1738, 127, 1772, 1738, 1772, + /* 650 */ 1375, 1481, 1569, 1738, 211, 1738, 184, 1772, 566, 588, + /* 660 */ 144, 1390, 706, 1738, 1738, 1738, 1738, 1738, 1738, 1738, + /* 670 */ 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, + /* 680 */ 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, + /* 690 */ 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, 1738, + /* 700 */ 1738, 1738, 156, 598, 597, 585, 1390, 1686, 128, 1390, + /* 710 */ 214, 1738, 1738, 1349, 1686, 123, 603, 1569, 1738, 1535, + /* 720 */ 1738, 1738, 188, 466, 467, 1738, 447, 1758, 1738, 1738, + /* 730 */ 1738, 489, 1572, 1738, 1738, 1738, 1535, 744, 847, 1738, + /* 740 */ 168, 1686, 1738, 1348, 1758, 1758, 1348, 1535, 177, 1738, + /* 750 */ 1738, 1738, 1738, 527, 1686, 1572, 1686, 1738, 1738, 1738, + /* 760 */ 1738, 1753, 1572, 1753, 1686, 1737, 1737, 1686, 1605, 585, + /* 770 */ 1738, 1753, 1803, 474, 450, 446, 1737, 1753, 1737, 1772, + /* 780 */ 1737, 603, 721, 1533, 602, 601, 1605, 1737, 1737, 1737, + /* 790 */ 1737, 1737, 1737, 1737, 1737, 1737, 1802, 1347, 1737, 1347, + /* 800 */ 1533, 1541, 1572, 1737, 169, 1737, 819, 1347, 565, 588, + /* 810 */ 284, 1533, 285, 1737, 1737, 1737, 1737, 1737, 1737, 1737, + /* 820 */ 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, + /* 830 */ 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, + /* 840 */ 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, 1737, + /* 850 */ 1737, 1737, 700, 701, 22, 585, 185, 1685, 791, 554, + /* 860 */ 766, 1737, 1737, 789, 1685, 1693, 619, 1572, 1737, 1689, + /* 870 */ 1737, 1737, 567, 588, 680, 1737, 15, 224, 1737, 1737, + /* 880 */ 1737, 553, 1763, 1737, 1737, 1737, 1797, 1763, 1787, 1737, + /* 890 */ 542, 1685, 1737, 1753, 1763, 113, 1753, 769, 556, 1737, + /* 900 */ 1737, 1737, 1737, 740, 1685, 296, 1685, 1737, 1737, 1737, + /* 910 */ 1737, 1763, 1763, 1375, 1685, 1736, 1736, 1685, 1375, 1375, + /* 920 */ 1737, 1541, 1766, 719, 1541, 209, 1736, 1766, 1736, 1347, + /* 930 */ 1736, 698, 1347, 1375, 1766, 702, 703, 1736, 1736, 1736, + /* 940 */ 1736, 1736, 1736, 1736, 1736, 1736, 563, 603, 1736, 795, + /* 950 */ 1802, 1766, 1766, 1736, 793, 1736, 192, 761, 583, 588, + /* 960 */ 707, 600, 1540, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + /* 970 */ 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + /* 980 */ 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + /* 990 */ 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, 1736, + /* 1000 */ 1736, 1736, 1645, 22, 296, 1645, 1797, 1684, 14, 13, + /* 1010 */ 618, 1736, 1736, 615, 1684, 632, 200, 191, 1736, 1800, + /* 1020 */ 1736, 1736, 478, 1689, 193, 1736, 228, 1751, 1736, 1736, + /* 1030 */ 1736, 610, 1765, 1736, 1736, 1736, 1800, 1765, 1796, 1736, + /* 1040 */ 1350, 1684, 1736, 770, 1765, 27, 1387, 1800, 811, 1736, + /* 1050 */ 1736, 1736, 1736, 116, 1684, 617, 1684, 1736, 1736, 1736, + /* 1060 */ 1736, 1765, 1765, 1387, 1684, 1735, 1735, 1684, 20, 1643, + /* 1070 */ 1736, 1688, 1762, 1771, 1387, 1771, 1735, 1762, 1735, 194, + /* 1080 */ 1735, 478, 1540, 1771, 1762, 1540, 1643, 1735, 1735, 1735, + /* 1090 */ 1735, 1735, 1735, 1735, 1735, 1735, 779, 1643, 1735, 231, + /* 1100 */ 1779, 1762, 1762, 1735, 195, 1735, 1473, 506, 1793, 1539, + /* 1110 */ 1783, 142, 605, 1735, 1735, 1735, 1735, 1735, 1735, 1735, + /* 1120 */ 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, + /* 1130 */ 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, + /* 1140 */ 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, 1735, + /* 1150 */ 1735, 1735, 1586, 22, 1673, 478, 1350, 1677, 1796, 1791, + /* 1160 */ 540, 1735, 1735, 545, 1677, 1779, 213, 22, 1735, 1591, + /* 1170 */ 1735, 1735, 1673, 2, 22, 1735, 65, 1791, 1735, 1735, + /* 1180 */ 1735, 507, 1761, 1735, 1735, 1735, 1591, 137, 1389, 1735, + /* 1190 */ 51, 1677, 1735, 1556, 1761, 1556, 1521, 63, 22, 1735, + /* 1200 */ 1735, 1735, 1735, 1359, 1677, 1771, 1677, 1735, 1735, 1735, + /* 1210 */ 1735, 1761, 1761, 1521, 1677, 1734, 1734, 1677, 1520, 1519, + /* 1220 */ 1735, 47, 1609, 1359, 1521, 1688, 1734, 1609, 1734, 1539, + /* 1230 */ 1734, 694, 1539, 1518, 1609, 1520, 1519, 1734, 1734, 1734, + /* 1240 */ 1734, 1734, 1734, 1734, 1734, 1734, 1520, 1519, 1734, 1586, + /* 1250 */ 1518, 1609, 1609, 1734, 765, 1734, 1431, 1591, 1389, 1431, + /* 1260 */ 1673, 1518, 742, 1734, 1734, 1734, 1734, 1734, 1734, 1734, + /* 1270 */ 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, + /* 1280 */ 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, + /* 1290 */ 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, 1734, + /* 1300 */ 1734, 1734, 1785, 1785, 594, 1672, 1591, 1676, 22, 1517, + /* 1310 */ 1516, 1734, 1734, 1432, 1676, 30, 1432, 22, 1734, 1515, + /* 1320 */ 1734, 1734, 22, 1672, 788, 1734, 1517, 1516, 1734, 1734, + /* 1330 */ 1734, 100, 1571, 1734, 1734, 1734, 1515, 1517, 1516, 1734, + /* 1340 */ 94, 1676, 1734, 797, 1523, 98, 1527, 1515, 1764, 1734, + /* 1350 */ 1734, 1734, 1734, 1790, 1676, 1571, 1676, 1734, 1734, 1734, + /* 1360 */ 1734, 1523, 1571, 1527, 1676, 1733, 1733, 1676, 1526, 1525, + /* 1370 */ 1734, 1790, 1523, 1555, 1527, 1555, 1733, 808, 1733, 1757, + /* 1380 */ 1733, 812, 1340, 679, 1340, 1526, 1525, 1733, 1733, 1733, + /* 1390 */ 1733, 1733, 1733, 1733, 1733, 1733, 1526, 1525, 1733, 1340, + /* 1400 */ 1340, 129, 1571, 1733, 1430, 1733, 12, 1430, 813, 93, + /* 1410 */ 1340, 1672, 814, 1733, 1733, 1733, 1733, 1733, 1733, 1733, + /* 1420 */ 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, + /* 1430 */ 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, + /* 1440 */ 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, 1733, + /* 1450 */ 1733, 1733, 1629, 815, 1604, 1671, 623, 1628, 124, 1340, + /* 1460 */ 726, 1733, 1733, 1496, 1764, 1531, 1496, 1571, 1733, 1629, + /* 1470 */ 1733, 1733, 1604, 1671, 1628, 1733, 421, 139, 1733, 1733, + /* 1480 */ 1733, 1781, 1531, 1733, 1733, 1733, 1756, 1780, 1340, 1733, + /* 1490 */ 633, 1781, 1733, 1531, 682, 1757, 131, 1780, 822, 1733, + /* 1500 */ 1733, 1733, 1733, 1696, 816, 622, 28, 1733, 1733, 1733, + /* 1510 */ 1733, 1781, 221, 1695, 414, 1732, 1732, 1780, 1588, 1615, + /* 1520 */ 1733, 1696, 1495, 39, 256, 1495, 1732, 825, 1732, 1505, + /* 1530 */ 1732, 1695, 1603, 441, 1670, 121, 1615, 1732, 1732, 1732, + /* 1540 */ 1732, 1732, 1732, 1732, 1732, 1732, 1505, 1615, 1732, 1603, + /* 1550 */ 1603, 1781, 1670, 1732, 40, 1732, 218, 1780, 1755, 56, + /* 1560 */ 1603, 1671, 845, 1732, 1732, 1732, 1732, 1732, 1732, 1732, + /* 1570 */ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, + /* 1580 */ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, + /* 1590 */ 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, 1732, + /* 1600 */ 1732, 1732, 1756, 70, 167, 1669, 1668, 1587, 552, 1614, + /* 1610 */ 1504, 1732, 1732, 489, 1331, 1588, 1781, 1331, 1732, 1613, + /* 1620 */ 1732, 1732, 1780, 1669, 1668, 1732, 1614, 1504, 1732, 1732, + /* 1630 */ 1732, 1568, 1563, 1732, 1732, 1732, 1613, 1614, 1603, 1732, + /* 1640 */ 1670, 1590, 1732, 1589, 1590, 704, 1589, 1613, 631, 1732, + /* 1650 */ 1732, 1732, 1732, 1476, 1568, 1563, 1743, 1732, 1732, 1732, + /* 1660 */ 1732, 1568, 1563, 138, 757, 1731, 1731, 1585, 1534, 1532, + /* 1670 */ 1732, 1476, 219, 1743, 1755, 57, 1731, 1749, 1731, 1351, + /* 1680 */ 1731, 145, 1602, 685, 1743, 1534, 1532, 1731, 1731, 1731, + /* 1690 */ 1731, 1731, 1731, 1731, 1731, 1731, 1534, 1532, 1731, 1602, + /* 1700 */ 1602, 1568, 1563, 1731, 1587, 1731, 1489, 1784, 1784, 1489, + /* 1710 */ 1602, 1669, 234, 1731, 1731, 1731, 1731, 1731, 1731, 1731, + /* 1720 */ 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, + /* 1730 */ 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, + /* 1740 */ 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, 1731, + /* 1750 */ 1731, 1731, 1782, 142, 1475, 709, 1334, 1647, 1647, 1530, + /* 1760 */ 1494, 1731, 1731, 684, 1585, 164, 1568, 1563, 1731, 1524, + /* 1770 */ 1731, 1731, 1475, 212, 1334, 1731, 1530, 1494, 1731, 1731, + /* 1780 */ 1731, 1567, 1562, 1731, 1731, 1731, 1524, 1530, 1602, 1731, + /* 1790 */ 699, 1488, 1731, 1749, 1488, 1351, 1680, 1524, 130, 1731, + /* 1800 */ 1731, 1731, 1731, 720, 1567, 1562, 745, 1731, 1731, 1731, + /* 1810 */ 1731, 1567, 1562, 5, 1680, 1730, 1730, 439, 1522, 1514, + /* 1820 */ 1731, 221, 132, 705, 24, 49, 1730, 557, 1730, 559, + /* 1830 */ 1730, 259, 1513, 1512, 134, 1522, 1514, 1730, 1730, 1730, + /* 1840 */ 1730, 1730, 1730, 1730, 1730, 1730, 1522, 1514, 1730, 1513, + /* 1850 */ 1512, 1567, 1562, 1730, 708, 1730, 54, 1646, 1646, 1644, + /* 1860 */ 1513, 1512, 1644, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + /* 1870 */ 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + /* 1880 */ 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + /* 1890 */ 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, 1730, + /* 1900 */ 1730, 1730, 1379, 710, 746, 6, 1426, 1444, 562, 1511, + /* 1910 */ 1510, 1730, 1730, 1379, 715, 717, 1567, 1562, 1730, 1509, + /* 1920 */ 1730, 1730, 24, 261, 1426, 1730, 1511, 1510, 1730, 1730, + /* 1930 */ 1730, 1566, 1561, 1730, 1730, 1730, 1509, 1511, 1510, 1730, + /* 1940 */ 1382, 1381, 1730, 1382, 1381, 716, 754, 1509, 586, 1730, + /* 1950 */ 1730, 1730, 1730, 1425, 1566, 1561, 1679, 1730, 1730, 1730, + /* 1960 */ 1730, 1566, 1561, 762, 1666, 1729, 1729, 593, 1508, 1507, + /* 1970 */ 1730, 1425, 770, 604, 1679, 1444, 1729, 599, 1729, 298, + /* 1980 */ 1729, 221, 1506, 1363, 1666, 1508, 1507, 1729, 1729, 1729, + /* 1990 */ 1729, 1729, 1729, 1729, 1729, 1729, 1508, 1507, 1729, 1506, + /* 2000 */ 1363, 1566, 1561, 1729, 1333, 1729, 783, 1333, 777, 781, + /* 2010 */ 1506, 1363, 785, 1729, 1729, 1729, 1729, 1729, 1729, 1729, + /* 2020 */ 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, + /* 2030 */ 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, + /* 2040 */ 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, 1729, + /* 2050 */ 1729, 1729, 1378, 1385, 1611, 1610, 451, 1443, 787, 1728, + /* 2060 */ 1727, 1729, 1729, 1378, 1385, 790, 1566, 1561, 1729, 1726, + /* 2070 */ 1729, 1729, 1611, 1610, 114, 1729, 1728, 1727, 1729, 1729, + /* 2080 */ 1729, 1565, 1560, 1729, 1729, 1729, 1726, 1728, 1727, 1729, + /* 2090 */ 1440, 792, 1729, 796, 624, 794, 1469, 1726, 620, 1729, + /* 2100 */ 1729, 1729, 1729, 1651, 1565, 1560, 1667, 1729, 1729, 1729, + /* 2110 */ 1729, 1565, 1560, 1663, 1469, 1675, 1675, 238, 1725, 1724, + /* 2120 */ 1729, 1651, 232, 476, 1667, 1443, 1675, 237, 1675, 627, + /* 2130 */ 1675, 1663, 1723, 1722, 303, 1725, 1724, 1675, 1675, 1675, + /* 2140 */ 1675, 1675, 1675, 1675, 1675, 1675, 1725, 1724, 1675, 1723, + /* 2150 */ 1722, 1565, 1560, 1675, 626, 1675, 630, 7, 1440, 838, + /* 2160 */ 1723, 1722, 305, 1675, 1675, 1675, 1675, 1675, 1675, 1675, + /* 2170 */ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, + /* 2180 */ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, + /* 2190 */ 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, 1675, + /* 2200 */ 1675, 1675, 1576, 297, 1650, 817, 108, 392, 390, 1642, + /* 2210 */ 1607, 1675, 1675, 1576, 22, 846, 1565, 1560, 1675, 1595, + /* 2220 */ 1675, 1675, 1650, 111, 424, 1675, 1642, 1607, 1675, 1675, + /* 2230 */ 1675, 1564, 1559, 1675, 1675, 1675, 1595, 1642, 1607, 1675, + /* 2240 */ 543, 1544, 1675, 155, 675, 1612, 1690, 1595, 546, 1675, + /* 2250 */ 1675, 1675, 1675, 1337, 1564, 1559, 1543, 1675, 1675, 1675, + /* 2260 */ 1675, 1564, 1559, 1612, 1544, 1674, 1674, 547, 1550, 1388, + /* 2270 */ 1675, 1337, 677, 1575, 422, 551, 1674, 206, 1674, 1543, + /* 2280 */ 1674, 411, 1799, 1386, 1575, 1550, 1388, 1674, 1674, 1674, + /* 2290 */ 1674, 1674, 1674, 1674, 1674, 1674, 1550, 1388, 1674, 1799, + /* 2300 */ 1386, 1564, 1559, 1674, 163, 1674, 433, 683, 1329, 686, + /* 2310 */ 1799, 1386, 434, 1674, 1674, 1674, 1674, 1674, 1674, 1674, + /* 2320 */ 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, + /* 2330 */ 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, + /* 2340 */ 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, 1674, + /* 2350 */ 1674, 1674, 1574, 688, 1705, 1353, 351, 398, 1777, 1776, + /* 2360 */ 399, 1674, 1674, 1574, 1352, 1705, 1564, 1559, 1674, 693, + /* 2370 */ 1674, 1674, 344, 1353, 24, 1674, 1775, 1335, 1674, 1674, + /* 2380 */ 1674, 215, 1352, 1674, 1674, 1674, 190, 1704, 1702, 1674, + /* 2390 */ 24, 1699, 1674, 1775, 1335, 1573, 1775, 1335, 1704, 1674, + /* 2400 */ 1674, 1674, 1674, 1549, 1775, 1335, 1573, 1674, 1674, 1674, + /* 2410 */ 1674, 1548, 1439, 1461, 1549, 1665, 1665, 1483, 1482, 1701, + /* 2420 */ 1674, 1698, 1548, 1439, 1438, 1437, 1665, 1700, 1665, 1468, + /* 2430 */ 1665, 1358, 391, 1461, 359, 1438, 1437, 1665, 1665, 1665, + /* 2440 */ 1665, 1665, 1665, 1665, 1665, 1665, 157, 1468, 1665, 420, + /* 2450 */ 42, 1358, 1697, 1665, 26, 1665, 1694, 1692, 1480, 1479, + /* 2460 */ 1474, 1472, 1448, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + /* 2470 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + /* 2480 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + /* 2490 */ 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, 1665, + /* 2500 */ 1665, 1665, 1384, 1377, 1368, 1447, 713, 440, 400, 471, + /* 2510 */ 718, 1665, 1665, 1384, 1377, 1368, 1367, 1330, 1665, 165, + /* 2520 */ 1665, 1665, 1750, 722, 444, 1665, 1366, 1367, 1665, 1665, + /* 2530 */ 1665, 415, 1365, 1665, 1665, 1665, 569, 1366, 724, 1665, + /* 2540 */ 401, 402, 1665, 1365, 242, 1691, 731, 1428, 243, 1665, + /* 2550 */ 1665, 1665, 1665, 255, 92, 257, 737, 1665, 1665, 1665, + /* 2560 */ 1665, 258, 80, 1786, 1664, 1623, 1623, 16, 17, 260, + /* 2570 */ 1665, 262, 264, 171, 265, 266, 1623, 82, 1623, 267, + /* 2580 */ 1623, 268, 140, 416, 417, 595, 55, 1623, 1623, 1623, + /* 2590 */ 1623, 1623, 1623, 1623, 1623, 1623, 590, 418, 1623, 1747, + /* 2600 */ 1754, 166, 1745, 1623, 763, 1623, 435, 606, 445, 109, + /* 2610 */ 115, 403, 436, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + /* 2620 */ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + /* 2630 */ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + /* 2640 */ 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, 1623, + /* 2650 */ 1623, 1623, 118, 772, 437, 454, 455, 222, 158, 456, + /* 2660 */ 457, 1623, 1623, 223, 159, 225, 458, 459, 1623, 160, + /* 2670 */ 1623, 1623, 226, 460, 461, 1623, 227, 161, 1623, 1623, + /* 2680 */ 1623, 462, 463, 1623, 1623, 1623, 229, 187, 230, 1623, + /* 2690 */ 162, 133, 1623, 464, 465, 269, 270, 1460, 1459, 1623, + /* 2700 */ 1623, 1623, 1623, 31, 1336, 1463, 443, 1623, 1623, 1623, + /* 2710 */ 1623, 59, 66, 32, 52, 1622, 1622, 68, 48, 425, + /* 2720 */ 1623, 71, 235, 409, 634, 101, 1622, 33, 1622, 535, + /* 2730 */ 1622, 95, 1617, 1391, 826, 21, 23, 1622, 1622, 1622, + /* 2740 */ 1622, 1622, 1622, 1622, 1622, 1622, 482, 1798, 1622, 366, + /* 2750 */ 367, 368, 370, 1622, 376, 1622, 236, 1362, 304, 38, + /* 2760 */ 1545, 239, 103, 1622, 1622, 1622, 1622, 1622, 1622, 1622, + /* 2770 */ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, + /* 2780 */ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, + /* 2790 */ 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, 1622, + /* 2800 */ 1622, 1622, 97, 1554, 387, 105, 151, 1327, 1327, 1327, + /* 2810 */ 1327, 1622, 1622, 1327, 1327, 1327, 1327, 1327, 1622, 1327, + /* 2820 */ 1622, 1622, 1327, 1327, 1327, 1622, 1327, 1327, 1622, 1622, + /* 2830 */ 1622, 1327, 1327, 1622, 1622, 1622, 1327, 1327, 1327, 1622, + /* 2840 */ 1327, 1327, 1622, 1327, 1327, 1327, 1327, 1327, 1327, 1622, + /* 2850 */ 1622, 1622, 1622, 1327, 1327, 1327, 1327, 1622, 1622, 1622, + /* 2860 */ 1622, 1327, 1327, 1327, 1327, 1621, 1621, 1327, 1327, 1327, + /* 2870 */ 1622, 1327, 1327, 1327, 1327, 1327, 1621, 1327, 1621, 1327, + /* 2880 */ 1621, 1327, 1327, 1327, 1327, 1327, 1327, 1621, 1621, 1621, + /* 2890 */ 1621, 1621, 1621, 1621, 1621, 1621, 1327, 1327, 1621, 1327, + /* 2900 */ 1327, 1327, 1327, 1621, 1327, 1621, 1327, 1327, 1327, 1327, + /* 2910 */ 1327, 1327, 1327, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + /* 2920 */ 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + /* 2930 */ 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + /* 2940 */ 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, 1621, + /* 2950 */ 1621, 1621, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 2960 */ 1327, 1621, 1621, 1327, 1327, 1327, 1327, 1327, 1621, 1327, + /* 2970 */ 1621, 1621, 1327, 1327, 1327, 1621, 1327, 1327, 1621, 1621, + /* 2980 */ 1621, 1327, 1327, 1621, 1621, 1621, 1327, 1327, 1327, 1621, + /* 2990 */ 1327, 1327, 1621, 1327, 1327, 1327, 1327, 1327, 1327, 1621, + /* 3000 */ 1621, 1621, 1621, 1327, 1327, 1327, 1327, 1621, 1621, 1621, + /* 3010 */ 1621, 1327, 1327, 1327, 1327, 1620, 1620, 1327, 1327, 1327, + /* 3020 */ 1621, 1327, 1327, 1327, 1327, 1327, 1620, 1327, 1620, 1327, + /* 3030 */ 1620, 1327, 1327, 1327, 1327, 1327, 1327, 1620, 1620, 1620, + /* 3040 */ 1620, 1620, 1620, 1620, 1620, 1620, 1327, 1327, 1620, 1327, + /* 3050 */ 1327, 1327, 1327, 1620, 1327, 1620, 1327, 1327, 1327, 1327, + /* 3060 */ 1327, 1327, 1327, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + /* 3070 */ 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + /* 3080 */ 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + /* 3090 */ 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, 1620, + /* 3100 */ 1620, 1620, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 3110 */ 1327, 1620, 1620, 1327, 1327, 1327, 1327, 1327, 1620, 1327, + /* 3120 */ 1620, 1620, 1327, 1327, 1327, 1620, 1327, 1327, 1620, 1620, + /* 3130 */ 1620, 1327, 1327, 1620, 1620, 1620, 1327, 1327, 1327, 1620, + /* 3140 */ 1327, 1327, 1620, 1327, 1327, 1327, 1327, 1327, 1327, 1620, + /* 3150 */ 1620, 1620, 1620, 1327, 1327, 1327, 1327, 1620, 1620, 1620, + /* 3160 */ 1620, 1327, 1327, 1327, 1327, 1606, 1606, 1327, 1327, 1327, + /* 3170 */ 1620, 1327, 1327, 1327, 1327, 1327, 1606, 1327, 1606, 1327, + /* 3180 */ 1606, 1327, 1327, 1327, 1327, 1327, 1327, 1606, 1606, 1606, + /* 3190 */ 1606, 1606, 1606, 1606, 1606, 1606, 1327, 1327, 1606, 1327, + /* 3200 */ 1327, 1327, 1327, 1606, 1327, 1606, 1327, 1327, 1327, 1327, + /* 3210 */ 1327, 1327, 1327, 1606, 1606, 1606, 1606, 1606, 1606, 1606, + /* 3220 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, + /* 3230 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, + /* 3240 */ 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, 1606, + /* 3250 */ 1606, 1606, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 3260 */ 1327, 1606, 1606, 1327, 1327, 1327, 1327, 1327, 1606, 1327, + /* 3270 */ 1606, 1606, 1327, 1327, 1327, 1606, 1327, 1327, 1606, 1606, + /* 3280 */ 1606, 1327, 1327, 1606, 1606, 1606, 1327, 1327, 1327, 1606, + /* 3290 */ 1327, 1327, 1606, 1327, 1327, 1327, 1327, 1327, 1327, 1606, + /* 3300 */ 1606, 1606, 1606, 1327, 1327, 1327, 1327, 1606, 1606, 1606, + /* 3310 */ 1606, 1327, 1327, 1327, 1327, 1537, 1537, 1327, 1327, 1327, + /* 3320 */ 1606, 1327, 1327, 1327, 1327, 1327, 1537, 1327, 1537, 1327, + /* 3330 */ 1537, 1327, 1327, 1327, 1327, 1327, 1327, 1537, 1537, 1537, + /* 3340 */ 1537, 1537, 1537, 1537, 1537, 1537, 1327, 1327, 1537, 1327, + /* 3350 */ 1327, 1327, 1327, 1537, 1327, 1537, 1327, 1327, 1327, 1327, + /* 3360 */ 1327, 1327, 1327, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + /* 3370 */ 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + /* 3380 */ 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + /* 3390 */ 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, 1537, + /* 3400 */ 1537, 1537, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 3410 */ 1327, 1537, 1537, 1327, 1327, 1327, 1327, 1327, 1537, 1327, + /* 3420 */ 1537, 1537, 1327, 1327, 1327, 1537, 1327, 1327, 1537, 1537, + /* 3430 */ 1537, 1327, 1327, 1537, 1537, 1537, 1327, 1327, 1327, 1537, + /* 3440 */ 1327, 1327, 1537, 1327, 1327, 1327, 1327, 1327, 1327, 1537, + /* 3450 */ 1537, 1537, 1537, 1327, 1327, 1327, 1327, 1537, 1537, 1537, + /* 3460 */ 1537, 1327, 1327, 1327, 1327, 1485, 1485, 1327, 1327, 1327, + /* 3470 */ 1537, 1327, 1327, 1327, 1327, 1327, 1485, 1327, 1485, 1327, + /* 3480 */ 1485, 1327, 1327, 1327, 1327, 1327, 1327, 1485, 1485, 1485, + /* 3490 */ 1485, 1485, 1485, 1485, 1485, 1485, 1327, 1327, 1485, 1327, + /* 3500 */ 1327, 1327, 1327, 1485, 1327, 1485, 1327, 1327, 1327, 1327, + /* 3510 */ 1327, 1327, 1327, 1485, 1485, 1485, 1485, 1485, 1485, 1485, + /* 3520 */ 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, + /* 3530 */ 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, + /* 3540 */ 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, 1485, + /* 3550 */ 1485, 1485, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 3560 */ 1327, 1485, 1485, 1327, 1327, 1327, 1327, 1327, 1485, 1327, + /* 3570 */ 1485, 1485, 1327, 1327, 1327, 1485, 1327, 1327, 1485, 1485, + /* 3580 */ 1485, 1327, 1327, 1485, 1485, 1485, 1327, 1327, 1327, 1485, + /* 3590 */ 1327, 1327, 1485, 1327, 1327, 1327, 1327, 1327, 1327, 1485, + /* 3600 */ 1485, 1485, 1485, 1327, 1327, 1327, 1327, 1485, 1485, 1485, + /* 3610 */ 1485, 1327, 1327, 1327, 1327, 1436, 1436, 1327, 1327, 1327, + /* 3620 */ 1485, 1327, 1327, 1327, 1327, 1327, 1436, 1327, 1436, 1327, + /* 3630 */ 1436, 1327, 1327, 1327, 1327, 1327, 1327, 1436, 1436, 1436, + /* 3640 */ 1436, 1436, 1436, 1436, 1436, 1436, 1327, 1327, 1436, 1327, + /* 3650 */ 1327, 1327, 1327, 1436, 1327, 1436, 1327, 1327, 1327, 1327, + /* 3660 */ 1327, 1327, 1327, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + /* 3670 */ 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + /* 3680 */ 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + /* 3690 */ 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, 1436, + /* 3700 */ 1436, 1436, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 3710 */ 1327, 1436, 1436, 1327, 1327, 1327, 1327, 1327, 1436, 1327, + /* 3720 */ 1436, 1436, 1327, 1327, 1327, 1436, 1327, 1327, 1436, 1436, + /* 3730 */ 1436, 1327, 1327, 1436, 1436, 1436, 1327, 1327, 1327, 1436, + /* 3740 */ 1327, 1327, 1436, 1327, 1327, 1327, 1327, 1327, 1327, 1436, + /* 3750 */ 1436, 1436, 1436, 1327, 1327, 1327, 1327, 1436, 1436, 1436, + /* 3760 */ 1436, 1327, 1327, 1327, 1327, 1380, 1380, 1327, 1327, 1327, + /* 3770 */ 1436, 1327, 1327, 1327, 1327, 1327, 1380, 1327, 1380, 1327, + /* 3780 */ 1380, 1327, 1327, 1327, 1327, 1327, 1327, 1380, 1380, 1380, + /* 3790 */ 1380, 1380, 1380, 1380, 1380, 1380, 1327, 1327, 1380, 1327, + /* 3800 */ 1327, 1327, 1327, 1380, 1327, 1380, 1327, 1327, 1327, 1327, + /* 3810 */ 1327, 1327, 1327, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + /* 3820 */ 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + /* 3830 */ 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + /* 3840 */ 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, 1380, + /* 3850 */ 1380, 1380, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 3860 */ 1327, 1380, 1380, 1327, 1327, 1327, 1327, 1327, 1380, 1327, + /* 3870 */ 1380, 1380, 1327, 1327, 1327, 1380, 1327, 1327, 1380, 1380, + /* 3880 */ 1380, 1327, 1327, 1380, 1380, 1380, 1327, 1327, 1327, 1380, + /* 3890 */ 1327, 1327, 1380, 1327, 1327, 1327, 1327, 1327, 1327, 1380, + /* 3900 */ 1380, 1380, 1380, 1327, 1327, 1327, 1327, 1380, 1380, 1380, + /* 3910 */ 1380, 1327, 1327, 1327, 1327, 1376, 1376, 1327, 1327, 1327, + /* 3920 */ 1380, 1327, 1327, 1327, 1327, 1327, 1376, 1327, 1376, 1327, + /* 3930 */ 1376, 1327, 1327, 1327, 1327, 1327, 1327, 1376, 1376, 1376, + /* 3940 */ 1376, 1376, 1376, 1376, 1376, 1376, 1327, 1327, 1376, 1327, + /* 3950 */ 1327, 1327, 1327, 1376, 1327, 1376, 1327, 1327, 1327, 1327, + /* 3960 */ 1327, 1327, 1327, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + /* 3970 */ 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + /* 3980 */ 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + /* 3990 */ 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, 1376, + /* 4000 */ 1376, 1376, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4010 */ 1327, 1376, 1376, 1327, 1327, 1327, 1327, 1327, 1376, 1327, + /* 4020 */ 1376, 1376, 1327, 1327, 1327, 1376, 1327, 1327, 1376, 1376, + /* 4030 */ 1376, 1327, 1327, 1376, 1376, 1376, 1327, 1327, 1327, 1376, + /* 4040 */ 1327, 1570, 1376, 1327, 1327, 1327, 1327, 1327, 1327, 1376, + /* 4050 */ 1376, 1376, 1376, 1327, 1327, 1327, 1327, 1376, 1376, 1376, + /* 4060 */ 1376, 1327, 1327, 1327, 1327, 76, 75, 1327, 1327, 1327, + /* 4070 */ 1376, 1327, 1327, 1327, 1327, 1327, 333, 1327, 4, 1327, + /* 4080 */ 37, 1327, 1490, 1327, 1490, 807, 1327, 299, 1570, 439, + /* 4090 */ 296, 343, 342, 341, 392, 298, 1327, 1327, 1327, 1327, + /* 4100 */ 1327, 1490, 1490, 1327, 1490, 1490, 1327, 1327, 1327, 1327, + /* 4110 */ 119, 1327, 1327, 357, 356, 355, 354, 340, 339, 338, + /* 4120 */ 337, 336, 335, 334, 332, 331, 330, 329, 328, 327, + /* 4130 */ 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, + /* 4140 */ 316, 315, 314, 313, 312, 1327, 1327, 1327, 1327, 1327, + /* 4150 */ 1327, 1327, 1327, 1570, 1327, 1792, 1327, 1327, 1327, 1327, + /* 4160 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4170 */ 1327, 1327, 1490, 1327, 1327, 41, 1327, 1327, 386, 382, + /* 4180 */ 381, 1327, 1327, 380, 379, 378, 1327, 1327, 1327, 1327, + /* 4190 */ 1327, 1327, 839, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4200 */ 1794, 1794, 1792, 1327, 1327, 1327, 1327, 74, 1327, 365, + /* 4210 */ 364, 1794, 1327, 1794, 624, 1794, 1465, 1792, 1327, 1327, + /* 4220 */ 1794, 1490, 1794, 1327, 1794, 1794, 1794, 1794, 1794, 1794, + /* 4230 */ 1794, 1327, 1327, 1327, 1327, 1327, 1327, 1456, 1327, 1465, + /* 4240 */ 1327, 1327, 1327, 1327, 233, 1327, 1465, 1327, 1794, 1794, + /* 4250 */ 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, + /* 4260 */ 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, + /* 4270 */ 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, 1794, + /* 4280 */ 623, 1327, 1327, 120, 1456, 1465, 1465, 1327, 1327, 1327, + /* 4290 */ 1794, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4300 */ 1327, 1327, 1327, 1327, 1327, 1327, 1456, 1327, 1465, 1327, + /* 4310 */ 1794, 1327, 1327, 1794, 1794, 1794, 1327, 1327, 1794, 1794, + /* 4320 */ 1794, 1327, 1327, 1327, 1327, 1327, 1327, 1794, 611, 622, + /* 4330 */ 1327, 1327, 1327, 1327, 1327, 1795, 1795, 1794, 1327, 1327, + /* 4340 */ 1327, 1327, 1794, 1327, 1794, 1794, 1795, 1327, 1795, 1456, + /* 4350 */ 1795, 1465, 1794, 1327, 1327, 1795, 1327, 1795, 180, 1795, + /* 4360 */ 1795, 1795, 1795, 1795, 1795, 1795, 1327, 438, 1327, 1327, + /* 4370 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 613, 1327, 1327, + /* 4380 */ 1327, 1327, 1327, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + /* 4390 */ 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + /* 4400 */ 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, 1795, + /* 4410 */ 1795, 1795, 1795, 1795, 1795, 1327, 1327, 1327, 1327, 1327, + /* 4420 */ 1327, 1471, 1327, 1327, 1327, 1795, 1327, 1327, 1327, 1327, + /* 4430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 489, 1327, 1327, + /* 4440 */ 1327, 1327, 1327, 1327, 1471, 1795, 1327, 1327, 1795, 1795, + /* 4450 */ 1795, 1471, 1327, 1795, 1795, 1795, 1327, 1327, 1327, 1327, + /* 4460 */ 1327, 1327, 1795, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4470 */ 76, 75, 1795, 1327, 1327, 1327, 1327, 1795, 1327, 1795, + /* 4480 */ 1795, 333, 1327, 4, 1327, 37, 1327, 1795, 1327, 1327, + /* 4490 */ 1471, 1471, 299, 1327, 439, 296, 343, 342, 341, 392, + /* 4500 */ 298, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4510 */ 1327, 1327, 1327, 1471, 1327, 1327, 1327, 1327, 357, 356, + /* 4520 */ 355, 354, 340, 339, 338, 337, 336, 335, 334, 332, + /* 4530 */ 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, + /* 4540 */ 321, 320, 319, 318, 317, 316, 315, 314, 313, 312, + /* 4550 */ 1327, 1327, 734, 1327, 1429, 1327, 1471, 1327, 1327, 1327, + /* 4560 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4570 */ 1327, 1327, 1327, 432, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4580 */ 41, 1327, 1327, 386, 382, 381, 1327, 1327, 380, 379, + /* 4590 */ 378, 1327, 1327, 1327, 1327, 1327, 1327, 839, 1327, 1327, + /* 4600 */ 1327, 1327, 1327, 1327, 1327, 1434, 1434, 408, 407, 406, + /* 4610 */ 405, 404, 74, 1327, 365, 364, 1434, 1327, 1434, 1327, + /* 4620 */ 1434, 1327, 1327, 1327, 1327, 152, 1327, 1434, 1327, 1434, + /* 4630 */ 1434, 1434, 1434, 1434, 1434, 1434, 1327, 1327, 1327, 148, + /* 4640 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4650 */ 1327, 1327, 1327, 1434, 1434, 1434, 1434, 1434, 1434, 1434, + /* 4660 */ 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, + /* 4670 */ 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, 1434, + /* 4680 */ 1434, 1434, 1434, 1434, 1434, 1327, 1327, 1434, 1327, 1434, + /* 4690 */ 147, 1327, 1327, 170, 1327, 1327, 1327, 1442, 1327, 1327, + /* 4700 */ 1327, 1327, 1327, 1327, 1442, 1327, 431, 146, 1327, 1327, + /* 4710 */ 1327, 1327, 430, 1327, 1327, 1434, 1327, 1327, 1434, 1434, + /* 4720 */ 1434, 1327, 1327, 1434, 1434, 1434, 153, 1327, 1327, 1327, + /* 4730 */ 1327, 1442, 1434, 73, 1327, 1327, 1327, 1327, 818, 1327, + /* 4740 */ 1433, 1433, 1327, 1327, 1442, 1327, 1442, 1434, 1327, 1434, + /* 4750 */ 1434, 1433, 1327, 1433, 1442, 1433, 1487, 1442, 1327, 1327, + /* 4760 */ 681, 1327, 1433, 1327, 1433, 1433, 1433, 1433, 1433, 1433, + /* 4770 */ 1433, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1487, + /* 4780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1487, 1327, 1433, 1433, + /* 4790 */ 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, + /* 4800 */ 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, + /* 4810 */ 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, 1433, + /* 4820 */ 1327, 1327, 1433, 1327, 1433, 1487, 1487, 1327, 1327, 1327, + /* 4830 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4840 */ 1327, 175, 1327, 410, 1327, 1327, 1327, 1327, 1487, 1327, + /* 4850 */ 1433, 1327, 1327, 1433, 1433, 1433, 1327, 1327, 1433, 1433, + /* 4860 */ 1433, 1327, 1327, 1327, 1327, 1327, 1327, 1433, 1327, 1327, + /* 4870 */ 1327, 1327, 1327, 1327, 1327, 1427, 1427, 408, 407, 406, + /* 4880 */ 405, 404, 1433, 1327, 1433, 1433, 1427, 1327, 1427, 1327, + /* 4890 */ 1427, 1487, 1327, 1327, 1327, 152, 1327, 1427, 1327, 1427, + /* 4900 */ 1427, 1427, 1427, 1427, 1427, 1427, 1327, 1327, 1327, 148, + /* 4910 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4920 */ 1327, 1327, 1327, 1427, 1427, 1427, 1427, 1427, 1427, 1427, + /* 4930 */ 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, + /* 4940 */ 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, 1427, + /* 4950 */ 1427, 1427, 1427, 1427, 1427, 1327, 1327, 1427, 1327, 1427, + /* 4960 */ 147, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4970 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 4980 */ 1327, 1327, 1327, 1327, 1327, 1427, 1327, 1327, 1427, 1427, + /* 4990 */ 1427, 1327, 1327, 1427, 1427, 1427, 153, 1327, 1327, 1327, + /* 5000 */ 1327, 1327, 1427, 73, 1327, 1327, 1327, 1327, 1327, 1327, + /* 5010 */ 76, 75, 1327, 1327, 1327, 1327, 1327, 1427, 1327, 1427, + /* 5020 */ 1427, 333, 1327, 4, 1327, 37, 1486, 1327, 1327, 1327, + /* 5030 */ 807, 1327, 299, 1327, 439, 296, 343, 342, 341, 392, + /* 5040 */ 298, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1486, + /* 5050 */ 1327, 1327, 1327, 1327, 1327, 1327, 1486, 1327, 357, 356, + /* 5060 */ 355, 354, 340, 339, 338, 337, 336, 335, 334, 332, + /* 5070 */ 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, + /* 5080 */ 321, 320, 319, 318, 317, 316, 315, 314, 313, 312, + /* 5090 */ 1327, 1327, 624, 1327, 1327, 1486, 1486, 1327, 1327, 1327, + /* 5100 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 5110 */ 1327, 1327, 1327, 1327, 1327, 1455, 1327, 1327, 1486, 1327, + /* 5120 */ 41, 1327, 233, 386, 382, 381, 1327, 1327, 380, 379, + /* 5130 */ 378, 1327, 1327, 1327, 1327, 1327, 1327, 839, 1327, 1327, + /* 5140 */ 1327, 1327, 1327, 1327, 1327, 76, 75, 1327, 1327, 1327, + /* 5150 */ 1327, 1327, 74, 1327, 365, 364, 333, 1327, 4, 358, + /* 5160 */ 37, 1486, 1455, 1327, 1327, 1327, 1327, 299, 1327, 439, + /* 5170 */ 296, 343, 342, 341, 392, 298, 1327, 1327, 1327, 1327, + /* 5180 */ 1327, 1327, 1327, 1327, 1455, 1327, 1327, 1327, 1327, 1327, + /* 5190 */ 1327, 1327, 1327, 357, 356, 355, 354, 340, 339, 338, + /* 5200 */ 337, 336, 335, 334, 332, 331, 330, 329, 328, 327, + /* 5210 */ 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, + /* 5220 */ 316, 315, 314, 313, 312, 1327, 1327, 1455, 1327, 1327, + /* 5230 */ 1327, 1458, 1327, 1683, 1327, 1327, 1327, 1683, 1327, 1327, + /* 5240 */ 1327, 1327, 1327, 1327, 1683, 1327, 1327, 1327, 1327, 1327, + /* 5250 */ 1327, 1327, 1327, 1327, 1458, 41, 1327, 1327, 386, 382, + /* 5260 */ 381, 1458, 1327, 380, 379, 378, 1327, 1327, 1327, 1327, + /* 5270 */ 1327, 1683, 839, 1327, 1327, 1327, 1327, 1327, 1683, 1327, + /* 5280 */ 76, 75, 1327, 1327, 1683, 1327, 1683, 74, 1327, 365, + /* 5290 */ 364, 333, 1327, 4, 1683, 37, 360, 1683, 1327, 1327, + /* 5300 */ 1683, 1458, 299, 1327, 439, 296, 343, 342, 341, 392, + /* 5310 */ 298, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 5320 */ 1327, 1327, 1327, 1458, 1327, 1327, 1327, 1327, 357, 356, + /* 5330 */ 355, 354, 340, 339, 338, 337, 336, 335, 334, 332, + /* 5340 */ 331, 330, 329, 328, 327, 326, 325, 324, 323, 322, + /* 5350 */ 321, 320, 319, 318, 317, 316, 315, 314, 313, 312, + /* 5360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1458, 1327, 1789, 1327, + /* 5370 */ 1327, 1327, 1789, 1327, 1327, 1327, 1327, 1327, 1327, 1789, + /* 5380 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 5390 */ 41, 1327, 1327, 386, 382, 381, 1327, 1327, 380, 379, + /* 5400 */ 378, 1327, 1327, 1327, 1327, 1327, 1789, 839, 1327, 1327, + /* 5410 */ 1327, 1327, 1327, 1789, 1327, 76, 75, 1327, 1327, 1789, + /* 5420 */ 1327, 1789, 74, 1327, 365, 364, 333, 1327, 4, 1789, + /* 5430 */ 37, 1464, 1789, 1327, 1327, 1789, 1327, 299, 1327, 439, + /* 5440 */ 296, 343, 342, 341, 392, 298, 1327, 1327, 1327, 1327, + /* 5450 */ 1327, 1327, 1327, 1327, 1464, 1327, 1327, 1327, 1327, 1327, + /* 5460 */ 1327, 1464, 1327, 357, 356, 355, 354, 340, 339, 338, + /* 5470 */ 337, 336, 335, 334, 332, 331, 330, 329, 328, 327, + /* 5480 */ 326, 325, 324, 323, 322, 321, 320, 319, 318, 317, + /* 5490 */ 316, 315, 314, 313, 312, 1327, 1327, 1327, 1327, 1327, + /* 5500 */ 1464, 1464, 1327, 1788, 1327, 1327, 1327, 1788, 1327, 1327, + /* 5510 */ 1327, 1327, 1327, 1327, 1788, 1327, 1327, 1327, 1327, 1327, + /* 5520 */ 1327, 1327, 1327, 1464, 1327, 41, 1327, 1327, 386, 382, + /* 5530 */ 381, 1327, 1327, 380, 379, 378, 1327, 1327, 1327, 1327, + /* 5540 */ 1327, 1788, 839, 1327, 1327, 1327, 1327, 1327, 1788, 1327, + /* 5550 */ 1662, 1662, 1327, 1327, 1788, 1327, 1788, 74, 1327, 365, + /* 5560 */ 364, 1662, 1327, 1662, 1788, 1662, 1464, 1788, 1327, 1327, + /* 5570 */ 1788, 1327, 1662, 1327, 1662, 1662, 1662, 1662, 1662, 1662, + /* 5580 */ 1662, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 5590 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1662, 1662, + /* 5600 */ 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, + /* 5610 */ 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, + /* 5620 */ 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, 1662, + /* 5630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1457, 1327, 1682, 1327, + /* 5640 */ 1327, 1327, 1682, 1327, 1327, 1327, 1327, 1327, 1327, 1682, + /* 5650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1457, + /* 5660 */ 1662, 1327, 1327, 1662, 1662, 1662, 1457, 1327, 1662, 1662, + /* 5670 */ 1662, 1327, 1327, 1327, 1327, 1327, 1682, 1662, 1327, 1327, + /* 5680 */ 1327, 1327, 1327, 1682, 1327, 1661, 1661, 1327, 1327, 1682, + /* 5690 */ 1327, 1682, 1662, 1327, 1662, 1662, 1661, 1327, 1661, 1682, + /* 5700 */ 1661, 1327, 1682, 1327, 1327, 1682, 1457, 1661, 1327, 1661, + /* 5710 */ 1661, 1661, 1661, 1661, 1661, 1661, 1327, 1327, 1327, 1327, + /* 5720 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1457, 1327, + /* 5730 */ 1327, 1327, 1327, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 5740 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 5750 */ 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, 1661, + /* 5760 */ 1661, 1661, 1661, 1661, 1661, 1327, 1327, 1327, 1327, 1327, + /* 5770 */ 1327, 1457, 1327, 1649, 1327, 1327, 1327, 1649, 1327, 1327, + /* 5780 */ 1327, 1327, 1327, 1327, 1649, 1327, 1327, 1327, 1327, 1327, + /* 5790 */ 1327, 1327, 1327, 1327, 1327, 1661, 1327, 1327, 1661, 1661, + /* 5800 */ 1661, 1327, 1327, 1661, 1661, 1661, 1327, 1327, 1327, 1327, + /* 5810 */ 1327, 1649, 1661, 1327, 1327, 1327, 1327, 1327, 1649, 1327, + /* 5820 */ 1660, 1660, 1327, 1327, 1649, 1327, 1649, 1661, 1327, 1661, + /* 5830 */ 1661, 1660, 1327, 1660, 1649, 1660, 1454, 1649, 1327, 1327, + /* 5840 */ 1649, 1327, 1660, 1327, 1660, 1660, 1660, 1660, 1660, 1660, + /* 5850 */ 1660, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1454, + /* 5860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1454, 1327, 1660, 1660, + /* 5870 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, + /* 5880 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, + /* 5890 */ 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, 1660, + /* 5900 */ 1327, 1327, 1327, 1327, 1327, 1327, 1454, 1327, 1648, 1327, + /* 5910 */ 1327, 1327, 1648, 1327, 1327, 1327, 1327, 1327, 1327, 1648, + /* 5920 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1454, 1327, + /* 5930 */ 1660, 1327, 1327, 1660, 1660, 1660, 1327, 1327, 1660, 1660, + /* 5940 */ 1660, 1327, 1327, 1327, 1327, 1327, 1648, 1660, 1327, 1327, + /* 5950 */ 1327, 1327, 1327, 1648, 1327, 1659, 1659, 1327, 1327, 1648, + /* 5960 */ 1327, 1648, 1660, 1327, 1660, 1660, 1659, 1327, 1659, 1648, + /* 5970 */ 1659, 1454, 1648, 1327, 1327, 1648, 1327, 1659, 1327, 1659, + /* 5980 */ 1659, 1659, 1659, 1659, 1659, 1659, 1327, 1327, 1327, 1327, + /* 5990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6000 */ 1327, 1327, 1327, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + /* 6010 */ 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + /* 6020 */ 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, 1659, + /* 6030 */ 1659, 1659, 1659, 1659, 1659, 1327, 1327, 1327, 1327, 1327, + /* 6040 */ 1327, 1327, 1327, 1552, 1327, 1327, 1327, 1552, 1327, 1327, + /* 6050 */ 1327, 1327, 1327, 1327, 1552, 1327, 1327, 1327, 1327, 1327, + /* 6060 */ 1327, 1327, 1327, 1327, 1327, 1659, 1327, 1327, 1659, 1659, + /* 6070 */ 1659, 1327, 1327, 1659, 1659, 1659, 1327, 1327, 1327, 1327, + /* 6080 */ 1327, 1552, 1659, 1327, 1327, 1327, 1327, 1327, 1552, 1327, + /* 6090 */ 1658, 1658, 1327, 1327, 1552, 1327, 1552, 1659, 1327, 1659, + /* 6100 */ 1659, 1658, 1327, 1658, 1552, 1658, 1327, 1552, 1327, 1327, + /* 6110 */ 1552, 1327, 1658, 1327, 1658, 1658, 1658, 1658, 1658, 1658, + /* 6120 */ 1658, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1658, 1658, + /* 6140 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, + /* 6150 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, + /* 6160 */ 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, 1658, + /* 6170 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1551, 1327, + /* 6180 */ 1327, 1327, 1551, 1327, 1327, 1327, 1327, 1327, 1327, 1551, + /* 6190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6200 */ 1658, 1327, 1327, 1658, 1658, 1658, 1327, 1327, 1658, 1658, + /* 6210 */ 1658, 1327, 1327, 1327, 1327, 1327, 1551, 1658, 1327, 1327, + /* 6220 */ 1327, 1327, 1327, 1551, 1327, 1657, 1657, 1327, 1327, 1551, + /* 6230 */ 1327, 1551, 1658, 1327, 1658, 1658, 1657, 1327, 1657, 1551, + /* 6240 */ 1657, 1327, 1551, 1327, 1327, 1551, 1327, 1657, 1327, 1657, + /* 6250 */ 1657, 1657, 1657, 1657, 1657, 1657, 1327, 1327, 1327, 1327, + /* 6260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6270 */ 1327, 1327, 1327, 1657, 1657, 1657, 1657, 1657, 1657, 1657, + /* 6280 */ 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, + /* 6290 */ 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, 1657, + /* 6300 */ 1657, 1657, 1657, 1657, 1657, 1327, 1327, 1327, 1327, 1327, + /* 6310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6320 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6330 */ 1327, 1327, 1327, 1327, 1327, 1657, 1327, 1327, 1657, 1657, + /* 6340 */ 1657, 1327, 1327, 1657, 1657, 1657, 1327, 1327, 1327, 1327, + /* 6350 */ 1327, 1327, 1657, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6360 */ 1656, 1656, 1327, 1327, 1327, 1327, 1327, 1657, 1327, 1657, + /* 6370 */ 1657, 1656, 1327, 1656, 1327, 1656, 1327, 1327, 1327, 1327, + /* 6380 */ 1327, 1327, 1656, 1327, 1656, 1656, 1656, 1656, 1656, 1656, + /* 6390 */ 1656, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1656, 1656, + /* 6410 */ 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + /* 6420 */ 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + /* 6430 */ 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, 1656, + /* 6440 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6470 */ 1656, 1327, 1327, 1656, 1656, 1656, 1327, 1327, 1656, 1656, + /* 6480 */ 1656, 1327, 1327, 1327, 1327, 1327, 1327, 1656, 1327, 1327, + /* 6490 */ 1327, 1327, 1327, 1327, 1327, 1655, 1655, 1327, 1327, 1327, + /* 6500 */ 1327, 1327, 1656, 1327, 1656, 1656, 1655, 1327, 1655, 1327, + /* 6510 */ 1655, 1327, 1327, 1327, 1327, 1327, 1327, 1655, 1327, 1655, + /* 6520 */ 1655, 1655, 1655, 1655, 1655, 1655, 1327, 1327, 1327, 1327, + /* 6530 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6540 */ 1327, 1327, 1327, 1655, 1655, 1655, 1655, 1655, 1655, 1655, + /* 6550 */ 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, + /* 6560 */ 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, 1655, + /* 6570 */ 1655, 1655, 1655, 1655, 1655, 1327, 1327, 1327, 1327, 1327, + /* 6580 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6590 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6600 */ 1327, 1327, 1327, 1327, 1327, 1655, 1327, 1327, 1655, 1655, + /* 6610 */ 1655, 1327, 1327, 1655, 1655, 1655, 1327, 1327, 1327, 1327, + /* 6620 */ 1327, 1327, 1655, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6630 */ 1654, 1654, 1327, 1327, 1327, 1327, 1327, 1655, 1327, 1655, + /* 6640 */ 1655, 1654, 1327, 1654, 1327, 1654, 1327, 1327, 1327, 1327, + /* 6650 */ 1327, 1327, 1654, 1327, 1654, 1654, 1654, 1654, 1654, 1654, + /* 6660 */ 1654, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6670 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1654, 1654, + /* 6680 */ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, + /* 6690 */ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, + /* 6700 */ 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, 1654, + /* 6710 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6720 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6730 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6740 */ 1654, 1327, 1327, 1654, 1654, 1654, 1327, 1327, 1654, 1654, + /* 6750 */ 1654, 1327, 1327, 1327, 1327, 1327, 1327, 1654, 1327, 1327, + /* 6760 */ 1327, 1327, 1327, 1327, 1327, 1653, 1653, 1327, 1327, 1327, + /* 6770 */ 1327, 1327, 1654, 1327, 1654, 1654, 1653, 1327, 1653, 1327, + /* 6780 */ 1653, 1327, 1327, 1327, 1327, 1327, 1327, 1653, 1327, 1653, + /* 6790 */ 1653, 1653, 1653, 1653, 1653, 1653, 1327, 1327, 1327, 1327, + /* 6800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6810 */ 1327, 1327, 1327, 1653, 1653, 1653, 1653, 1653, 1653, 1653, + /* 6820 */ 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, + /* 6830 */ 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, 1653, + /* 6840 */ 1653, 1653, 1653, 1653, 1653, 1327, 1327, 1327, 1327, 1327, + /* 6850 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6870 */ 1327, 1327, 1327, 1327, 1327, 1653, 1327, 1327, 1653, 1653, + /* 6880 */ 1653, 1327, 1327, 1653, 1653, 1653, 1327, 1327, 1327, 1327, + /* 6890 */ 1327, 1327, 1653, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6900 */ 1652, 1652, 1327, 1327, 1327, 1327, 1327, 1653, 1327, 1653, + /* 6910 */ 1653, 1652, 1327, 1652, 1327, 1652, 1327, 1327, 1327, 1327, + /* 6920 */ 1327, 1327, 1652, 1327, 1652, 1652, 1652, 1652, 1652, 1652, + /* 6930 */ 1652, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1652, 1652, + /* 6950 */ 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + /* 6960 */ 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + /* 6970 */ 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, 1652, + /* 6980 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 6990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7010 */ 1652, 1327, 1327, 1652, 1652, 1652, 1327, 1327, 1652, 1652, + /* 7020 */ 1652, 1327, 1327, 1327, 1327, 1327, 1327, 1652, 1327, 1327, + /* 7030 */ 1327, 1327, 1327, 1327, 1327, 1558, 1558, 1327, 1327, 1327, + /* 7040 */ 1327, 1327, 1652, 1327, 1652, 1652, 1558, 1327, 1558, 1327, + /* 7050 */ 1558, 1327, 1327, 1327, 1327, 1327, 1327, 1558, 1327, 1558, + /* 7060 */ 1558, 1558, 1558, 1558, 1558, 1558, 1327, 1327, 1327, 1327, + /* 7070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7080 */ 1327, 1327, 1327, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + /* 7090 */ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + /* 7100 */ 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, 1558, + /* 7110 */ 1558, 1558, 1558, 1558, 1558, 1327, 1327, 1327, 1327, 1327, + /* 7120 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7140 */ 1327, 1327, 1327, 1327, 1327, 1558, 1327, 1327, 1558, 1558, + /* 7150 */ 1558, 1327, 1327, 1558, 1558, 1558, 1327, 1327, 1327, 1327, + /* 7160 */ 1327, 1327, 1558, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7170 */ 1557, 1557, 1327, 1327, 1327, 1327, 1327, 1558, 1327, 1558, + /* 7180 */ 1558, 1557, 1327, 1557, 1327, 1557, 1327, 1327, 1327, 1327, + /* 7190 */ 1327, 1327, 1557, 1327, 1557, 1557, 1557, 1557, 1557, 1557, + /* 7200 */ 1557, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1557, 1557, + /* 7220 */ 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, + /* 7230 */ 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, + /* 7240 */ 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, 1557, + /* 7250 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7270 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7280 */ 1557, 1327, 1327, 1557, 1557, 1557, 1327, 1327, 1557, 1557, + /* 7290 */ 1557, 1327, 1327, 1327, 1327, 1327, 1327, 1557, 1327, 1327, + /* 7300 */ 1327, 1327, 1327, 1327, 1327, 1601, 1601, 1327, 1327, 1327, + /* 7310 */ 1327, 1327, 1557, 1327, 1557, 1557, 1601, 1327, 1601, 1327, + /* 7320 */ 1601, 1327, 1327, 1327, 1327, 1327, 1327, 1601, 1327, 1601, + /* 7330 */ 1601, 1601, 1601, 1601, 1601, 1601, 1327, 1327, 1327, 1327, + /* 7340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7350 */ 1327, 1327, 1327, 1601, 1601, 1601, 1601, 1601, 1601, 1601, + /* 7360 */ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, + /* 7370 */ 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, 1601, + /* 7380 */ 1601, 1601, 1601, 1601, 1601, 1327, 1327, 1327, 1327, 1327, + /* 7390 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7410 */ 1327, 1327, 1327, 1327, 1327, 1601, 1327, 1327, 1601, 1601, + /* 7420 */ 1601, 1327, 1327, 1601, 1601, 1601, 1327, 1327, 1327, 1327, + /* 7430 */ 1327, 1327, 1601, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7440 */ 1600, 1600, 1327, 1327, 1327, 1327, 1327, 1601, 1327, 1601, + /* 7450 */ 1601, 1600, 1327, 1600, 1327, 1600, 1327, 1327, 1327, 1327, + /* 7460 */ 1327, 1327, 1600, 1327, 1600, 1600, 1600, 1600, 1600, 1600, + /* 7470 */ 1600, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1600, 1600, + /* 7490 */ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, + /* 7500 */ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, + /* 7510 */ 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, 1600, + /* 7520 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7530 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7540 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7550 */ 1600, 1327, 1327, 1600, 1600, 1600, 1327, 1327, 1600, 1600, + /* 7560 */ 1600, 1327, 1327, 1327, 1327, 1327, 1327, 1600, 1327, 1327, + /* 7570 */ 1327, 1327, 1327, 1327, 1327, 1599, 1599, 1327, 1327, 1327, + /* 7580 */ 1327, 1327, 1600, 1327, 1600, 1600, 1599, 1327, 1599, 1327, + /* 7590 */ 1599, 1327, 1327, 1327, 1327, 1327, 1327, 1599, 1327, 1599, + /* 7600 */ 1599, 1599, 1599, 1599, 1599, 1599, 1327, 1327, 1327, 1327, + /* 7610 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7620 */ 1327, 1327, 1327, 1599, 1599, 1599, 1599, 1599, 1599, 1599, + /* 7630 */ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, + /* 7640 */ 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, 1599, + /* 7650 */ 1599, 1599, 1599, 1599, 1599, 1327, 1327, 1327, 1327, 1327, + /* 7660 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7670 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7680 */ 1327, 1327, 1327, 1327, 1327, 1599, 1327, 1327, 1599, 1599, + /* 7690 */ 1599, 1327, 1327, 1599, 1599, 1599, 1327, 1327, 1327, 1327, + /* 7700 */ 1327, 1327, 1599, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7710 */ 1598, 1598, 1327, 1327, 1327, 1327, 1327, 1599, 1327, 1599, + /* 7720 */ 1599, 1598, 1327, 1598, 1327, 1598, 1327, 1327, 1327, 1327, + /* 7730 */ 1327, 1327, 1598, 1327, 1598, 1598, 1598, 1598, 1598, 1598, + /* 7740 */ 1598, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7750 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1598, 1598, + /* 7760 */ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, + /* 7770 */ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, + /* 7780 */ 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, 1598, + /* 7790 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7810 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7820 */ 1598, 1327, 1327, 1598, 1598, 1598, 1327, 1327, 1598, 1598, + /* 7830 */ 1598, 1327, 1327, 1327, 1327, 1327, 1327, 1598, 1327, 1327, + /* 7840 */ 1327, 1327, 1327, 1327, 1327, 1597, 1597, 1327, 1327, 1327, + /* 7850 */ 1327, 1327, 1598, 1327, 1598, 1598, 1597, 1327, 1597, 1327, + /* 7860 */ 1597, 1327, 1327, 1327, 1327, 1327, 1327, 1597, 1327, 1597, + /* 7870 */ 1597, 1597, 1597, 1597, 1597, 1597, 1327, 1327, 1327, 1327, + /* 7880 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7890 */ 1327, 1327, 1327, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + /* 7900 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + /* 7910 */ 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, 1597, + /* 7920 */ 1597, 1597, 1597, 1597, 1597, 1327, 1327, 1327, 1327, 1327, + /* 7930 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7950 */ 1327, 1327, 1327, 1327, 1327, 1597, 1327, 1327, 1597, 1597, + /* 7960 */ 1597, 1327, 1327, 1597, 1597, 1597, 1327, 1327, 1327, 1327, + /* 7970 */ 1327, 1327, 1597, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 7980 */ 1596, 1596, 1327, 1327, 1327, 1327, 1327, 1597, 1327, 1597, + /* 7990 */ 1597, 1596, 1327, 1596, 1327, 1596, 1327, 1327, 1327, 1327, + /* 8000 */ 1327, 1327, 1596, 1327, 1596, 1596, 1596, 1596, 1596, 1596, + /* 8010 */ 1596, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1596, 1596, + /* 8030 */ 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + /* 8040 */ 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + /* 8050 */ 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, 1596, + /* 8060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8080 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8090 */ 1596, 1327, 1327, 1596, 1596, 1596, 1327, 1327, 1596, 1596, + /* 8100 */ 1596, 1327, 1327, 1327, 1327, 1327, 1327, 1596, 1327, 1327, + /* 8110 */ 1327, 1327, 1327, 1327, 1327, 1357, 1357, 1327, 1327, 1327, + /* 8120 */ 1327, 1327, 1596, 1327, 1596, 1596, 1357, 1327, 1357, 1327, + /* 8130 */ 1357, 1327, 1327, 1327, 1327, 1327, 1327, 1357, 1327, 1357, + /* 8140 */ 1357, 1357, 1357, 1357, 1357, 1357, 1327, 1327, 1327, 1327, + /* 8150 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8160 */ 1327, 1327, 1327, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + /* 8170 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + /* 8180 */ 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, 1357, + /* 8190 */ 1357, 1357, 1357, 1357, 1357, 1327, 1327, 1327, 1327, 1327, + /* 8200 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8220 */ 1327, 1327, 1327, 1327, 1327, 1357, 1327, 1327, 1357, 1357, + /* 8230 */ 1357, 1327, 1327, 1357, 1357, 1357, 1327, 1327, 1327, 1327, + /* 8240 */ 1327, 1327, 1357, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8250 */ 1356, 1356, 1327, 1327, 1327, 1327, 1327, 1357, 1327, 1357, + /* 8260 */ 1357, 1356, 1327, 1356, 1327, 1356, 1327, 1327, 1327, 1327, + /* 8270 */ 1327, 1327, 1356, 1327, 1356, 1356, 1356, 1356, 1356, 1356, + /* 8280 */ 1356, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8290 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1356, 1356, + /* 8300 */ 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, + /* 8310 */ 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, + /* 8320 */ 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, 1356, + /* 8330 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8350 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8360 */ 1356, 1327, 1327, 1356, 1356, 1356, 1327, 1327, 1356, 1356, + /* 8370 */ 1356, 1327, 1327, 1327, 1327, 1327, 1327, 1356, 1327, 1327, + /* 8380 */ 1327, 1327, 1327, 1327, 1327, 1355, 1355, 1327, 1327, 1327, + /* 8390 */ 1327, 1327, 1356, 1327, 1356, 1356, 1355, 1327, 1355, 1327, + /* 8400 */ 1355, 1327, 1327, 1327, 1327, 1327, 1327, 1355, 1327, 1355, + /* 8410 */ 1355, 1355, 1355, 1355, 1355, 1355, 1327, 1327, 1327, 1327, + /* 8420 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8430 */ 1327, 1327, 1327, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + /* 8440 */ 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + /* 8450 */ 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, 1355, + /* 8460 */ 1355, 1355, 1355, 1355, 1355, 1327, 1327, 1327, 1327, 1327, + /* 8470 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8490 */ 1327, 1327, 1327, 1327, 1327, 1355, 1327, 1327, 1355, 1355, + /* 8500 */ 1355, 1327, 1327, 1355, 1355, 1355, 1327, 1327, 1327, 1327, + /* 8510 */ 1327, 1327, 1355, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8520 */ 1354, 1354, 1327, 1327, 1327, 1327, 1327, 1355, 1327, 1355, + /* 8530 */ 1355, 1354, 1327, 1354, 1327, 1354, 1327, 1327, 1327, 1327, + /* 8540 */ 1327, 1327, 1354, 1327, 1354, 1354, 1354, 1354, 1354, 1354, + /* 8550 */ 1354, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8560 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1354, 1354, + /* 8570 */ 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, + /* 8580 */ 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, + /* 8590 */ 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, 1354, + /* 8600 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8610 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8620 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8630 */ 1354, 1327, 1327, 1354, 1354, 1354, 1327, 1327, 1354, 1354, + /* 8640 */ 1354, 1327, 1327, 1327, 1327, 1327, 1327, 1354, 1327, 1327, + /* 8650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 333, 1327, 1327, + /* 8660 */ 1327, 34, 1354, 1327, 1354, 1354, 1327, 1327, 299, 1327, + /* 8670 */ 1327, 296, 343, 342, 341, 1327, 298, 1327, 1327, 1327, + /* 8680 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8690 */ 1327, 1327, 1327, 1327, 357, 356, 355, 354, 340, 339, + /* 8700 */ 338, 337, 336, 335, 334, 332, 331, 330, 329, 328, + /* 8710 */ 327, 326, 325, 324, 323, 322, 321, 320, 319, 318, + /* 8720 */ 317, 316, 315, 314, 313, 312, 1327, 1327, 1327, 1327, + /* 8730 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8740 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8750 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 386, + /* 8760 */ 382, 381, 1327, 1327, 380, 379, 378, 1327, 1327, 1327, + /* 8770 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 333, 1327, + /* 8790 */ 365, 364, 35, 1327, 1327, 1327, 1327, 1327, 1327, 299, + /* 8800 */ 1327, 1327, 296, 343, 342, 341, 1327, 298, 1327, 1327, + /* 8810 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8820 */ 1327, 1327, 1327, 1327, 1327, 357, 356, 355, 354, 340, + /* 8830 */ 339, 338, 337, 336, 335, 334, 332, 331, 330, 329, + /* 8840 */ 328, 327, 326, 325, 324, 323, 322, 321, 320, 319, + /* 8850 */ 318, 317, 316, 315, 314, 313, 312, 1327, 1327, 1327, + /* 8860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8870 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8880 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8890 */ 386, 382, 381, 1327, 1327, 380, 379, 378, 1327, 1327, + /* 8900 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8910 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 333, + /* 8920 */ 1327, 365, 364, 36, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8930 */ 299, 1327, 1327, 296, 343, 342, 341, 1327, 298, 1327, + /* 8940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 8950 */ 1327, 1327, 1327, 1327, 1327, 1327, 357, 356, 355, 354, + /* 8960 */ 340, 339, 338, 337, 336, 335, 334, 332, 331, 330, + /* 8970 */ 329, 328, 327, 326, 325, 324, 323, 322, 321, 320, + /* 8980 */ 319, 318, 317, 316, 315, 314, 313, 312, 1341, 1341, + /* 8990 */ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + /* 9000 */ 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, 1341, + /* 9010 */ 1327, 1341, 1341, 1341, 1341, 1501, 1341, 1341, 1501, 1501, + /* 9020 */ 1327, 386, 382, 381, 1327, 1501, 380, 379, 378, 1327, + /* 9030 */ 1501, 1341, 1341, 1327, 1341, 1341, 1327, 1341, 1327, 1327, + /* 9040 */ 1327, 1327, 1341, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9050 */ 1327, 1327, 365, 364, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9070 */ 1327, 1327, 1501, 1501, 1327, 1501, 1327, 1501, 1327, 1501, + /* 9080 */ 1327, 1327, 1327, 1501, 1327, 1327, 1327, 1327, 1501, 1327, + /* 9090 */ 1501, 1327, 1327, 1327, 1327, 1501, 1327, 1327, 1327, 1327, + /* 9100 */ 1327, 1327, 1341, 1327, 1327, 1341, 1341, 1327, 1501, 1341, + /* 9110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1501, 1501, 1327, 1327, + /* 9120 */ 1341, 1327, 1327, 1327, 1327, 1327, 1501, 1341, 1501, 1501, + /* 9130 */ 1501, 1327, 1501, 1327, 1774, 1501, 1327, 1774, 1774, 1327, + /* 9140 */ 1501, 1327, 1327, 1501, 1774, 1327, 1327, 1501, 1327, 1774, + /* 9150 */ 1327, 1341, 1327, 1327, 1341, 1327, 1327, 1383, 1383, 1383, + /* 9160 */ 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1383, + /* 9170 */ 1383, 1327, 1383, 1383, 1383, 1383, 1383, 1383, 1383, 1327, + /* 9180 */ 1383, 1383, 1327, 1383, 1327, 1383, 1383, 1327, 1327, 1327, + /* 9190 */ 1327, 1774, 1774, 1327, 1774, 1327, 1774, 1327, 1774, 1327, + /* 9200 */ 1383, 1383, 1774, 1383, 1383, 1327, 1327, 1774, 1327, 1774, + /* 9210 */ 1327, 1383, 1327, 1327, 1774, 1327, 1327, 1327, 1327, 1327, + /* 9220 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1774, 1327, 1327, + /* 9230 */ 1327, 1327, 1327, 1327, 1327, 1774, 1774, 1327, 1327, 1327, + /* 9240 */ 1327, 1327, 1327, 1327, 1327, 1774, 1327, 1774, 1774, 1774, + /* 9250 */ 1327, 1774, 1327, 1327, 1774, 1327, 1327, 1327, 1327, 1774, + /* 9260 */ 1327, 1327, 1774, 1327, 1327, 1327, 1774, 1327, 1327, 1327, + /* 9270 */ 1327, 1383, 1327, 1327, 1383, 1383, 1327, 1327, 1383, 1327, + /* 9280 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9290 */ 1327, 1327, 1327, 1327, 1327, 1327, 1383, 1327, 1383, 1327, + /* 9300 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9320 */ 1383, 1327, 1327, 1383, 1327, 1327, 1346, 1346, 1346, 1346, + /* 9330 */ 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1346, + /* 9340 */ 1327, 1346, 1346, 1346, 1346, 1346, 1346, 1346, 1327, 1346, + /* 9350 */ 1346, 1327, 1346, 1327, 1346, 1346, 1327, 1327, 1327, 1327, + /* 9360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1346, + /* 9370 */ 1346, 1327, 1346, 1346, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9380 */ 1346, 1327, 1327, 1327, 1327, 1327, 1338, 1338, 1338, 1338, + /* 9390 */ 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1338, + /* 9400 */ 1327, 1338, 1338, 1338, 1338, 1338, 1338, 1338, 1327, 1338, + /* 9410 */ 1338, 1338, 1338, 1327, 1338, 1338, 1327, 1327, 1327, 1327, + /* 9420 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1338, + /* 9430 */ 1338, 1327, 1338, 1338, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9440 */ 1346, 1327, 1327, 1346, 1346, 1327, 1327, 1346, 1327, 1327, + /* 9450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9460 */ 1327, 1327, 1327, 1327, 1327, 1346, 1327, 1346, 1327, 1327, + /* 9470 */ 1327, 1327, 1327, 1706, 1706, 1706, 1706, 1706, 1706, 1706, + /* 9480 */ 1706, 1706, 1706, 295, 294, 293, 292, 1327, 1327, 1346, + /* 9490 */ 1327, 1327, 1346, 1327, 1327, 1327, 1327, 1706, 1327, 1706, + /* 9500 */ 1338, 1327, 1327, 1338, 1338, 1327, 1327, 1338, 1327, 1327, + /* 9510 */ 1327, 1327, 1327, 1327, 1327, 1327, 1706, 1706, 1338, 1706, + /* 9520 */ 1706, 1327, 1327, 1327, 1327, 1338, 1327, 1327, 1327, 1327, + /* 9530 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9540 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1338, + /* 9550 */ 1327, 1327, 1338, 1327, 1327, 1640, 1640, 1640, 1640, 1640, + /* 9560 */ 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1327, + /* 9570 */ 1640, 1640, 1640, 1640, 1640, 1640, 1640, 1327, 1640, 1640, + /* 9580 */ 1327, 1640, 1327, 1640, 1640, 1327, 1327, 1706, 1327, 1327, + /* 9590 */ 1706, 1706, 1327, 1327, 1706, 1327, 1327, 1327, 1640, 1640, + /* 9600 */ 1327, 1640, 1640, 1327, 1327, 1327, 1327, 1327, 1327, 1640, + /* 9610 */ 1327, 1327, 1706, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9620 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1706, 1327, 1327, 1706, + /* 9640 */ 1327, 1327, 1708, 1708, 1708, 1708, 1708, 1708, 1708, 1708, + /* 9650 */ 1708, 1708, 1708, 1708, 1708, 1708, 1327, 1327, 1327, 1327, + /* 9660 */ 1327, 1327, 1327, 1327, 1327, 1327, 1708, 1327, 1708, 1640, + /* 9670 */ 1327, 1327, 1640, 1640, 1327, 1327, 1640, 1327, 1327, 1327, + /* 9680 */ 1327, 1327, 1327, 1327, 1327, 1708, 1708, 1327, 1708, 1708, + /* 9690 */ 1327, 1327, 1327, 1327, 1640, 1327, 1327, 1327, 1327, 1327, + /* 9700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9710 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1640, 1327, + /* 9720 */ 1327, 1640, 1327, 1327, 1639, 1639, 1639, 1639, 1639, 1639, + /* 9730 */ 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1639, 1327, 1639, + /* 9740 */ 1639, 1639, 1639, 1639, 1639, 1639, 1327, 1639, 1639, 1327, + /* 9750 */ 1639, 1327, 1639, 1639, 1327, 1327, 1708, 1327, 1327, 1708, + /* 9760 */ 1708, 1327, 1327, 1708, 1327, 1327, 1327, 1639, 1639, 1327, + /* 9770 */ 1639, 1639, 1327, 1327, 1327, 1327, 1327, 1327, 1639, 1327, + /* 9780 */ 1327, 1708, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9790 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9800 */ 1327, 1327, 1327, 1327, 647, 1708, 1327, 1327, 1708, 1327, + /* 9810 */ 1327, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, 1707, + /* 9820 */ 1707, 1707, 1707, 1707, 1707, 1327, 649, 673, 672, 671, + /* 9830 */ 670, 1327, 1327, 1327, 1327, 1707, 1327, 1707, 1639, 1327, + /* 9840 */ 1327, 1639, 1639, 1327, 1327, 1639, 1327, 1327, 534, 1327, + /* 9850 */ 533, 1327, 1327, 1327, 1707, 1707, 1327, 1707, 1707, 1327, + /* 9860 */ 1327, 692, 648, 1639, 1327, 1327, 691, 712, 711, 1327, + /* 9870 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 9880 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1639, 1327, 1327, + /* 9890 */ 1639, 1327, 1327, 1638, 1638, 1638, 1638, 1638, 1638, 1638, + /* 9900 */ 1638, 1638, 1638, 1638, 1638, 1638, 1638, 1327, 1638, 1638, + /* 9910 */ 1638, 1638, 1638, 1638, 1638, 1327, 1638, 1638, 1327, 1638, + /* 9920 */ 532, 1638, 1638, 1327, 1327, 1707, 1327, 1327, 1707, 1707, + /* 9930 */ 1327, 1327, 1707, 1327, 1327, 1327, 1638, 1638, 531, 1638, + /* 9940 */ 1638, 1327, 1327, 530, 1327, 1327, 1327, 1638, 1327, 1327, + /* 9950 */ 1707, 1327, 1327, 1327, 1327, 1327, 529, 1327, 1327, 1327, + /* 9960 */ 1327, 1327, 278, 279, 281, 280, 283, 282, 276, 277, + /* 9970 */ 274, 273, 1327, 1327, 1707, 1327, 1327, 1707, 1327, 1327, + /* 9980 */ 1327, 1327, 528, 1327, 1327, 1327, 1491, 1327, 1491, 1327, + /* 9990 */ 1327, 1327, 1327, 1327, 1327, 1327, 695, 1327, 1327, 1327, + /* 10000 */ 1327, 1327, 1327, 1327, 1327, 1491, 1491, 1638, 1491, 1491, + /* 10010 */ 1638, 1638, 1327, 1327, 1638, 1327, 1327, 1327, 1327, 1327, + /* 10020 */ 1327, 1327, 439, 296, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10030 */ 1327, 1327, 1638, 621, 1327, 1327, 1327, 1327, 1327, 199, + /* 10040 */ 50, 60, 1327, 198, 182, 539, 1327, 1327, 1327, 1327, + /* 10050 */ 1327, 1327, 1327, 1327, 1327, 1327, 1638, 1327, 1327, 1638, + /* 10060 */ 1327, 1327, 1547, 1547, 1547, 1547, 1547, 1547, 1547, 1547, + /* 10070 */ 1547, 1547, 1547, 1547, 1547, 1547, 1491, 1547, 1547, 1547, + /* 10080 */ 1547, 1547, 1547, 1547, 1327, 1547, 1547, 1327, 1547, 1327, + /* 10090 */ 1547, 1547, 1327, 1327, 1327, 1327, 1327, 197, 196, 480, + /* 10100 */ 477, 1327, 1327, 1327, 1327, 1547, 1547, 538, 1547, 1547, + /* 10110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1547, 1327, 1327, 537, + /* 10120 */ 1327, 536, 1327, 1327, 1327, 1491, 1327, 1327, 481, 1327, + /* 10130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10140 */ 1327, 1327, 1327, 1327, 181, 1327, 1327, 1327, 1327, 1327, + /* 10150 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10160 */ 1327, 1327, 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, + /* 10170 */ 1327, 1327, 1327, 1327, 1327, 1327, 1547, 1327, 1327, 1547, + /* 10180 */ 1547, 1327, 1327, 1547, 1327, 519, 491, 1327, 1327, 1327, + /* 10190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10200 */ 1327, 1547, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10210 */ 534, 1327, 533, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10220 */ 1327, 1327, 1327, 1327, 503, 1547, 1327, 1327, 1547, 1327, + /* 10230 */ 1327, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, 1546, + /* 10240 */ 1546, 1546, 1546, 1546, 1546, 1327, 1546, 1546, 1546, 1546, + /* 10250 */ 1546, 1546, 1546, 1327, 1546, 1546, 1327, 1546, 1327, 1546, + /* 10260 */ 1546, 1327, 1327, 1327, 1327, 505, 518, 517, 516, 515, + /* 10270 */ 514, 513, 512, 1327, 1546, 1546, 1327, 1546, 1546, 1327, + /* 10280 */ 1327, 1327, 532, 1327, 1327, 1546, 1327, 1327, 1327, 1327, + /* 10290 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10300 */ 531, 1327, 504, 1327, 1327, 530, 1327, 1327, 1327, 1327, + /* 10310 */ 1327, 647, 645, 1327, 1327, 1327, 1327, 1327, 529, 1327, + /* 10320 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10330 */ 1327, 1327, 1327, 649, 673, 672, 671, 670, 1327, 1327, + /* 10340 */ 1327, 1327, 1327, 1327, 528, 1546, 1327, 1327, 1546, 1546, + /* 10350 */ 638, 1327, 1546, 1327, 1327, 534, 1327, 533, 1327, 1327, + /* 10360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 646, 648, + /* 10370 */ 1546, 1327, 1327, 1327, 1327, 468, 1327, 1327, 343, 342, + /* 10380 */ 1327, 1327, 1327, 1327, 1327, 263, 1327, 1327, 1327, 1327, + /* 10390 */ 217, 1327, 1327, 1327, 1546, 1327, 1327, 1546, 1327, 1327, + /* 10400 */ 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, 1536, + /* 10410 */ 1536, 1536, 1536, 1536, 1327, 1536, 1536, 1536, 1536, 1536, + /* 10420 */ 1536, 1536, 1327, 1536, 1536, 1327, 1536, 532, 1536, 1536, + /* 10430 */ 1327, 1327, 581, 580, 1327, 19, 1327, 83, 1327, 1327, + /* 10440 */ 1327, 1327, 1327, 1536, 1536, 531, 1536, 1536, 749, 1327, + /* 10450 */ 530, 1327, 1327, 1327, 1536, 18, 1327, 81, 735, 1327, + /* 10460 */ 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10470 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10480 */ 1327, 1327, 1327, 1327, 1327, 1327, 136, 1327, 573, 528, + /* 10490 */ 1327, 1327, 1327, 576, 1327, 736, 308, 307, 1327, 1327, + /* 10500 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10510 */ 1327, 1327, 1327, 1327, 1536, 1327, 1327, 1536, 1536, 1327, + /* 10520 */ 1327, 1536, 1327, 1327, 1327, 1327, 91, 412, 1327, 1327, + /* 10530 */ 254, 178, 1327, 1327, 253, 1327, 1327, 1327, 1327, 1536, + /* 10540 */ 1327, 1327, 1327, 1327, 1327, 1327, 578, 1327, 252, 1327, + /* 10550 */ 251, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10560 */ 1327, 1327, 1327, 1536, 1327, 1327, 1536, 1327, 1327, 1374, + /* 10570 */ 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, 1374, + /* 10580 */ 1374, 1374, 1374, 250, 1374, 1374, 1374, 1374, 1374, 1374, + /* 10590 */ 1374, 1327, 1374, 1374, 1327, 1374, 1327, 1374, 1374, 1327, + /* 10600 */ 1327, 1327, 249, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10610 */ 1327, 1327, 1374, 1374, 1327, 1374, 1374, 1327, 1327, 1327, + /* 10620 */ 1327, 1327, 1327, 1374, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10630 */ 1327, 1327, 248, 1327, 1327, 1327, 647, 645, 1327, 1327, + /* 10640 */ 1327, 247, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10650 */ 1327, 1327, 1327, 1327, 1327, 246, 1327, 245, 649, 673, + /* 10660 */ 672, 671, 670, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10670 */ 1327, 1327, 1327, 244, 1327, 640, 1327, 1327, 1327, 1327, + /* 10680 */ 534, 1327, 533, 1374, 1327, 1327, 1374, 1374, 1327, 1327, + /* 10690 */ 1374, 1327, 1327, 646, 648, 1327, 1327, 1327, 1327, 1327, + /* 10700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1374, 1327, + /* 10710 */ 1327, 1327, 1327, 1327, 1583, 1327, 1327, 1583, 1583, 1327, + /* 10720 */ 1327, 1327, 1327, 1327, 1583, 1327, 1327, 1327, 1327, 1583, + /* 10730 */ 1327, 1327, 1374, 1327, 1327, 1374, 1327, 1327, 1529, 1529, + /* 10740 */ 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + /* 10750 */ 1529, 1529, 532, 1529, 1529, 1529, 1529, 1529, 1529, 1529, + /* 10760 */ 1327, 1529, 1529, 1327, 1529, 1327, 1529, 1529, 1327, 1327, + /* 10770 */ 531, 1583, 1583, 1327, 1583, 530, 1583, 1327, 1327, 1327, + /* 10780 */ 1327, 1529, 1529, 1327, 1529, 1529, 1327, 1583, 529, 1327, + /* 10790 */ 1327, 1327, 1529, 1327, 1583, 1327, 1327, 1327, 1327, 1327, + /* 10800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10810 */ 1327, 1327, 1327, 1327, 528, 1583, 1327, 1327, 1327, 1327, + /* 10820 */ 1327, 1327, 1327, 1327, 1327, 1583, 468, 1583, 1583, 343, + /* 10830 */ 342, 1327, 1327, 1327, 1583, 1327, 263, 1327, 1327, 1327, + /* 10840 */ 1327, 217, 1327, 1327, 1327, 1327, 1583, 1327, 1327, 1327, + /* 10850 */ 1327, 1327, 1529, 1327, 1327, 1529, 1529, 1327, 1327, 1529, + /* 10860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 10870 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1529, 1327, 1327, + /* 10880 */ 1327, 1327, 1327, 581, 580, 1327, 19, 1327, 83, 1327, + /* 10890 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 749, + /* 10900 */ 1327, 1529, 1327, 1327, 1529, 1327, 18, 1528, 1528, 1528, + /* 10910 */ 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1528, + /* 10920 */ 1528, 1327, 1528, 1528, 1528, 1528, 1528, 1528, 1528, 1327, + /* 10930 */ 1528, 1528, 1327, 1528, 1327, 1528, 1528, 136, 1327, 573, + /* 10940 */ 1793, 1327, 1327, 1327, 1327, 1327, 736, 1327, 1327, 1327, + /* 10950 */ 1528, 1528, 1327, 1528, 1528, 1327, 1327, 1327, 2, 1327, + /* 10960 */ 1327, 1528, 1327, 1327, 1327, 1327, 1327, 1500, 1500, 1500, + /* 10970 */ 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1500, + /* 10980 */ 1500, 1327, 1500, 1500, 1500, 1500, 1500, 1500, 1500, 1327, + /* 10990 */ 1500, 1500, 9, 1500, 1327, 1500, 1500, 1327, 1327, 1327, + /* 11000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11010 */ 1500, 1500, 1327, 1500, 1500, 1327, 1327, 1327, 1327, 1327, + /* 11020 */ 1327, 1528, 1327, 1327, 1528, 1528, 1327, 1327, 1528, 1327, + /* 11030 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11040 */ 1327, 1327, 1327, 1327, 1327, 1327, 1528, 1327, 1327, 1327, + /* 11050 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11070 */ 1528, 1327, 1327, 1528, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11080 */ 1327, 1500, 1327, 1327, 1500, 1500, 1327, 1327, 1500, 1327, + /* 11090 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11100 */ 1327, 1327, 1327, 1327, 1327, 1327, 1500, 1327, 1327, 1327, + /* 11110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11120 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11130 */ 1500, 1327, 1327, 1500, 1327, 1327, 1498, 1498, 1498, 1498, + /* 11140 */ 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1498, + /* 11150 */ 1327, 1498, 1498, 1498, 1498, 1498, 1498, 1498, 1327, 1498, + /* 11160 */ 1498, 10, 1498, 1327, 1498, 1498, 1327, 1327, 1327, 1327, + /* 11170 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1498, + /* 11180 */ 1498, 1327, 1498, 1498, 1327, 1327, 1616, 1616, 1616, 1616, + /* 11190 */ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, + /* 11200 */ 1327, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1327, 1616, + /* 11210 */ 1616, 11, 1616, 1327, 1616, 1616, 1327, 1327, 1327, 1327, + /* 11220 */ 1327, 1584, 1327, 1327, 1584, 1584, 1327, 1327, 1327, 1616, + /* 11230 */ 1616, 1584, 1616, 1616, 1327, 1327, 1584, 1327, 1327, 1327, + /* 11240 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11250 */ 1498, 1327, 1327, 1498, 1498, 1327, 1327, 1498, 1327, 1327, + /* 11260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11270 */ 1327, 1327, 1327, 1327, 1327, 1498, 1327, 1327, 1584, 1584, + /* 11280 */ 1327, 1584, 1327, 1584, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11290 */ 1327, 1327, 1327, 1327, 1584, 1327, 1327, 1327, 1327, 1498, + /* 11300 */ 1616, 1584, 1498, 1616, 1616, 1327, 1327, 1616, 1327, 1327, + /* 11310 */ 1327, 1327, 1327, 1327, 135, 1327, 1327, 1327, 1327, 1327, + /* 11320 */ 1327, 1327, 1584, 1327, 1327, 1616, 1327, 1327, 1327, 1327, + /* 11330 */ 1327, 1327, 1584, 1327, 1584, 1584, 1327, 1327, 1327, 1327, + /* 11340 */ 1327, 1584, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1616, + /* 11350 */ 1327, 1327, 1616, 1584, 1327, 1424, 1424, 1424, 1424, 1424, + /* 11360 */ 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1327, + /* 11370 */ 1424, 1424, 1424, 1424, 1424, 1424, 1424, 1327, 1424, 1424, + /* 11380 */ 1424, 1424, 1327, 1424, 1424, 1327, 1327, 1327, 1327, 1327, + /* 11390 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1424, 1424, + /* 11400 */ 1327, 1424, 1424, 1327, 1327, 1423, 1423, 1423, 1423, 1423, + /* 11410 */ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1327, + /* 11420 */ 1423, 1423, 1423, 1423, 1423, 1423, 1423, 1327, 1423, 1423, + /* 11430 */ 1423, 1423, 1327, 1423, 1423, 1327, 1327, 1327, 1327, 1327, + /* 11440 */ 1369, 1327, 1327, 1369, 1369, 1327, 1327, 1327, 1423, 1423, + /* 11450 */ 1369, 1423, 1423, 1327, 1327, 1369, 1327, 1327, 1327, 1327, + /* 11460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1424, + /* 11470 */ 1327, 1327, 1424, 1424, 1327, 1327, 1424, 1327, 1327, 1327, + /* 11480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11490 */ 1327, 1327, 1327, 1327, 1424, 1327, 1327, 1369, 1369, 1327, + /* 11500 */ 1369, 1327, 1369, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11510 */ 1327, 1327, 1327, 1369, 1327, 1327, 1327, 1327, 1424, 1423, + /* 11520 */ 1369, 1424, 1423, 1423, 1327, 1327, 1423, 1327, 1327, 1327, + /* 11530 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11540 */ 1327, 1369, 1327, 1327, 1423, 1327, 1327, 1327, 1327, 1327, + /* 11550 */ 1327, 1369, 1327, 1369, 1369, 1327, 1327, 1327, 1327, 1327, + /* 11560 */ 1369, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1423, 1327, + /* 11570 */ 1327, 1423, 1369, 1327, 1422, 1422, 1422, 1422, 1422, 1422, + /* 11580 */ 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1422, 1327, 1422, + /* 11590 */ 1422, 1422, 1422, 1422, 1422, 1422, 1327, 1422, 1422, 1422, + /* 11600 */ 1422, 1327, 1422, 1422, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11610 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1422, 1422, 1327, + /* 11620 */ 1422, 1422, 1327, 1327, 1421, 1421, 1421, 1421, 1421, 1421, + /* 11630 */ 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1421, 1327, 1421, + /* 11640 */ 1421, 1421, 1421, 1421, 1421, 1421, 1327, 1421, 1421, 1421, + /* 11650 */ 1421, 1327, 1421, 1421, 1327, 1327, 1327, 1327, 1327, 468, + /* 11660 */ 1327, 1327, 343, 342, 1327, 1327, 1327, 1421, 1421, 263, + /* 11670 */ 1421, 1421, 1327, 1327, 217, 1327, 1327, 1327, 1327, 1327, + /* 11680 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1422, 1327, + /* 11690 */ 1327, 1422, 1422, 1327, 1327, 1422, 1327, 1327, 1327, 1327, + /* 11700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11710 */ 1327, 1327, 1327, 1422, 1327, 1327, 581, 580, 1327, 19, + /* 11720 */ 1327, 83, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11730 */ 1327, 1327, 749, 1327, 1327, 1327, 1327, 1422, 1421, 18, + /* 11740 */ 1422, 1421, 1421, 1327, 1327, 1421, 1327, 1327, 1327, 1327, + /* 11750 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11760 */ 728, 1327, 1327, 1421, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11770 */ 136, 1327, 573, 1327, 1327, 1327, 1327, 1327, 1327, 736, + /* 11780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1421, 1327, 1327, + /* 11790 */ 1421, 1327, 1327, 1420, 1420, 1420, 1420, 1420, 1420, 1420, + /* 11800 */ 1420, 1420, 1420, 1420, 1420, 1420, 1420, 1327, 1420, 1420, + /* 11810 */ 1420, 1420, 1420, 1420, 1420, 1327, 1420, 1420, 1420, 1420, + /* 11820 */ 1327, 1420, 1420, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11830 */ 1327, 1327, 1327, 1327, 1327, 1327, 1420, 1420, 1327, 1420, + /* 11840 */ 1420, 1327, 1327, 1419, 1419, 1419, 1419, 1419, 1419, 1419, + /* 11850 */ 1419, 1419, 1419, 1419, 1419, 1419, 1419, 1327, 1419, 1419, + /* 11860 */ 1419, 1419, 1419, 1419, 1419, 1327, 1419, 1419, 1419, 1419, + /* 11870 */ 1327, 1419, 1419, 1327, 1327, 1327, 1327, 1327, 468, 1327, + /* 11880 */ 1327, 343, 342, 1327, 1327, 1327, 1419, 1419, 263, 1419, + /* 11890 */ 1419, 1327, 1327, 217, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11900 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1420, 1327, 1327, + /* 11910 */ 1420, 1420, 1327, 1327, 1420, 1327, 1327, 1327, 1327, 1327, + /* 11920 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11930 */ 1327, 1327, 1420, 1327, 1327, 581, 580, 1327, 19, 1327, + /* 11940 */ 83, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11950 */ 1327, 749, 690, 1327, 1327, 1327, 1420, 1419, 18, 1420, + /* 11960 */ 1419, 1419, 1327, 1327, 1419, 1327, 1327, 1327, 1327, 1327, + /* 11970 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 11980 */ 1327, 1327, 1419, 1327, 1327, 1327, 1327, 1327, 1327, 136, + /* 11990 */ 1327, 573, 1327, 1327, 1327, 1327, 1327, 1327, 736, 1327, + /* 12000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1419, 1327, 1327, 1419, + /* 12010 */ 1327, 1327, 1418, 1418, 1418, 1418, 1418, 1418, 1418, 1418, + /* 12020 */ 1418, 1418, 1418, 1418, 1418, 1418, 1327, 1418, 1418, 1418, + /* 12030 */ 1418, 1418, 1418, 1418, 1327, 1418, 1418, 1418, 1418, 1327, + /* 12040 */ 1418, 1418, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12050 */ 1327, 1327, 1327, 1327, 1327, 1418, 1418, 1327, 1418, 1418, + /* 12060 */ 1327, 1327, 1417, 1417, 1417, 1417, 1417, 1417, 1417, 1417, + /* 12070 */ 1417, 1417, 1417, 1417, 1417, 1417, 1327, 1417, 1417, 1417, + /* 12080 */ 1417, 1417, 1417, 1417, 1327, 1417, 1417, 1417, 1417, 1327, + /* 12090 */ 1417, 1417, 1327, 1327, 1327, 1327, 1327, 468, 1327, 1327, + /* 12100 */ 343, 342, 1327, 1327, 1327, 1417, 1417, 263, 1417, 1417, + /* 12110 */ 1327, 1327, 217, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12120 */ 1327, 1327, 1327, 1327, 1327, 1327, 1418, 1327, 1327, 1418, + /* 12130 */ 1418, 1327, 1327, 1418, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12140 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12150 */ 1327, 1418, 1327, 1327, 581, 580, 1327, 19, 1327, 83, + /* 12160 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12170 */ 749, 1327, 1327, 1327, 1327, 1418, 1417, 18, 1418, 1417, + /* 12180 */ 1417, 1327, 1327, 1417, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12200 */ 1327, 1417, 1327, 1327, 1327, 1327, 1327, 1327, 136, 739, + /* 12210 */ 573, 1327, 1327, 1327, 1327, 1327, 1327, 736, 1327, 1327, + /* 12220 */ 1327, 1327, 1327, 1327, 1327, 1417, 1327, 1327, 1417, 1327, + /* 12230 */ 1327, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, 1416, + /* 12240 */ 1416, 1416, 1416, 1416, 1416, 1327, 1416, 1416, 1416, 1416, + /* 12250 */ 1416, 1416, 1416, 1327, 1416, 1416, 1416, 1416, 1327, 1416, + /* 12260 */ 1416, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12270 */ 1327, 1327, 1327, 1327, 1416, 1416, 1327, 1416, 1416, 1327, + /* 12280 */ 1327, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, 1415, + /* 12290 */ 1415, 1415, 1415, 1415, 1415, 1327, 1415, 1415, 1415, 1415, + /* 12300 */ 1415, 1415, 1415, 1327, 1415, 1415, 1415, 1415, 1327, 1415, + /* 12310 */ 1415, 1327, 1327, 1327, 1327, 1327, 468, 1327, 1327, 343, + /* 12320 */ 342, 1327, 1327, 1327, 1415, 1415, 263, 1415, 1415, 1327, + /* 12330 */ 1327, 217, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12340 */ 1327, 1327, 1327, 1327, 1327, 1416, 1327, 1327, 1416, 1416, + /* 12350 */ 1327, 1327, 1416, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12370 */ 1416, 1327, 1327, 581, 580, 1327, 19, 1327, 83, 750, + /* 12380 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 749, + /* 12390 */ 1327, 1327, 1327, 1327, 1416, 1415, 18, 1416, 1415, 1415, + /* 12400 */ 1327, 1327, 1415, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12410 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12420 */ 1415, 1327, 1327, 1327, 1327, 1327, 1327, 136, 1327, 573, + /* 12430 */ 1327, 1327, 1327, 1327, 1327, 1327, 736, 1327, 1327, 1327, + /* 12440 */ 1327, 1327, 1327, 1327, 1415, 1327, 1327, 1415, 1327, 1327, + /* 12450 */ 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, 1414, + /* 12460 */ 1414, 1414, 1414, 1414, 1327, 1414, 1414, 1414, 1414, 1414, + /* 12470 */ 1414, 1414, 1327, 1414, 1414, 1414, 1414, 1327, 1414, 1414, + /* 12480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12490 */ 1327, 1327, 1327, 1414, 1414, 1327, 1414, 1414, 1327, 1327, + /* 12500 */ 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, 1413, + /* 12510 */ 1413, 1413, 1413, 1413, 1327, 1413, 1413, 1413, 1413, 1413, + /* 12520 */ 1413, 1413, 1327, 1413, 1413, 1413, 1413, 1327, 1413, 1413, + /* 12530 */ 1327, 1327, 1327, 1327, 1327, 468, 1327, 1327, 343, 342, + /* 12540 */ 1327, 1327, 1327, 1413, 1413, 263, 1413, 1413, 1327, 1327, + /* 12550 */ 217, 1327, 753, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12560 */ 1327, 1327, 1327, 1327, 1414, 1327, 1327, 1414, 1414, 1327, + /* 12570 */ 1327, 1414, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12580 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1414, + /* 12590 */ 1327, 1327, 581, 580, 1327, 19, 1327, 83, 1327, 1327, + /* 12600 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 749, 1327, + /* 12610 */ 1327, 1327, 1327, 1414, 1413, 18, 1414, 1413, 1413, 1327, + /* 12620 */ 1327, 1413, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1413, + /* 12640 */ 1327, 1327, 1327, 1327, 1327, 1327, 136, 1327, 573, 1327, + /* 12650 */ 1327, 1327, 1327, 1327, 1327, 736, 1327, 1327, 1327, 1327, + /* 12660 */ 1327, 1327, 1327, 1413, 1327, 1327, 1413, 1327, 1327, 1412, + /* 12670 */ 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, 1412, + /* 12680 */ 1412, 1412, 1412, 1327, 1412, 1412, 1412, 1412, 1412, 1412, + /* 12690 */ 1412, 1327, 1412, 1412, 1412, 1412, 1327, 1412, 1412, 1327, + /* 12700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12710 */ 1327, 1327, 1412, 1412, 1327, 1412, 1412, 1327, 1327, 1411, + /* 12720 */ 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, 1411, + /* 12730 */ 1411, 1411, 1411, 1327, 1411, 1411, 1411, 1411, 1411, 1411, + /* 12740 */ 1411, 1327, 1411, 1411, 1411, 1411, 1327, 1411, 1411, 1327, + /* 12750 */ 1327, 1327, 1327, 1327, 468, 1327, 1327, 343, 342, 1327, + /* 12760 */ 1327, 1327, 1411, 1411, 263, 1411, 1411, 1327, 1327, 217, + /* 12770 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12780 */ 1327, 1327, 1327, 1412, 1327, 1327, 1412, 1412, 1327, 1327, + /* 12790 */ 1412, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1412, 1327, + /* 12810 */ 1327, 581, 580, 1327, 19, 1327, 83, 1327, 1327, 1327, + /* 12820 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 749, 1327, 1327, + /* 12830 */ 1327, 1327, 1412, 1411, 18, 1412, 1411, 1411, 1327, 1327, + /* 12840 */ 1411, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12850 */ 1327, 1327, 1327, 1327, 1327, 729, 1327, 1327, 1411, 1327, + /* 12860 */ 1327, 1327, 1327, 1327, 1327, 136, 1327, 573, 1327, 1327, + /* 12870 */ 1327, 1327, 1327, 1327, 736, 1327, 1327, 1327, 1327, 1327, + /* 12880 */ 1327, 1327, 1411, 1327, 1327, 1411, 1327, 1327, 1410, 1410, + /* 12890 */ 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + /* 12900 */ 1410, 1410, 1327, 1410, 1410, 1410, 1410, 1410, 1410, 1410, + /* 12910 */ 1327, 1410, 1410, 1410, 1410, 1327, 1410, 1410, 1327, 1327, + /* 12920 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 12930 */ 1327, 1410, 1410, 1327, 1410, 1410, 1327, 1327, 1409, 1409, + /* 12940 */ 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, 1409, + /* 12950 */ 1409, 1409, 1327, 1409, 1409, 1409, 1409, 1409, 1409, 1409, + /* 12960 */ 1327, 1409, 1409, 1409, 1409, 1327, 1409, 1409, 1327, 1327, + /* 12970 */ 1327, 1327, 1327, 468, 1327, 1327, 343, 342, 1327, 1327, + /* 12980 */ 1327, 1409, 1409, 263, 1409, 1409, 1327, 1327, 217, 1327, + /* 12990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13000 */ 1327, 1327, 1410, 1327, 1327, 1410, 1410, 1327, 1327, 1410, + /* 13010 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1410, 1327, 1327, + /* 13030 */ 581, 580, 1327, 19, 1327, 83, 1327, 1327, 1327, 1327, + /* 13040 */ 1327, 1327, 1327, 1327, 1327, 1327, 749, 1327, 1327, 1327, + /* 13050 */ 1327, 1410, 1409, 18, 1410, 1409, 1409, 1327, 1327, 1409, + /* 13060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1409, 1327, 1327, + /* 13080 */ 1327, 1327, 1327, 1327, 136, 1327, 573, 1327, 1327, 1327, + /* 13090 */ 1327, 1327, 1327, 736, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13100 */ 1327, 1409, 1327, 1327, 1409, 1327, 1327, 1408, 1408, 1408, + /* 13110 */ 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1408, + /* 13120 */ 1408, 1327, 1408, 1408, 1408, 1408, 1408, 1408, 1408, 1327, + /* 13130 */ 1408, 1408, 1408, 1408, 1327, 1408, 1408, 1327, 1327, 1327, + /* 13140 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13150 */ 1408, 1408, 1327, 1408, 1408, 1327, 1327, 1407, 1407, 1407, + /* 13160 */ 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1407, + /* 13170 */ 1407, 1327, 1407, 1407, 1407, 1407, 1407, 1407, 1407, 1327, + /* 13180 */ 1407, 1407, 1407, 1407, 1327, 1407, 1407, 1327, 1327, 1327, + /* 13190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13200 */ 1407, 1407, 1327, 1407, 1407, 1327, 1327, 1327, 1327, 1327, + /* 13210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 439, 296, + /* 13220 */ 1327, 1408, 1327, 1327, 1408, 1408, 1327, 1327, 1408, 1327, + /* 13230 */ 1327, 1327, 1327, 1327, 1327, 240, 1327, 99, 1327, 205, + /* 13240 */ 182, 539, 1327, 1327, 1327, 1327, 1408, 1327, 1327, 1327, + /* 13250 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13270 */ 1408, 1407, 1327, 1408, 1407, 1407, 1327, 1327, 1407, 1327, + /* 13280 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13290 */ 1327, 1327, 1327, 202, 201, 1327, 1407, 1327, 1327, 1327, + /* 13300 */ 1327, 1327, 1327, 538, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13310 */ 1327, 1327, 1327, 1327, 1327, 537, 1327, 536, 1327, 1327, + /* 13320 */ 1407, 1327, 1327, 1407, 481, 1327, 1406, 1406, 1406, 1406, + /* 13330 */ 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1406, + /* 13340 */ 181, 1406, 1406, 1406, 1406, 1406, 1406, 1406, 1327, 1406, + /* 13350 */ 1406, 1406, 1406, 1327, 1406, 1406, 1327, 1327, 1327, 1327, + /* 13360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1406, + /* 13370 */ 1406, 1327, 1406, 1406, 1327, 1327, 1405, 1405, 1405, 1405, + /* 13380 */ 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1405, + /* 13390 */ 1327, 1405, 1405, 1405, 1405, 1405, 1405, 1405, 1327, 1405, + /* 13400 */ 1405, 1405, 1405, 1327, 1405, 1405, 1327, 1327, 1327, 1327, + /* 13410 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1405, + /* 13420 */ 1405, 1327, 1405, 1405, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 439, 296, 1327, + /* 13440 */ 1406, 1327, 1327, 1406, 1406, 1327, 1327, 1406, 1327, 1327, + /* 13450 */ 1327, 1327, 1327, 1327, 240, 1327, 102, 1327, 205, 182, + /* 13460 */ 539, 1327, 1327, 1327, 1327, 1406, 1327, 1327, 1327, 1327, + /* 13470 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1406, + /* 13490 */ 1405, 1327, 1406, 1405, 1405, 1327, 1327, 1405, 1327, 1327, + /* 13500 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13510 */ 1327, 1327, 202, 201, 1327, 1405, 1327, 1327, 1327, 1327, + /* 13520 */ 1327, 1327, 538, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13530 */ 1327, 1327, 1327, 1327, 537, 1327, 536, 1327, 1327, 1405, + /* 13540 */ 1327, 1327, 1405, 481, 1327, 1404, 1404, 1404, 1404, 1404, + /* 13550 */ 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1404, 181, + /* 13560 */ 1404, 1404, 1404, 1404, 1404, 1404, 1404, 1327, 1404, 1404, + /* 13570 */ 1404, 1404, 1327, 1404, 1404, 1327, 1327, 1327, 1327, 1327, + /* 13580 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1404, 1404, + /* 13590 */ 1327, 1404, 1404, 1327, 1327, 1403, 1403, 1403, 1403, 1403, + /* 13600 */ 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1327, + /* 13610 */ 1403, 1403, 1403, 1403, 1403, 1403, 1403, 1327, 1403, 1403, + /* 13620 */ 1403, 1403, 1327, 1403, 1403, 1327, 1327, 1327, 1327, 1327, + /* 13630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1403, 1403, + /* 13640 */ 1327, 1403, 1403, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13650 */ 1327, 1327, 1327, 1327, 1327, 1327, 439, 296, 1327, 1404, + /* 13660 */ 1327, 1327, 1404, 1404, 1327, 1327, 1404, 1327, 1327, 1327, + /* 13670 */ 1327, 1327, 1327, 240, 1327, 104, 1327, 205, 182, 539, + /* 13680 */ 1327, 1327, 1327, 1327, 1404, 1327, 1327, 1327, 1327, 1327, + /* 13690 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1404, 1403, + /* 13710 */ 1327, 1404, 1403, 1403, 1327, 1327, 1403, 1327, 1327, 1327, + /* 13720 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13730 */ 1327, 202, 201, 1327, 1403, 1327, 1327, 1327, 1327, 1327, + /* 13740 */ 1327, 538, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13750 */ 1327, 1327, 1327, 537, 1327, 536, 1327, 1327, 1403, 1327, + /* 13760 */ 1327, 1403, 481, 1327, 1402, 1402, 1402, 1402, 1402, 1402, + /* 13770 */ 1402, 1402, 1402, 1402, 1402, 1402, 1402, 1402, 181, 1402, + /* 13780 */ 1402, 1402, 1402, 1402, 1402, 1402, 1327, 1402, 1402, 1402, + /* 13790 */ 1402, 1327, 1402, 1402, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1402, 1402, 1327, + /* 13810 */ 1402, 1402, 1327, 1327, 1401, 1401, 1401, 1401, 1401, 1401, + /* 13820 */ 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1401, 1327, 1401, + /* 13830 */ 1401, 1401, 1401, 1401, 1401, 1401, 1327, 1401, 1401, 1401, + /* 13840 */ 1401, 1327, 1401, 1401, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13850 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1401, 1401, 1327, + /* 13860 */ 1401, 1401, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13870 */ 1327, 1327, 1327, 1327, 1327, 439, 296, 1327, 1402, 1327, + /* 13880 */ 1327, 1402, 1402, 1327, 1327, 1402, 1327, 1327, 1327, 1327, + /* 13890 */ 1327, 1327, 240, 96, 1327, 1327, 205, 182, 539, 1327, + /* 13900 */ 1327, 1327, 1327, 1402, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13910 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13920 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1402, 1401, 1327, + /* 13930 */ 1402, 1401, 1401, 1327, 1327, 1401, 1327, 1327, 1327, 1327, + /* 13940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13950 */ 202, 201, 1327, 1401, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13960 */ 538, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 13970 */ 1327, 1327, 537, 1327, 536, 1327, 1327, 1401, 1327, 1327, + /* 13980 */ 1401, 481, 1327, 1400, 1400, 1400, 1400, 1400, 1400, 1400, + /* 13990 */ 1400, 1400, 1400, 1400, 1400, 1400, 1400, 181, 1400, 1400, + /* 14000 */ 1400, 1400, 1400, 1400, 1400, 1327, 1400, 1400, 1400, 1400, + /* 14010 */ 1327, 1400, 1400, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1400, 1400, 1327, 1400, + /* 14030 */ 1400, 1327, 1327, 1399, 1399, 1399, 1399, 1399, 1399, 1399, + /* 14040 */ 1399, 1399, 1399, 1399, 1399, 1399, 1399, 1327, 1399, 1399, + /* 14050 */ 1399, 1399, 1399, 1399, 1399, 1327, 1399, 1399, 1399, 1399, + /* 14060 */ 1327, 1399, 1399, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1399, 1399, 1327, 1399, + /* 14080 */ 1399, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14090 */ 1327, 1327, 1327, 1327, 439, 296, 1327, 1400, 1327, 1327, + /* 14100 */ 1400, 1400, 1327, 1327, 1400, 1327, 1327, 1327, 1327, 1327, + /* 14110 */ 1327, 240, 1327, 1327, 1327, 205, 182, 539, 1327, 1327, + /* 14120 */ 1327, 1327, 1400, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14140 */ 1327, 1327, 1327, 1327, 1327, 1327, 1400, 1399, 1327, 1400, + /* 14150 */ 1399, 1399, 1327, 1327, 1399, 1327, 1327, 1327, 1327, 1327, + /* 14160 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 202, + /* 14170 */ 201, 1327, 1399, 1327, 1327, 1327, 1327, 1327, 1327, 538, + /* 14180 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14190 */ 1327, 537, 1327, 536, 1327, 1327, 1399, 1327, 1327, 1399, + /* 14200 */ 481, 1327, 1398, 1398, 1398, 1398, 1398, 1398, 1398, 1398, + /* 14210 */ 1398, 1398, 1398, 1398, 1398, 1398, 181, 1398, 1398, 1398, + /* 14220 */ 1398, 1398, 1398, 1398, 1327, 1398, 1398, 1398, 1398, 1327, + /* 14230 */ 1398, 1398, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14240 */ 1327, 1327, 1327, 1327, 1327, 1398, 1398, 1327, 1398, 1398, + /* 14250 */ 1327, 1327, 1397, 1397, 1397, 1397, 1397, 1397, 1397, 1397, + /* 14260 */ 1397, 1397, 1397, 1397, 1397, 1397, 1327, 1397, 1397, 1397, + /* 14270 */ 1397, 1397, 1397, 1397, 1327, 1397, 1397, 1397, 1397, 1327, + /* 14280 */ 1397, 1397, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14290 */ 1327, 1327, 1327, 1327, 1327, 1397, 1397, 1327, 1397, 1397, + /* 14300 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1398, 1327, 1327, 1398, + /* 14320 */ 1398, 1327, 1327, 1398, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14330 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14340 */ 1327, 1398, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14350 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14360 */ 1327, 1327, 1327, 1327, 1327, 1398, 1397, 1327, 1398, 1397, + /* 14370 */ 1397, 1327, 1327, 1397, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14380 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14390 */ 1327, 1397, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14410 */ 1327, 1327, 1327, 1327, 1327, 1397, 1327, 1327, 1397, 1327, + /* 14420 */ 1327, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, 1396, + /* 14430 */ 1396, 1396, 1396, 1396, 1396, 1327, 1396, 1396, 1396, 1396, + /* 14440 */ 1396, 1396, 1396, 1327, 1396, 1396, 1396, 1396, 1327, 1396, + /* 14450 */ 1396, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14460 */ 1327, 1327, 1327, 1327, 1396, 1396, 1327, 1396, 1396, 1327, + /* 14470 */ 1327, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, 1344, + /* 14480 */ 1344, 1344, 1344, 1344, 1344, 1327, 1344, 1344, 1344, 1344, + /* 14490 */ 1344, 1344, 1344, 1327, 1344, 1344, 1327, 1344, 1327, 1344, + /* 14500 */ 1344, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14510 */ 1327, 1327, 1327, 1327, 1344, 1344, 1327, 1344, 1344, 1327, + /* 14520 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14530 */ 1327, 1327, 1327, 1327, 1327, 1396, 1327, 1327, 1396, 1396, + /* 14540 */ 1327, 1327, 1396, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14550 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14560 */ 1396, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14570 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14580 */ 1327, 1327, 1327, 1327, 1396, 1344, 1327, 1396, 1344, 1344, + /* 14590 */ 1327, 1327, 1344, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14600 */ 439, 296, 1327, 1344, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14610 */ 1344, 621, 1327, 1327, 1327, 1327, 1327, 199, 53, 62, + /* 14620 */ 1327, 198, 182, 539, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14630 */ 1327, 1327, 1327, 1327, 1344, 1327, 1327, 1344, 1327, 1327, + /* 14640 */ 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, 1343, + /* 14650 */ 1343, 1343, 1343, 1343, 1327, 1343, 1343, 1343, 1343, 1343, + /* 14660 */ 1343, 1343, 1327, 1343, 1343, 1327, 1343, 1327, 1343, 1343, + /* 14670 */ 1327, 1327, 1327, 1327, 1327, 197, 196, 480, 477, 1327, + /* 14680 */ 1327, 1327, 1327, 1343, 1343, 538, 1343, 1343, 1327, 1327, + /* 14690 */ 1327, 1327, 1327, 1327, 1343, 1327, 1327, 537, 1327, 536, + /* 14700 */ 1327, 1327, 1327, 1327, 1327, 1327, 481, 1327, 1327, 1327, + /* 14710 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14720 */ 1327, 1327, 181, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14730 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14740 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14750 */ 1327, 1327, 1327, 1327, 1343, 1327, 1327, 1343, 1343, 1327, + /* 14760 */ 1327, 1343, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14770 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1343, + /* 14780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14790 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14800 */ 1327, 1327, 1327, 1343, 1327, 1327, 1343, 1327, 1327, 1342, + /* 14810 */ 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, 1342, + /* 14820 */ 1342, 1342, 1342, 1327, 1342, 1342, 1342, 1342, 1342, 1342, + /* 14830 */ 1342, 1327, 1342, 1342, 1327, 1342, 1327, 1342, 1342, 1327, + /* 14840 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14850 */ 1327, 1327, 1342, 1342, 1327, 1342, 1342, 1327, 1327, 1327, + /* 14860 */ 1327, 1327, 1327, 1342, 1327, 1327, 1327, 1327, 1327, 1619, + /* 14870 */ 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, 1619, + /* 14880 */ 1619, 1619, 1619, 1327, 1619, 1619, 1619, 1619, 1619, 1619, + /* 14890 */ 1619, 1327, 8, 1619, 1327, 1619, 1327, 238, 237, 1327, + /* 14900 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14910 */ 1327, 1327, 1619, 1619, 1327, 1619, 1619, 1327, 1327, 1327, + /* 14920 */ 1327, 1327, 1327, 1342, 1327, 1327, 1342, 1342, 1327, 1327, + /* 14930 */ 1342, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1342, 1327, + /* 14950 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14960 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 14970 */ 1327, 1327, 1342, 1327, 1327, 1342, 1327, 1327, 1327, 1327, + /* 14980 */ 1327, 1327, 1327, 1619, 1327, 1327, 1619, 1619, 1327, 1327, + /* 14990 */ 1619, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1619, 1327, + /* 15010 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15030 */ 1327, 1327, 1619, 1327, 1327, 1619, 1327, 1327, 1375, 1375, + /* 15040 */ 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + /* 15050 */ 1375, 1375, 1327, 1375, 1375, 1375, 1375, 1375, 1375, 1375, + /* 15060 */ 1327, 1375, 1375, 1327, 1375, 1327, 1375, 1375, 1327, 1327, + /* 15070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15080 */ 1327, 1375, 1375, 1327, 1375, 1375, 1327, 1327, 1497, 1497, + /* 15090 */ 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, 1497, + /* 15100 */ 1497, 1497, 1327, 1497, 1497, 1497, 1497, 1497, 1497, 1497, + /* 15110 */ 1327, 1497, 1497, 1327, 1497, 1327, 1497, 1497, 1327, 1327, + /* 15120 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15130 */ 1327, 1497, 1497, 1327, 1497, 1497, 1327, 1327, 1327, 1327, + /* 15140 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15150 */ 1327, 1327, 1375, 1327, 1327, 1375, 1375, 1327, 1327, 1375, + /* 15160 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15170 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1375, 1327, 1327, + /* 15180 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15200 */ 1327, 1375, 1497, 1327, 1375, 1497, 1497, 1327, 1327, 1497, + /* 15210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15220 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1497, 1327, 1327, + /* 15230 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15240 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15250 */ 1327, 1497, 1327, 1327, 1497, 1327, 1327, 1616, 1616, 1616, + /* 15260 */ 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1616, + /* 15270 */ 1616, 1327, 1616, 1616, 1616, 1616, 1616, 1616, 1616, 1327, + /* 15280 */ 1616, 1616, 1327, 1616, 1327, 1616, 1616, 1327, 1327, 1327, + /* 15290 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15300 */ 1616, 1616, 1327, 1616, 1616, 1327, 1327, 1636, 1636, 1636, + /* 15310 */ 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1636, + /* 15320 */ 1636, 1327, 1636, 1636, 1636, 1636, 1636, 1636, 1636, 1327, + /* 15330 */ 1636, 1636, 1327, 1636, 1327, 1636, 1636, 1327, 1327, 1327, + /* 15340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15350 */ 1636, 1636, 1327, 1636, 1636, 1327, 1327, 1327, 1327, 1327, + /* 15360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15370 */ 1327, 1616, 1327, 1327, 1616, 1616, 1327, 1327, 1616, 1327, + /* 15380 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15390 */ 1327, 1327, 1327, 1327, 1327, 1327, 1616, 1327, 1327, 1327, + /* 15400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15410 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15420 */ 1616, 1636, 1327, 1616, 1636, 1636, 1327, 1327, 1636, 1327, + /* 15430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15440 */ 1327, 1327, 1327, 1327, 1327, 1327, 1636, 1327, 1327, 1327, + /* 15450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15470 */ 1636, 1327, 1327, 1636, 1327, 1327, 1635, 1635, 1635, 1635, + /* 15480 */ 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1635, + /* 15490 */ 1327, 1635, 1635, 1635, 1635, 1635, 1635, 1635, 1327, 1635, + /* 15500 */ 1635, 1327, 1635, 1327, 1635, 1635, 1327, 1327, 1327, 1327, + /* 15510 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1635, + /* 15520 */ 1635, 1327, 1635, 1635, 1327, 1327, 1634, 1634, 1634, 1634, + /* 15530 */ 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1634, + /* 15540 */ 1327, 1634, 1634, 1634, 1634, 1634, 1634, 1634, 1327, 1634, + /* 15550 */ 1634, 1327, 1634, 1327, 1634, 1634, 1327, 1327, 1327, 1327, + /* 15560 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1634, + /* 15570 */ 1634, 1327, 1634, 1634, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15580 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15590 */ 1635, 1327, 1327, 1635, 1635, 1327, 1327, 1635, 1327, 1327, + /* 15600 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15610 */ 1327, 1327, 1327, 1327, 1327, 1635, 1327, 1327, 1327, 1327, + /* 15620 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1635, + /* 15640 */ 1634, 1327, 1635, 1634, 1634, 1327, 1327, 1634, 1327, 1327, + /* 15650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15660 */ 1327, 1327, 1327, 1327, 1327, 1634, 1327, 1327, 1327, 1327, + /* 15670 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15680 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1634, + /* 15690 */ 1327, 1327, 1634, 1327, 1327, 1633, 1633, 1633, 1633, 1633, + /* 15700 */ 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1327, + /* 15710 */ 1633, 1633, 1633, 1633, 1633, 1633, 1633, 1327, 1633, 1633, + /* 15720 */ 1327, 1633, 1327, 1633, 1633, 1327, 1327, 1327, 1327, 1327, + /* 15730 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1633, 1633, + /* 15740 */ 1327, 1633, 1633, 1327, 1327, 1632, 1632, 1632, 1632, 1632, + /* 15750 */ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1327, + /* 15760 */ 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1327, 1632, 1632, + /* 15770 */ 1327, 1632, 1327, 1632, 1632, 1327, 1327, 1327, 1327, 1327, + /* 15780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1632, 1632, + /* 15790 */ 1327, 1632, 1632, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1633, + /* 15810 */ 1327, 1327, 1633, 1633, 1327, 1327, 1633, 1327, 1327, 1327, + /* 15820 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15830 */ 1327, 1327, 1327, 1327, 1633, 1327, 1327, 1327, 1327, 1327, + /* 15840 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15850 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1633, 1632, + /* 15860 */ 1327, 1633, 1632, 1632, 1327, 1327, 1632, 1327, 1327, 1327, + /* 15870 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15880 */ 1327, 1327, 1327, 1327, 1632, 1327, 1327, 1327, 1327, 1327, + /* 15890 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15900 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1632, 1327, + /* 15910 */ 1327, 1632, 1327, 1327, 1499, 1499, 1499, 1499, 1499, 1499, + /* 15920 */ 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1499, 1327, 1499, + /* 15930 */ 1499, 1499, 1499, 1499, 1499, 1499, 1327, 1499, 1499, 1327, + /* 15940 */ 1499, 1327, 1499, 1499, 1327, 1327, 1327, 1327, 1327, 1327, + /* 15950 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1499, 1499, 1327, + /* 15960 */ 1499, 1499, 1327, 1327, 1446, 1446, 1446, 1446, 1446, 1446, + /* 15970 */ 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1446, 1327, 1446, + /* 15980 */ 1446, 1446, 1446, 1446, 1446, 1446, 1327, 1446, 1446, 1327, + /* 15990 */ 1446, 1327, 1446, 1446, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1446, 1446, 1327, + /* 16010 */ 1446, 1446, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1499, 1327, + /* 16030 */ 1327, 1499, 1499, 1327, 1327, 1499, 1327, 1327, 1327, 1327, + /* 16040 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16050 */ 1327, 1327, 1327, 1499, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1499, 1446, 1327, + /* 16080 */ 1499, 1446, 1446, 1327, 1327, 1446, 1327, 1327, 1327, 1327, + /* 16090 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16100 */ 1327, 1327, 1327, 1446, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16120 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1446, 1327, 1327, + /* 16130 */ 1446, 1327, 1327, 1445, 1445, 1445, 1445, 1445, 1445, 1445, + /* 16140 */ 1445, 1445, 1445, 1445, 1445, 1445, 1445, 1327, 1445, 1445, + /* 16150 */ 1445, 1445, 1445, 1445, 1445, 1327, 1445, 1445, 1327, 1445, + /* 16160 */ 1327, 1445, 1445, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16170 */ 1327, 1327, 1327, 1327, 1327, 1327, 1445, 1445, 1327, 1445, + /* 16180 */ 1445, 1327, 1327, 1395, 1395, 1395, 1395, 1395, 1395, 1395, + /* 16190 */ 1395, 1395, 1395, 1395, 1395, 1395, 1395, 1327, 1395, 1395, + /* 16200 */ 1395, 1395, 1395, 1395, 1395, 1327, 1395, 1395, 1327, 1395, + /* 16210 */ 1327, 1395, 1395, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16220 */ 1327, 1327, 1327, 1327, 1327, 1327, 1395, 1395, 1327, 1395, + /* 16230 */ 1395, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16240 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1445, 1327, 1327, + /* 16250 */ 1445, 1445, 1327, 1327, 1445, 1327, 1327, 1327, 1327, 1327, + /* 16260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16270 */ 1327, 1327, 1445, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16280 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16290 */ 1327, 1327, 1327, 1327, 1327, 1327, 1445, 1395, 1327, 1445, + /* 16300 */ 1395, 1395, 1327, 1327, 1395, 1327, 1327, 1327, 1327, 1327, + /* 16310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16320 */ 1327, 1327, 1395, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16330 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1395, 1327, 1327, 1395, + /* 16350 */ 1327, 1327, 1394, 1394, 1394, 1394, 1394, 1394, 1394, 1394, + /* 16360 */ 1394, 1394, 1394, 1394, 1394, 1394, 1327, 1394, 1394, 1394, + /* 16370 */ 1394, 1394, 1394, 1394, 1327, 1394, 1394, 1327, 1394, 1327, + /* 16380 */ 1394, 1394, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16390 */ 1327, 1327, 1327, 1327, 1327, 1394, 1394, 1327, 1394, 1394, + /* 16400 */ 1327, 1327, 1393, 1393, 1393, 1393, 1393, 1393, 1393, 1393, + /* 16410 */ 1393, 1393, 1393, 1393, 1393, 1393, 1327, 1393, 1393, 1393, + /* 16420 */ 1393, 1393, 1393, 1393, 1327, 1393, 1393, 1327, 1393, 1327, + /* 16430 */ 1393, 1393, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16440 */ 1327, 1327, 1327, 1327, 1327, 1393, 1393, 1327, 1393, 1393, + /* 16450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1394, 1327, 1327, 1394, + /* 16470 */ 1394, 1327, 1327, 1394, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16490 */ 1327, 1394, 1327, 1327, 1327, 576, 1327, 1327, 308, 307, + /* 16500 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16510 */ 1327, 1327, 1327, 1327, 1327, 1394, 1393, 1327, 1394, 1393, + /* 16520 */ 1393, 1327, 1327, 1393, 1327, 1327, 1327, 1327, 86, 412, + /* 16530 */ 1327, 1327, 254, 178, 1327, 1327, 253, 1327, 1327, 1327, + /* 16540 */ 1327, 1393, 1327, 1327, 1327, 1327, 1327, 1327, 578, 1327, + /* 16550 */ 252, 1327, 251, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16560 */ 1327, 1327, 1327, 1327, 1327, 1393, 1327, 1327, 1393, 1327, + /* 16570 */ 1327, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, 1392, + /* 16580 */ 1392, 1392, 1392, 1392, 1392, 250, 1392, 1392, 1392, 1392, + /* 16590 */ 1392, 1392, 1392, 1327, 1392, 1392, 1327, 1392, 1327, 1392, + /* 16600 */ 1392, 1327, 1327, 1327, 249, 1327, 271, 732, 576, 579, + /* 16610 */ 571, 308, 307, 1327, 1392, 1392, 1327, 1392, 1392, 1327, + /* 16620 */ 1327, 309, 1327, 844, 311, 308, 307, 352, 389, 350, + /* 16630 */ 1327, 1327, 1327, 1327, 248, 1327, 1327, 1327, 1327, 375, + /* 16640 */ 1327, 149, 413, 247, 1327, 254, 178, 1327, 1327, 253, + /* 16650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 246, 1327, 245, + /* 16660 */ 347, 578, 1327, 252, 1327, 251, 1327, 1327, 1327, 1327, + /* 16670 */ 1327, 1327, 1327, 353, 310, 244, 570, 1327, 1327, 1327, + /* 16680 */ 1327, 1327, 1327, 1327, 349, 1392, 1327, 1327, 1392, 1392, + /* 16690 */ 1327, 1327, 1392, 1327, 1327, 1327, 1327, 1327, 250, 1327, + /* 16700 */ 1327, 1327, 1327, 1327, 374, 1327, 1327, 1327, 1327, 1327, + /* 16710 */ 1392, 373, 1327, 1327, 1327, 393, 388, 249, 1327, 348, + /* 16720 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16730 */ 1327, 1327, 1327, 1327, 1392, 1327, 1327, 1392, 1327, 1327, + /* 16740 */ 1327, 1327, 1327, 372, 1327, 1327, 1327, 248, 1327, 1327, + /* 16750 */ 377, 385, 384, 383, 1327, 1327, 247, 1327, 1327, 1327, + /* 16760 */ 1327, 1327, 804, 1327, 1327, 1327, 346, 1327, 369, 172, + /* 16770 */ 246, 806, 245, 309, 371, 844, 311, 308, 307, 352, + /* 16780 */ 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, 244, 1327, + /* 16790 */ 1327, 375, 1327, 149, 1327, 1327, 1327, 1327, 1327, 174, + /* 16800 */ 396, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16810 */ 1327, 1327, 347, 173, 1327, 1327, 439, 296, 1327, 1327, + /* 16820 */ 1327, 1327, 1327, 1327, 1327, 353, 310, 621, 1327, 1327, + /* 16830 */ 1327, 1327, 1327, 199, 58, 1327, 349, 198, 182, 539, + /* 16840 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 802, 1327, + /* 16850 */ 1327, 1327, 1327, 1327, 1327, 1327, 374, 1327, 1327, 1327, + /* 16860 */ 1327, 1327, 1327, 373, 1327, 1327, 1327, 393, 388, 1327, + /* 16870 */ 1327, 348, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16880 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16890 */ 1327, 197, 196, 480, 477, 372, 1327, 1327, 1327, 1327, + /* 16900 */ 1327, 538, 377, 385, 384, 383, 1327, 1327, 1327, 1327, + /* 16910 */ 1327, 1327, 1327, 537, 1327, 536, 804, 1327, 346, 1327, + /* 16920 */ 369, 172, 481, 1327, 1327, 806, 371, 309, 1327, 844, + /* 16930 */ 311, 308, 307, 352, 389, 350, 1327, 1327, 181, 1327, + /* 16940 */ 1327, 1327, 1327, 1327, 1327, 375, 1327, 149, 1327, 1327, + /* 16950 */ 1327, 174, 396, 1327, 1327, 1327, 309, 1327, 1327, 345, + /* 16960 */ 308, 307, 352, 1327, 350, 173, 347, 1327, 1327, 1327, + /* 16970 */ 1327, 1327, 3, 1327, 1327, 1327, 1327, 1327, 1327, 353, + /* 16980 */ 310, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 16990 */ 349, 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, + /* 17000 */ 1327, 1327, 803, 1327, 1327, 1327, 1327, 1327, 353, 310, + /* 17010 */ 374, 1327, 1327, 1327, 1327, 541, 1327, 373, 1327, 349, + /* 17020 */ 1327, 393, 388, 1327, 1327, 348, 309, 1327, 844, 311, + /* 17030 */ 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, 1327, + /* 17040 */ 1327, 1327, 667, 650, 375, 1327, 149, 1327, 1327, 372, + /* 17050 */ 1327, 1327, 1327, 1327, 348, 1327, 377, 385, 384, 383, + /* 17060 */ 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, + /* 17070 */ 1327, 1327, 346, 1327, 369, 172, 1327, 1327, 353, 310, + /* 17080 */ 371, 1327, 1327, 1327, 1327, 377, 385, 384, 383, 349, + /* 17090 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17100 */ 1327, 346, 1327, 363, 172, 174, 396, 1327, 1327, 374, + /* 17110 */ 1327, 1327, 1327, 1327, 653, 1327, 373, 1327, 1327, 173, + /* 17120 */ 393, 388, 1327, 1327, 348, 309, 1327, 844, 311, 308, + /* 17130 */ 307, 352, 389, 350, 1327, 1327, 1327, 1327, 575, 659, + /* 17140 */ 1327, 1327, 1327, 375, 1327, 149, 1327, 1327, 372, 1327, + /* 17150 */ 1327, 1327, 1327, 1327, 1327, 377, 385, 384, 383, 1327, + /* 17160 */ 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, + /* 17170 */ 1327, 346, 1327, 369, 172, 1327, 1327, 353, 310, 371, + /* 17180 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, + /* 17190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17200 */ 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, 374, 1327, + /* 17210 */ 1327, 1327, 1327, 653, 1327, 373, 1327, 1327, 173, 393, + /* 17220 */ 388, 1327, 1327, 348, 309, 1327, 844, 311, 308, 307, + /* 17230 */ 352, 389, 350, 1327, 1327, 1327, 1327, 577, 659, 1327, + /* 17240 */ 1327, 1327, 375, 1327, 149, 1327, 1327, 372, 1327, 1327, + /* 17250 */ 1327, 1327, 1327, 1327, 377, 385, 384, 383, 1327, 1327, + /* 17260 */ 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17270 */ 346, 1327, 369, 172, 1327, 1327, 353, 310, 371, 1327, + /* 17280 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, + /* 17290 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17300 */ 1327, 1327, 1327, 174, 396, 1327, 1327, 374, 1327, 1327, + /* 17310 */ 1327, 1327, 1327, 1327, 373, 1327, 1327, 173, 393, 388, + /* 17320 */ 1327, 1327, 348, 309, 1327, 844, 311, 308, 307, 352, + /* 17330 */ 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17340 */ 1327, 375, 1327, 428, 1327, 1327, 372, 1327, 1327, 1327, + /* 17350 */ 1327, 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, + /* 17360 */ 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, 1327, 346, + /* 17370 */ 1327, 369, 172, 658, 1327, 353, 310, 371, 1327, 1327, + /* 17380 */ 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, + /* 17390 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17400 */ 1327, 1327, 174, 396, 1327, 1327, 374, 1327, 1327, 1327, + /* 17410 */ 1327, 1327, 1327, 373, 1327, 1327, 173, 393, 388, 1327, + /* 17420 */ 1327, 348, 309, 1327, 844, 311, 308, 307, 352, 389, + /* 17430 */ 350, 1327, 1327, 1327, 1327, 1327, 1327, 841, 1327, 840, + /* 17440 */ 375, 1327, 428, 1327, 1327, 372, 1327, 1327, 1327, 1327, + /* 17450 */ 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, + /* 17460 */ 1327, 347, 1327, 1327, 1327, 1327, 1327, 1327, 346, 1327, + /* 17470 */ 369, 172, 658, 1327, 353, 310, 371, 1327, 1327, 1327, + /* 17480 */ 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, 1327, + /* 17490 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17500 */ 1327, 174, 396, 1327, 1327, 374, 1327, 1327, 1327, 1327, + /* 17510 */ 653, 1327, 373, 1327, 1327, 173, 393, 388, 1327, 1327, + /* 17520 */ 348, 309, 1327, 844, 311, 308, 307, 352, 389, 350, + /* 17530 */ 1327, 1327, 1327, 1327, 660, 659, 657, 656, 1327, 375, + /* 17540 */ 1327, 149, 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, + /* 17550 */ 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, 1327, + /* 17560 */ 347, 1327, 1327, 1327, 1327, 1327, 1327, 346, 1327, 369, + /* 17570 */ 172, 1327, 1327, 353, 310, 371, 1327, 1327, 1327, 1327, + /* 17580 */ 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, + /* 17590 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17600 */ 174, 396, 1327, 1327, 374, 1327, 1327, 1327, 1327, 653, + /* 17610 */ 1327, 373, 1327, 1327, 173, 393, 388, 1327, 1327, 348, + /* 17620 */ 309, 1327, 844, 311, 308, 307, 352, 389, 350, 1327, + /* 17630 */ 1327, 1327, 1327, 662, 659, 1327, 1327, 1327, 375, 1327, + /* 17640 */ 149, 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17650 */ 377, 385, 384, 383, 1327, 1327, 1327, 1327, 1327, 347, + /* 17660 */ 1327, 1327, 647, 645, 1327, 1327, 346, 1327, 369, 172, + /* 17670 */ 1327, 1327, 353, 310, 371, 1327, 1327, 1327, 1327, 1327, + /* 17680 */ 1327, 1327, 1327, 349, 649, 673, 672, 671, 670, 1327, + /* 17690 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, + /* 17700 */ 396, 636, 1327, 374, 1327, 1327, 534, 1327, 533, 1327, + /* 17710 */ 373, 1327, 1327, 173, 393, 388, 1327, 1327, 348, 646, + /* 17720 */ 648, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17730 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17740 */ 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, + /* 17750 */ 385, 384, 383, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17760 */ 1327, 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 1327, + /* 17770 */ 1327, 1327, 1327, 371, 1327, 1327, 1327, 1327, 532, 1327, + /* 17780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17790 */ 1327, 1327, 1327, 1327, 1327, 1327, 531, 1327, 174, 396, + /* 17800 */ 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17810 */ 1327, 1327, 173, 1327, 529, 1327, 1327, 1327, 1361, 1361, + /* 17820 */ 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + /* 17830 */ 1361, 1361, 1327, 1361, 1361, 1361, 1361, 1361, 1361, 1361, + /* 17840 */ 528, 1327, 1361, 309, 1361, 1327, 345, 308, 307, 352, + /* 17850 */ 1327, 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17860 */ 1327, 1361, 1361, 1327, 1361, 1361, 1327, 1327, 1360, 1360, + /* 17870 */ 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + /* 17880 */ 1360, 1360, 347, 1360, 1360, 1360, 1360, 1360, 1360, 1360, + /* 17890 */ 1327, 1327, 1360, 1327, 1360, 353, 310, 1327, 1327, 1327, + /* 17900 */ 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, + /* 17910 */ 1327, 1360, 1360, 1327, 1360, 1360, 1327, 1327, 1327, 1327, + /* 17920 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17930 */ 1327, 1327, 1361, 1327, 1327, 1361, 1361, 1327, 1327, 1361, + /* 17940 */ 1327, 348, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17950 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1361, 1327, 1327, + /* 17960 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 17970 */ 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, + /* 17980 */ 1327, 1361, 1360, 1327, 1361, 1360, 1360, 1327, 346, 1360, + /* 17990 */ 362, 172, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1360, 1327, 1327, + /* 18010 */ 1327, 1327, 309, 1327, 1327, 345, 308, 307, 352, 1327, + /* 18020 */ 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18030 */ 1327, 1360, 1327, 1327, 1360, 1327, 1327, 1467, 1467, 1467, + /* 18040 */ 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1467, + /* 18050 */ 1467, 347, 1467, 1467, 1467, 1467, 1467, 1467, 1467, 1327, + /* 18060 */ 1327, 1467, 1327, 1467, 353, 310, 1327, 1327, 1327, 1327, + /* 18070 */ 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, 1327, + /* 18080 */ 1467, 1467, 1327, 1467, 1467, 1327, 1327, 1717, 1717, 1717, + /* 18090 */ 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1717, + /* 18100 */ 1717, 1327, 1717, 1717, 1717, 1717, 1717, 1717, 1717, 1327, + /* 18110 */ 348, 1717, 1327, 1717, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18120 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18130 */ 1717, 1717, 1327, 1717, 1717, 1327, 1327, 1327, 1327, 1327, + /* 18140 */ 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, 1327, + /* 18150 */ 1327, 1467, 1327, 1327, 1467, 1467, 1327, 346, 1467, 361, + /* 18160 */ 172, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18170 */ 1327, 1327, 1327, 1327, 1327, 1327, 1467, 1327, 1327, 1327, + /* 18180 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18200 */ 1467, 1717, 1327, 1467, 1717, 1717, 1327, 1327, 1717, 1327, + /* 18210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18220 */ 1327, 1327, 1327, 1327, 1327, 1327, 1717, 1327, 1327, 1327, + /* 18230 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18240 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18250 */ 1717, 1327, 1327, 1717, 1327, 1327, 1719, 1719, 1719, 1719, + /* 18260 */ 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1719, + /* 18270 */ 1327, 1719, 1719, 1719, 1719, 1719, 1719, 1719, 1327, 1327, + /* 18280 */ 1719, 1327, 1719, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18290 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1719, + /* 18300 */ 1719, 1327, 1719, 1719, 1327, 1327, 1721, 1721, 1721, 1721, + /* 18310 */ 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, + /* 18320 */ 1327, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1327, 1327, + /* 18330 */ 1721, 1327, 1721, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1721, + /* 18350 */ 1721, 1327, 1721, 1721, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18370 */ 1719, 1327, 1327, 1719, 1719, 1327, 1327, 1719, 1327, 1327, + /* 18380 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18390 */ 1327, 1327, 1327, 1327, 1327, 1719, 1327, 1327, 1327, 1327, + /* 18400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18410 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1719, + /* 18420 */ 1721, 1327, 1719, 1721, 1721, 1327, 1327, 1721, 1327, 1327, + /* 18430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18440 */ 1327, 1327, 1327, 1327, 1327, 1721, 1327, 1327, 1327, 1327, + /* 18450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1721, + /* 18470 */ 1327, 1327, 1721, 1327, 1327, 1742, 1742, 1742, 1742, 1742, + /* 18480 */ 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1327, + /* 18490 */ 1742, 1742, 1742, 1742, 1742, 1742, 1742, 1327, 1327, 1742, + /* 18500 */ 1327, 1742, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18510 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1742, 1742, + /* 18520 */ 1327, 1742, 1742, 1327, 1327, 1741, 1741, 1741, 1741, 1741, + /* 18530 */ 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1327, + /* 18540 */ 1741, 1741, 1741, 1741, 1741, 1741, 1741, 1327, 1327, 1741, + /* 18550 */ 1327, 1741, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18560 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1741, 1741, + /* 18570 */ 1327, 1741, 1741, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18580 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1742, + /* 18590 */ 1327, 1327, 1742, 1742, 1327, 1327, 1742, 1327, 1327, 1327, + /* 18600 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18610 */ 1327, 1327, 1327, 1327, 1742, 1327, 1327, 1327, 1327, 1327, + /* 18620 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1742, 1741, + /* 18640 */ 1327, 1742, 1741, 1741, 1327, 1327, 1741, 1327, 1327, 1327, + /* 18650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18660 */ 1327, 1327, 1327, 1327, 1741, 1327, 1327, 1327, 1327, 1327, + /* 18670 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18680 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1741, 1327, + /* 18690 */ 1327, 1741, 1327, 1327, 1720, 1720, 1720, 1720, 1720, 1720, + /* 18700 */ 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1720, 1327, 1720, + /* 18710 */ 1720, 1720, 1720, 1720, 1720, 1720, 1327, 1327, 1720, 1327, + /* 18720 */ 1720, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18730 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1720, 1720, 1327, + /* 18740 */ 1720, 1720, 1327, 1327, 1718, 1718, 1718, 1718, 1718, 1718, + /* 18750 */ 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1718, 1327, 1718, + /* 18760 */ 1718, 1718, 1718, 1718, 1718, 1718, 1327, 1327, 1718, 1327, + /* 18770 */ 1718, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1718, 1718, 1327, + /* 18790 */ 1718, 1718, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1720, 1327, + /* 18810 */ 1327, 1720, 1720, 1327, 1327, 1720, 1327, 1327, 1327, 1327, + /* 18820 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18830 */ 1327, 1327, 1327, 1720, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18840 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18850 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1720, 1718, 1327, + /* 18860 */ 1720, 1718, 1718, 1327, 1327, 1718, 1327, 1327, 1327, 1327, + /* 18870 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18880 */ 1327, 1327, 1327, 1718, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18890 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18900 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1718, 1327, 1327, + /* 18910 */ 1718, 1327, 1327, 1716, 1716, 1716, 1716, 1716, 1716, 1716, + /* 18920 */ 1716, 1716, 1716, 1716, 1716, 1716, 1716, 1327, 1716, 1716, + /* 18930 */ 1716, 1716, 1716, 1716, 1716, 1327, 1327, 1716, 1327, 1716, + /* 18940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 18950 */ 1327, 1327, 1327, 1327, 1327, 1327, 1716, 1716, 1327, 1716, + /* 18960 */ 1716, 1327, 1327, 1715, 1715, 1715, 1715, 1715, 1715, 1715, + /* 18970 */ 1715, 1715, 1715, 1715, 1715, 1715, 1715, 1327, 1715, 1715, + /* 18980 */ 1715, 1715, 1715, 1715, 1715, 1327, 1327, 1715, 1327, 1715, + /* 18990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1715, 1715, 1327, 1715, + /* 19010 */ 1715, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1716, 1327, 1327, + /* 19030 */ 1716, 1716, 1327, 1327, 1716, 1327, 1327, 1327, 1327, 1327, + /* 19040 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19050 */ 1327, 1327, 1716, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1716, 1715, 1327, 1716, + /* 19080 */ 1715, 1715, 1327, 1327, 1715, 1327, 1327, 1327, 1327, 1327, + /* 19090 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19100 */ 1327, 1327, 1715, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19120 */ 1327, 1327, 1327, 1327, 1327, 1327, 1715, 1327, 1327, 1715, + /* 19130 */ 1327, 1327, 1714, 1714, 1714, 1714, 1714, 1714, 1714, 1714, + /* 19140 */ 1714, 1714, 1714, 1714, 1714, 1714, 1327, 1714, 1714, 1714, + /* 19150 */ 1714, 1714, 1714, 1714, 1327, 1327, 1714, 1327, 1714, 1327, + /* 19160 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19170 */ 1327, 1327, 1327, 1327, 1327, 1714, 1714, 1327, 1714, 1714, + /* 19180 */ 1327, 1327, 1713, 1713, 1713, 1713, 1713, 1713, 1713, 1713, + /* 19190 */ 1713, 1713, 1713, 1713, 1713, 1713, 1327, 1713, 1713, 1713, + /* 19200 */ 1713, 1713, 1713, 1713, 1327, 1327, 1713, 1327, 1713, 1327, + /* 19210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19220 */ 1327, 1327, 1327, 1327, 1327, 1713, 1713, 1327, 1713, 1713, + /* 19230 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19240 */ 1327, 1327, 1327, 1327, 1327, 1327, 1714, 1327, 1327, 1714, + /* 19250 */ 1714, 1327, 1327, 1714, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19270 */ 1327, 1714, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19280 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19290 */ 1327, 1327, 1327, 1327, 1327, 1714, 1713, 1327, 1714, 1713, + /* 19300 */ 1713, 1327, 1327, 1713, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19320 */ 1327, 1713, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19330 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19340 */ 1327, 1327, 1327, 1327, 1327, 1713, 1327, 1327, 1713, 1327, + /* 19350 */ 1327, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, 1712, + /* 19360 */ 1712, 1712, 1712, 1712, 1712, 1327, 1712, 1712, 1712, 1712, + /* 19370 */ 1712, 1712, 1712, 1327, 1327, 1712, 1327, 1712, 1327, 1327, + /* 19380 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19390 */ 1327, 1327, 1327, 1327, 1712, 1712, 1327, 1712, 1712, 1327, + /* 19400 */ 1327, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, 1711, + /* 19410 */ 1711, 1711, 1711, 1711, 1711, 1327, 1711, 1711, 1711, 1711, + /* 19420 */ 1711, 1711, 1711, 1327, 1327, 1711, 1327, 1711, 1327, 1327, + /* 19430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19440 */ 1327, 1327, 1327, 1327, 1711, 1711, 1327, 1711, 1711, 1327, + /* 19450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19460 */ 1327, 1327, 1327, 1327, 1327, 1712, 1327, 1327, 1712, 1712, + /* 19470 */ 1327, 1327, 1712, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19490 */ 1712, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19500 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19510 */ 1327, 1327, 1327, 1327, 1712, 1711, 1327, 1712, 1711, 1711, + /* 19520 */ 1327, 1327, 1711, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19530 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19540 */ 1711, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19550 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19560 */ 1327, 1327, 1327, 1327, 1711, 1327, 1327, 1711, 1327, 1327, + /* 19570 */ 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, 1710, + /* 19580 */ 1710, 1710, 1710, 1710, 1327, 1710, 1710, 1710, 1710, 1710, + /* 19590 */ 1710, 1710, 1327, 1327, 1710, 1327, 1710, 1327, 1327, 1327, + /* 19600 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19610 */ 1327, 1327, 1327, 1710, 1710, 1327, 1710, 1710, 1327, 1327, + /* 19620 */ 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, 1709, + /* 19630 */ 1709, 1709, 1709, 1709, 1327, 1709, 1709, 1709, 1709, 1709, + /* 19640 */ 1709, 1709, 1327, 1327, 1709, 1327, 1709, 1327, 1327, 1327, + /* 19650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19660 */ 1327, 1327, 1327, 1709, 1709, 1327, 1709, 1709, 1327, 1327, + /* 19670 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19680 */ 1327, 1327, 1327, 1327, 1710, 1327, 1327, 1710, 1710, 1327, + /* 19690 */ 1327, 1710, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1710, + /* 19710 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19720 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19730 */ 1327, 1327, 1327, 1710, 1709, 1327, 1710, 1709, 1709, 1327, + /* 19740 */ 1327, 1709, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19750 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1709, + /* 19760 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19770 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19780 */ 1327, 1327, 1327, 1709, 1327, 1327, 1709, 1327, 1327, 1641, + /* 19790 */ 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, 1641, + /* 19800 */ 1641, 1641, 1641, 1327, 1641, 1641, 1641, 1641, 1641, 1641, + /* 19810 */ 1641, 1327, 1327, 1641, 1327, 1641, 1327, 1327, 1327, 1327, + /* 19820 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19830 */ 1327, 1327, 1641, 1641, 1327, 1641, 1641, 1327, 1327, 1618, + /* 19840 */ 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, 1618, + /* 19850 */ 1618, 1618, 1618, 1327, 1618, 1618, 1618, 1618, 1618, 1618, + /* 19860 */ 1618, 1327, 1327, 1618, 1327, 1618, 1327, 1327, 1327, 1327, + /* 19870 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19880 */ 1327, 1327, 1618, 1618, 1327, 1618, 1618, 1327, 1327, 1327, + /* 19890 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19900 */ 1327, 1327, 1327, 1641, 1327, 1327, 1641, 1641, 1327, 1327, + /* 19910 */ 1641, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19920 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1641, 1327, + /* 19930 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19950 */ 1327, 1327, 1641, 1618, 1327, 1641, 1618, 1618, 1327, 1327, + /* 19960 */ 1618, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19970 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1618, 1327, + /* 19980 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 19990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20000 */ 1327, 1327, 1618, 1327, 1327, 1618, 1327, 1327, 1594, 1594, + /* 20010 */ 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, 1594, + /* 20020 */ 1594, 1594, 1327, 1594, 1594, 1594, 1594, 1594, 1594, 1594, + /* 20030 */ 1327, 1327, 1594, 1327, 1594, 1327, 1327, 1327, 1327, 1327, + /* 20040 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20050 */ 1327, 1594, 1594, 1327, 1594, 1594, 1327, 1327, 1593, 1593, + /* 20060 */ 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, 1593, + /* 20070 */ 1593, 1593, 1327, 1593, 1593, 1593, 1593, 1593, 1593, 1593, + /* 20080 */ 1327, 1327, 1593, 1327, 1593, 1327, 1327, 1327, 1327, 1327, + /* 20090 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20100 */ 1327, 1593, 1593, 1327, 1593, 1593, 1327, 1327, 1327, 1327, + /* 20110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20120 */ 1327, 1327, 1594, 1327, 1327, 1594, 1594, 1327, 1327, 1594, + /* 20130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20140 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1594, 1327, 1327, + /* 20150 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20160 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20170 */ 1327, 1594, 1593, 1327, 1594, 1593, 1593, 1327, 1327, 1593, + /* 20180 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1593, 1327, 1327, + /* 20200 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20220 */ 1327, 1593, 1327, 1327, 1593, 1327, 1327, 1592, 1592, 1592, + /* 20230 */ 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1592, + /* 20240 */ 1592, 1327, 1592, 1592, 1592, 1592, 1592, 1592, 1592, 1327, + /* 20250 */ 1327, 1592, 1327, 1592, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20270 */ 1592, 1592, 1327, 1592, 1592, 1327, 1327, 1582, 1582, 1582, + /* 20280 */ 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1582, + /* 20290 */ 1582, 1327, 1582, 1582, 1582, 1582, 1582, 1582, 1582, 1327, + /* 20300 */ 1327, 1582, 1327, 1582, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20320 */ 1582, 1582, 1327, 1582, 1582, 1327, 1327, 1327, 1327, 1327, + /* 20330 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20340 */ 1327, 1592, 1327, 1327, 1592, 1592, 1327, 1327, 1592, 1327, + /* 20350 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1592, 1327, 1327, 1327, + /* 20370 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20380 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20390 */ 1592, 1582, 1327, 1592, 1582, 1582, 1327, 1327, 1582, 1327, + /* 20400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20410 */ 1327, 1327, 1327, 1327, 1327, 1327, 1582, 1327, 1327, 1327, + /* 20420 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20440 */ 1582, 1327, 1327, 1582, 1327, 1327, 1581, 1581, 1581, 1581, + /* 20450 */ 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1581, + /* 20460 */ 1327, 1581, 1581, 1581, 1581, 1581, 1581, 1581, 1327, 1327, + /* 20470 */ 1581, 1327, 1581, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20480 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1581, + /* 20490 */ 1581, 1327, 1581, 1581, 1327, 1327, 1580, 1580, 1580, 1580, + /* 20500 */ 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1580, + /* 20510 */ 1327, 1580, 1580, 1580, 1580, 1580, 1580, 1580, 1327, 1327, + /* 20520 */ 1580, 1327, 1580, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20530 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1580, + /* 20540 */ 1580, 1327, 1580, 1580, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20550 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20560 */ 1581, 1327, 1327, 1581, 1581, 1327, 1327, 1581, 1327, 1327, + /* 20570 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20580 */ 1327, 1327, 1327, 1327, 1327, 1581, 1327, 1327, 1327, 1327, + /* 20590 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20600 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1581, + /* 20610 */ 1580, 1327, 1581, 1580, 1580, 1327, 1327, 1580, 1327, 1327, + /* 20620 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20630 */ 1327, 1327, 1327, 1327, 1327, 1580, 1327, 1327, 1327, 1327, + /* 20640 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1580, + /* 20660 */ 1327, 1327, 1580, 1327, 1327, 1579, 1579, 1579, 1579, 1579, + /* 20670 */ 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1327, + /* 20680 */ 1579, 1579, 1579, 1579, 1579, 1579, 1579, 1327, 1327, 1579, + /* 20690 */ 1327, 1579, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1579, 1579, + /* 20710 */ 1327, 1579, 1579, 1327, 1327, 1578, 1578, 1578, 1578, 1578, + /* 20720 */ 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1327, + /* 20730 */ 1578, 1578, 1578, 1578, 1578, 1578, 1578, 1327, 1327, 1578, + /* 20740 */ 1327, 1578, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20750 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1578, 1578, + /* 20760 */ 1327, 1578, 1578, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20770 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1579, + /* 20780 */ 1327, 1327, 1579, 1579, 1327, 1327, 1579, 1327, 1327, 1327, + /* 20790 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20800 */ 1327, 1327, 1327, 1327, 1579, 1327, 1327, 1327, 1327, 1327, + /* 20810 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20820 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1579, 1578, + /* 20830 */ 1327, 1579, 1578, 1578, 1327, 1327, 1578, 1327, 1327, 1327, + /* 20840 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20850 */ 1327, 1327, 1327, 1327, 1578, 1327, 1327, 1327, 1327, 1327, + /* 20860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20870 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1578, 1327, + /* 20880 */ 1327, 1578, 1327, 1327, 1577, 1577, 1577, 1577, 1577, 1577, + /* 20890 */ 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1577, 1327, 1577, + /* 20900 */ 1577, 1577, 1577, 1577, 1577, 1577, 1327, 1327, 1577, 1327, + /* 20910 */ 1577, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20920 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1577, 1577, 1327, + /* 20930 */ 1577, 1577, 1327, 1327, 1553, 1553, 1553, 1553, 1553, 1553, + /* 20940 */ 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1553, 1327, 1553, + /* 20950 */ 1553, 1553, 1553, 1553, 1553, 1553, 1327, 1327, 1553, 1327, + /* 20960 */ 1553, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20970 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1553, 1553, 1327, + /* 20980 */ 1553, 1553, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 20990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1577, 1327, + /* 21000 */ 1327, 1577, 1577, 1327, 1327, 1577, 1327, 1327, 1327, 1327, + /* 21010 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21020 */ 1327, 1327, 1327, 1577, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21030 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21040 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1577, 1553, 1327, + /* 21050 */ 1577, 1553, 1553, 1327, 1327, 1553, 1327, 1327, 1327, 1327, + /* 21060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21070 */ 1327, 1327, 1327, 1553, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21080 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21090 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1553, 1327, 1327, + /* 21100 */ 1553, 1327, 1327, 1493, 1493, 1493, 1493, 1493, 1493, 1493, + /* 21110 */ 1493, 1493, 1493, 1493, 1493, 1493, 1493, 1327, 1493, 1493, + /* 21120 */ 1493, 1493, 1493, 1493, 46, 1327, 1327, 1493, 1327, 1493, + /* 21130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21140 */ 1327, 1327, 1327, 1327, 1327, 1327, 1493, 1493, 1327, 1493, + /* 21150 */ 1493, 1327, 1327, 1478, 1478, 1478, 1478, 1478, 1478, 1478, + /* 21160 */ 1478, 1478, 1478, 1478, 1478, 1478, 1478, 1327, 1478, 1478, + /* 21170 */ 1478, 1478, 1478, 1478, 1478, 1327, 1327, 1478, 1327, 1478, + /* 21180 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1478, 1478, 1327, 1478, + /* 21200 */ 1478, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21210 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1493, 1327, 1327, + /* 21220 */ 1493, 1493, 1327, 1327, 1493, 1327, 1327, 1327, 1327, 1327, + /* 21230 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21240 */ 1327, 1327, 1493, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21250 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1493, 1478, 1327, 1493, + /* 21270 */ 1478, 1478, 1327, 1327, 1478, 1327, 1327, 1327, 1327, 1327, + /* 21280 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21290 */ 1327, 1327, 1478, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21300 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1478, 1327, 1327, 1478, + /* 21320 */ 1327, 1327, 1477, 1477, 1477, 1477, 1477, 1477, 1477, 1477, + /* 21330 */ 1477, 1477, 1477, 1477, 1477, 1477, 1327, 1477, 1477, 1477, + /* 21340 */ 1477, 1477, 1477, 1477, 1327, 1327, 1477, 1327, 1477, 1327, + /* 21350 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21360 */ 1327, 1327, 1327, 1327, 1327, 1477, 1477, 1327, 1477, 1477, + /* 21370 */ 1327, 1327, 1466, 1466, 1466, 1466, 1466, 1466, 1466, 1466, + /* 21380 */ 1466, 1466, 1466, 1466, 1466, 1466, 1327, 1466, 1466, 1466, + /* 21390 */ 1466, 1466, 1466, 1466, 1327, 1327, 1466, 1327, 1466, 1327, + /* 21400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21410 */ 1327, 1327, 1327, 1327, 1327, 1466, 1466, 1327, 1466, 1466, + /* 21420 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1477, 1327, 1327, 1477, + /* 21440 */ 1477, 1327, 1327, 1477, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21460 */ 1327, 1477, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21470 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21480 */ 1327, 1327, 1327, 1327, 1327, 1477, 1466, 1327, 1477, 1466, + /* 21490 */ 1466, 1327, 1327, 1466, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21500 */ 1327, 1327, 1327, 1327, 1327, 652, 1327, 1327, 1327, 1327, + /* 21510 */ 1327, 1466, 1327, 1327, 1327, 1327, 309, 1327, 844, 311, + /* 21520 */ 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, 1327, + /* 21530 */ 1327, 1327, 1327, 1327, 375, 1466, 149, 1327, 1466, 1327, + /* 21540 */ 1327, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, 1345, + /* 21550 */ 1345, 1345, 1345, 1345, 1345, 347, 1345, 1345, 1345, 1345, + /* 21560 */ 1345, 1345, 1345, 1327, 1327, 1345, 1327, 1345, 353, 310, + /* 21570 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, + /* 21580 */ 1327, 1327, 1327, 1327, 1345, 1345, 1327, 1345, 1345, 1327, + /* 21590 */ 1327, 1327, 468, 1327, 1327, 343, 342, 1327, 1327, 374, + /* 21600 */ 664, 1327, 263, 1327, 1327, 1327, 373, 217, 1327, 1327, + /* 21610 */ 393, 388, 1327, 1327, 348, 1327, 1327, 1327, 1327, 1327, + /* 21620 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 372, 1327, + /* 21640 */ 1327, 1327, 1327, 1327, 1327, 377, 385, 384, 383, 581, + /* 21650 */ 580, 1327, 19, 1327, 83, 1345, 1327, 1327, 1345, 1345, + /* 21660 */ 1327, 346, 1345, 369, 172, 749, 1327, 1327, 571, 371, + /* 21670 */ 1327, 1327, 18, 1327, 1327, 747, 1327, 1327, 1327, 309, + /* 21680 */ 1345, 844, 311, 308, 307, 352, 389, 350, 1327, 1327, + /* 21690 */ 1327, 1327, 1327, 1327, 174, 396, 1327, 375, 1327, 149, + /* 21700 */ 1327, 1327, 1327, 136, 1345, 573, 1327, 1345, 173, 1327, + /* 21710 */ 1327, 1327, 736, 1327, 1327, 1327, 1327, 1327, 347, 1327, + /* 21720 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21730 */ 1327, 353, 310, 1327, 572, 1327, 1327, 1327, 1327, 483, + /* 21740 */ 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21750 */ 309, 1327, 844, 311, 308, 307, 352, 389, 350, 1327, + /* 21760 */ 1327, 1327, 374, 1327, 1327, 1327, 1327, 1327, 375, 373, + /* 21770 */ 149, 1327, 1327, 393, 388, 1327, 1327, 348, 1327, 1327, + /* 21780 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 347, + /* 21790 */ 1327, 1327, 647, 645, 1327, 1327, 1327, 1327, 1327, 1327, + /* 21800 */ 1327, 372, 353, 310, 1327, 1327, 1327, 1327, 377, 385, + /* 21810 */ 384, 383, 1327, 349, 649, 673, 672, 671, 670, 1327, + /* 21820 */ 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 1327, 1327, + /* 21830 */ 1327, 635, 371, 374, 1327, 1327, 534, 1327, 533, 1327, + /* 21840 */ 373, 1327, 1327, 1327, 393, 388, 1327, 1327, 348, 646, + /* 21850 */ 648, 1327, 1442, 1327, 1327, 1442, 1442, 174, 396, 1327, + /* 21860 */ 1327, 574, 1442, 1327, 1327, 1327, 1327, 1442, 1327, 1327, + /* 21870 */ 1327, 173, 372, 483, 1327, 1327, 1327, 1327, 1327, 377, + /* 21880 */ 385, 384, 383, 1327, 309, 1327, 844, 311, 308, 307, + /* 21890 */ 352, 389, 350, 1327, 1327, 346, 1327, 369, 172, 1327, + /* 21900 */ 1327, 1327, 375, 371, 149, 1327, 1327, 1327, 532, 1442, + /* 21910 */ 1442, 1327, 1442, 1327, 1442, 1327, 170, 1327, 1327, 1327, + /* 21920 */ 771, 1327, 1327, 347, 1327, 1442, 531, 758, 174, 396, + /* 21930 */ 1327, 530, 1442, 1327, 1327, 1327, 353, 310, 1327, 1327, + /* 21940 */ 1327, 1327, 173, 1327, 529, 1442, 1327, 349, 1327, 1327, + /* 21950 */ 1327, 1327, 1327, 1442, 727, 1327, 1327, 1327, 1327, 1327, + /* 21960 */ 1327, 1327, 1327, 1442, 1327, 1442, 1442, 374, 1327, 1327, + /* 21970 */ 528, 1327, 1442, 1327, 373, 1327, 1327, 216, 393, 388, + /* 21980 */ 714, 1327, 348, 1327, 1442, 1327, 1327, 1327, 1327, 1327, + /* 21990 */ 1327, 1327, 1327, 1327, 1327, 741, 1327, 1327, 1327, 1327, + /* 22000 */ 1327, 1327, 1327, 1327, 1327, 1327, 372, 1327, 1327, 1327, + /* 22010 */ 1327, 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, + /* 22020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 346, + /* 22030 */ 1327, 369, 172, 1327, 1327, 1327, 1327, 371, 309, 1327, + /* 22040 */ 844, 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, + /* 22050 */ 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, 428, 1327, + /* 22060 */ 1327, 1327, 174, 396, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22070 */ 1327, 1327, 1327, 1327, 1327, 1327, 173, 347, 1327, 1327, + /* 22080 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 487, 1327, + /* 22090 */ 353, 310, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22100 */ 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22120 */ 1327, 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, 1327, + /* 22130 */ 1327, 1327, 393, 388, 1327, 1327, 348, 309, 1327, 844, + /* 22140 */ 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, + /* 22150 */ 486, 1327, 1327, 1327, 1327, 375, 1327, 428, 1327, 1327, + /* 22160 */ 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, 384, + /* 22170 */ 383, 576, 1327, 1327, 308, 307, 347, 1327, 1327, 1327, + /* 22180 */ 1327, 1327, 1327, 346, 1327, 369, 172, 469, 472, 353, + /* 22190 */ 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22200 */ 349, 1327, 1327, 1327, 77, 412, 1327, 1327, 254, 178, + /* 22210 */ 1327, 1327, 253, 1327, 1327, 1327, 174, 396, 1327, 1327, + /* 22220 */ 374, 1327, 1327, 1327, 578, 1327, 252, 373, 251, 1327, + /* 22230 */ 173, 393, 388, 1327, 1327, 348, 1327, 1327, 1327, 1327, + /* 22240 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22250 */ 1327, 687, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 372, + /* 22260 */ 1327, 250, 1327, 1327, 1327, 1327, 377, 385, 384, 383, + /* 22270 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22280 */ 249, 1327, 346, 1327, 369, 172, 1327, 1327, 1327, 1327, + /* 22290 */ 371, 309, 1327, 844, 311, 308, 307, 352, 389, 350, + /* 22300 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 375, + /* 22310 */ 248, 428, 1327, 1327, 1327, 174, 396, 1327, 1327, 247, + /* 22320 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 173, + /* 22330 */ 347, 1327, 1327, 246, 1327, 245, 1327, 1327, 1327, 1327, + /* 22340 */ 743, 644, 1327, 353, 310, 1327, 1327, 1327, 1327, 439, + /* 22350 */ 296, 244, 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, + /* 22360 */ 621, 1327, 1327, 1327, 1327, 1327, 199, 1327, 61, 1327, + /* 22370 */ 198, 182, 539, 1327, 374, 1327, 1327, 1327, 1327, 483, + /* 22380 */ 1327, 373, 1327, 1327, 1327, 393, 388, 1327, 1327, 348, + /* 22390 */ 309, 1327, 844, 311, 308, 307, 352, 389, 350, 1327, + /* 22400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, + /* 22410 */ 149, 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22420 */ 377, 385, 384, 383, 197, 196, 480, 477, 1327, 347, + /* 22430 */ 1327, 1327, 1327, 1327, 538, 1327, 346, 1327, 369, 172, + /* 22440 */ 1327, 1327, 353, 310, 371, 1327, 537, 1327, 536, 1327, + /* 22450 */ 1327, 1327, 1327, 349, 1327, 481, 1327, 1327, 1327, 1327, + /* 22460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, + /* 22470 */ 396, 181, 1327, 374, 1327, 1327, 1327, 1327, 730, 1327, + /* 22480 */ 373, 1327, 1327, 173, 393, 388, 1327, 1327, 348, 309, + /* 22490 */ 1327, 844, 311, 308, 307, 352, 389, 350, 1327, 1327, + /* 22500 */ 1327, 748, 1327, 1327, 1327, 1327, 1327, 375, 1327, 149, + /* 22510 */ 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, + /* 22520 */ 385, 384, 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, + /* 22530 */ 1327, 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 1327, + /* 22540 */ 1327, 353, 310, 371, 1327, 1327, 751, 1327, 1327, 1327, + /* 22550 */ 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22560 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, + /* 22570 */ 1327, 1327, 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, + /* 22580 */ 1327, 1327, 173, 393, 388, 1327, 1327, 348, 309, 1327, + /* 22590 */ 844, 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, + /* 22600 */ 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, 428, 1327, + /* 22610 */ 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, + /* 22620 */ 384, 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, + /* 22630 */ 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 824, 1327, + /* 22640 */ 353, 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22650 */ 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22660 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, + /* 22670 */ 1327, 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, 1327, + /* 22680 */ 1327, 173, 393, 388, 1327, 1327, 348, 309, 1327, 844, + /* 22690 */ 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, + /* 22700 */ 1327, 1327, 1327, 1327, 1327, 375, 1327, 428, 439, 1327, + /* 22710 */ 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, 384, + /* 22720 */ 383, 1327, 1327, 1327, 1327, 240, 347, 1327, 1327, 205, + /* 22730 */ 182, 539, 1327, 346, 823, 369, 172, 469, 827, 353, + /* 22740 */ 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22750 */ 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22760 */ 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, + /* 22770 */ 374, 1327, 1327, 1327, 1327, 439, 296, 373, 485, 183, + /* 22780 */ 173, 393, 388, 202, 201, 348, 621, 1327, 1327, 1327, + /* 22790 */ 1327, 1327, 199, 538, 64, 1327, 198, 182, 539, 1327, + /* 22800 */ 1327, 1327, 1327, 1327, 1327, 537, 1327, 536, 1327, 372, + /* 22810 */ 1327, 1327, 1327, 1327, 481, 1327, 377, 385, 384, 383, + /* 22820 */ 1327, 1327, 1327, 1327, 1327, 154, 1327, 1327, 1327, 1327, + /* 22830 */ 181, 1327, 346, 1327, 369, 172, 1327, 1327, 1327, 1327, + /* 22840 */ 371, 309, 1327, 844, 311, 308, 307, 352, 389, 350, + /* 22850 */ 197, 196, 480, 477, 1327, 1327, 1327, 1327, 1327, 375, + /* 22860 */ 538, 428, 1327, 1327, 1327, 174, 396, 1327, 1327, 1327, + /* 22870 */ 1327, 1327, 537, 1327, 536, 1327, 1327, 1327, 1327, 173, + /* 22880 */ 347, 481, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22890 */ 828, 644, 1327, 353, 310, 1327, 1327, 181, 1327, 439, + /* 22900 */ 296, 1327, 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, + /* 22910 */ 621, 1327, 1327, 1327, 1327, 1327, 199, 1327, 67, 1327, + /* 22920 */ 198, 182, 539, 1327, 374, 1327, 1327, 1327, 1327, 483, + /* 22930 */ 1327, 373, 1327, 1327, 1327, 393, 388, 1327, 1327, 348, + /* 22940 */ 309, 1327, 844, 311, 308, 307, 352, 389, 350, 1327, + /* 22950 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, + /* 22960 */ 149, 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, + /* 22970 */ 377, 385, 384, 383, 197, 196, 480, 477, 1327, 347, + /* 22980 */ 1327, 1327, 1327, 1327, 538, 1327, 346, 1327, 369, 172, + /* 22990 */ 1327, 1327, 353, 310, 371, 1327, 537, 1327, 536, 1327, + /* 23000 */ 1327, 1327, 1327, 349, 1327, 481, 1327, 1327, 1327, 1327, + /* 23010 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, + /* 23020 */ 396, 181, 1327, 374, 1327, 1327, 1327, 1327, 653, 1327, + /* 23030 */ 373, 1327, 1327, 173, 393, 388, 1327, 1327, 348, 309, + /* 23040 */ 1327, 844, 311, 308, 307, 352, 389, 350, 1327, 1327, + /* 23050 */ 1327, 835, 1327, 661, 1327, 1327, 1327, 375, 1327, 149, + /* 23060 */ 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, + /* 23070 */ 385, 384, 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, + /* 23080 */ 1327, 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 1327, + /* 23090 */ 1327, 353, 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23100 */ 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23110 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, + /* 23120 */ 1327, 1327, 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, + /* 23130 */ 1327, 1327, 173, 393, 388, 1327, 1327, 348, 309, 1327, + /* 23140 */ 844, 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, + /* 23150 */ 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, 428, 1327, + /* 23160 */ 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, + /* 23170 */ 384, 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, + /* 23180 */ 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 651, 1327, + /* 23190 */ 353, 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23200 */ 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23210 */ 1327, 1327, 1327, 1327, 665, 1327, 1327, 174, 396, 1327, + /* 23220 */ 1327, 374, 1327, 1327, 1327, 1327, 541, 1327, 373, 1327, + /* 23230 */ 1327, 173, 393, 388, 1327, 1327, 348, 309, 1327, 844, + /* 23240 */ 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, + /* 23250 */ 1327, 1327, 1327, 1327, 666, 375, 1327, 149, 1327, 1327, + /* 23260 */ 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, 384, + /* 23270 */ 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, + /* 23280 */ 1327, 1327, 1327, 346, 1327, 369, 172, 1327, 1327, 353, + /* 23290 */ 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23300 */ 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23310 */ 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, + /* 23320 */ 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, 1327, 1327, + /* 23330 */ 173, 393, 388, 1327, 1327, 348, 309, 1327, 844, 311, + /* 23340 */ 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, 1327, + /* 23350 */ 1327, 1327, 1327, 1327, 375, 1327, 428, 1327, 1327, 372, + /* 23360 */ 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, 384, 383, + /* 23370 */ 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, 647, 645, + /* 23380 */ 1327, 1327, 346, 1327, 369, 172, 830, 1327, 353, 310, + /* 23390 */ 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, + /* 23400 */ 649, 673, 672, 671, 670, 1327, 1327, 1327, 1327, 1327, + /* 23410 */ 1327, 1327, 1327, 1327, 1327, 174, 396, 637, 1327, 374, + /* 23420 */ 1327, 1327, 534, 1327, 533, 1327, 373, 1327, 1327, 173, + /* 23430 */ 393, 388, 1327, 1327, 348, 646, 648, 1327, 1327, 1327, + /* 23440 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 372, 1327, + /* 23460 */ 1327, 1327, 1327, 1327, 1327, 377, 385, 384, 383, 1327, + /* 23470 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23480 */ 1327, 346, 576, 369, 172, 308, 307, 1327, 1327, 371, + /* 23490 */ 1327, 1327, 1327, 1327, 532, 1327, 1327, 1327, 1327, 1327, + /* 23500 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23510 */ 1327, 1327, 531, 1327, 174, 396, 733, 530, 1327, 254, + /* 23520 */ 178, 1327, 1327, 253, 1327, 1327, 1327, 1327, 173, 1327, + /* 23530 */ 529, 1327, 1327, 1327, 1327, 578, 829, 252, 1327, 251, + /* 23540 */ 1327, 1327, 1768, 1768, 1768, 1768, 1768, 1768, 1768, 1768, + /* 23550 */ 1768, 1768, 1768, 1768, 1768, 1768, 528, 291, 290, 289, + /* 23560 */ 288, 287, 286, 1327, 1327, 1327, 1768, 1327, 1768, 1327, + /* 23570 */ 1327, 1327, 250, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23580 */ 1327, 1327, 1327, 1327, 1327, 1768, 1768, 1327, 1768, 1768, + /* 23590 */ 1327, 249, 1770, 1770, 1770, 1770, 1770, 1770, 1770, 1770, + /* 23600 */ 1770, 1770, 1770, 1770, 1770, 1770, 1327, 1770, 1770, 1770, + /* 23610 */ 1770, 1770, 1770, 1327, 1327, 1327, 1770, 1327, 1770, 1327, + /* 23620 */ 1327, 248, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23630 */ 247, 1327, 1327, 1327, 1327, 1770, 1770, 1327, 1770, 1770, + /* 23640 */ 1327, 1327, 1327, 1327, 246, 1327, 245, 1327, 1327, 1327, + /* 23650 */ 1327, 1327, 1327, 1327, 1327, 1327, 1768, 1327, 1327, 1768, + /* 23660 */ 1768, 1327, 244, 1768, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23670 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23680 */ 1327, 1768, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23690 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23700 */ 1327, 1327, 1327, 1327, 1327, 1768, 1770, 1327, 1768, 1770, + /* 23710 */ 1770, 1327, 1327, 1770, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23720 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23730 */ 1327, 1770, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23740 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23750 */ 1327, 1327, 1327, 1327, 1327, 1770, 1327, 1327, 1770, 1327, + /* 23760 */ 1327, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, 1769, + /* 23770 */ 1769, 1769, 1769, 1769, 1769, 1327, 1769, 1769, 1769, 1769, + /* 23780 */ 1769, 1769, 1327, 1327, 1327, 1769, 1327, 1769, 1327, 1327, + /* 23790 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23800 */ 1327, 1327, 1327, 1327, 1769, 1769, 1327, 1769, 1769, 1327, + /* 23810 */ 1327, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, 1492, + /* 23820 */ 1492, 1492, 1492, 1492, 1492, 1327, 1492, 1492, 1492, 1492, + /* 23830 */ 1492, 1492, 1327, 1327, 1327, 1492, 1327, 1492, 1327, 1327, + /* 23840 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23850 */ 1327, 1327, 1327, 1327, 1492, 1492, 1327, 1492, 1492, 1327, + /* 23860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 23870 */ 439, 296, 1327, 1327, 1327, 1769, 1327, 1327, 1769, 1769, + /* 23880 */ 1327, 621, 1769, 1327, 1327, 1327, 1327, 199, 738, 69, + /* 23890 */ 1327, 198, 182, 539, 1327, 1327, 1327, 1327, 1327, 309, + /* 23900 */ 1769, 844, 311, 308, 307, 352, 389, 350, 1327, 1327, + /* 23910 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, 149, + /* 23920 */ 1327, 1327, 1327, 1327, 1769, 1492, 1327, 1769, 1492, 1492, + /* 23930 */ 1327, 1327, 1492, 1327, 1327, 1327, 1327, 1327, 347, 1327, + /* 23940 */ 1327, 1327, 1327, 1327, 1327, 197, 196, 480, 477, 1327, + /* 23950 */ 1492, 353, 310, 1327, 1327, 538, 1327, 1327, 1327, 1327, + /* 23960 */ 1327, 1327, 349, 1327, 1327, 1327, 1327, 537, 1327, 536, + /* 23970 */ 1327, 1327, 1327, 1327, 1492, 1327, 481, 1492, 1327, 1327, + /* 23980 */ 1327, 1327, 374, 1327, 1327, 1327, 1327, 752, 1327, 373, + /* 23990 */ 1327, 1327, 181, 393, 388, 1327, 1327, 348, 309, 1327, + /* 24000 */ 844, 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, + /* 24010 */ 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, 149, 1327, + /* 24020 */ 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, + /* 24030 */ 384, 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, + /* 24040 */ 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 1327, 1327, + /* 24050 */ 353, 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24060 */ 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24070 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, + /* 24080 */ 1327, 374, 1327, 1327, 1327, 1327, 759, 1327, 373, 1327, + /* 24090 */ 1327, 173, 393, 388, 1327, 1327, 348, 309, 1327, 844, + /* 24100 */ 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, + /* 24110 */ 1327, 1327, 1327, 1327, 1327, 375, 1327, 149, 1327, 1327, + /* 24120 */ 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, 384, + /* 24130 */ 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, + /* 24140 */ 1327, 1327, 1327, 346, 1327, 369, 172, 1327, 1327, 353, + /* 24150 */ 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24160 */ 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24170 */ 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, + /* 24180 */ 374, 1327, 1327, 1327, 1327, 805, 1327, 373, 1327, 1327, + /* 24190 */ 173, 393, 388, 1327, 1327, 348, 309, 1327, 844, 311, + /* 24200 */ 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, 1327, + /* 24210 */ 1327, 1327, 1327, 1327, 375, 1327, 149, 1327, 1327, 372, + /* 24220 */ 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, 384, 383, + /* 24230 */ 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, + /* 24240 */ 1327, 1327, 346, 1327, 369, 172, 1327, 1327, 353, 310, + /* 24250 */ 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, + /* 24260 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24270 */ 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, 374, + /* 24280 */ 1327, 1327, 1327, 1327, 809, 1327, 373, 1327, 1327, 173, + /* 24290 */ 393, 388, 1327, 1327, 348, 309, 1327, 844, 311, 308, + /* 24300 */ 307, 352, 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24310 */ 1327, 1327, 1327, 375, 1327, 149, 1327, 1327, 372, 1327, + /* 24320 */ 1327, 1327, 1327, 1327, 1327, 377, 385, 384, 383, 1327, + /* 24330 */ 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, + /* 24340 */ 1327, 346, 1327, 369, 172, 1327, 1327, 353, 310, 371, + /* 24350 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, + /* 24360 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24370 */ 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, 374, 1327, + /* 24380 */ 1327, 1327, 1327, 820, 1327, 373, 1327, 1327, 173, 393, + /* 24390 */ 388, 1327, 1327, 348, 309, 1327, 844, 311, 308, 307, + /* 24400 */ 352, 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24410 */ 1327, 1327, 375, 1327, 149, 1327, 1327, 372, 1327, 1327, + /* 24420 */ 1327, 1327, 1327, 1327, 377, 385, 384, 383, 1327, 1327, + /* 24430 */ 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24440 */ 346, 1327, 369, 172, 1327, 1327, 353, 310, 371, 1327, + /* 24450 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, + /* 24460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24470 */ 1327, 1327, 1327, 174, 396, 1327, 1327, 374, 1327, 1327, + /* 24480 */ 1327, 1327, 831, 1327, 373, 1327, 1327, 173, 393, 388, + /* 24490 */ 1327, 1327, 348, 309, 1327, 844, 311, 308, 307, 352, + /* 24500 */ 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24510 */ 1327, 375, 1327, 149, 1327, 1327, 372, 1327, 1327, 1327, + /* 24520 */ 1327, 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, + /* 24530 */ 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, 1327, 346, + /* 24540 */ 1327, 369, 172, 1327, 1327, 353, 310, 371, 1327, 1327, + /* 24550 */ 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, + /* 24560 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24570 */ 1327, 1327, 174, 396, 1327, 1327, 374, 1327, 1327, 1327, + /* 24580 */ 1327, 832, 1327, 373, 1327, 1327, 173, 393, 388, 1327, + /* 24590 */ 1327, 348, 309, 1327, 844, 311, 308, 307, 352, 389, + /* 24600 */ 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24610 */ 375, 1327, 149, 1327, 1327, 372, 1327, 1327, 1327, 1327, + /* 24620 */ 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, + /* 24630 */ 1327, 347, 1327, 1327, 1327, 1327, 1327, 1327, 346, 1327, + /* 24640 */ 369, 172, 1327, 1327, 353, 310, 371, 1327, 1327, 1327, + /* 24650 */ 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, 1327, + /* 24660 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24670 */ 1327, 174, 396, 1327, 1327, 374, 1327, 1327, 1327, 1327, + /* 24680 */ 833, 1327, 373, 1327, 1327, 173, 393, 388, 1327, 1327, + /* 24690 */ 348, 309, 1327, 844, 311, 308, 307, 352, 389, 350, + /* 24700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 375, + /* 24710 */ 1327, 149, 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, + /* 24720 */ 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, 1327, + /* 24730 */ 347, 1327, 1327, 1327, 1327, 1327, 1327, 346, 1327, 369, + /* 24740 */ 172, 1327, 1327, 353, 310, 371, 1327, 1327, 1327, 1327, + /* 24750 */ 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, + /* 24760 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24770 */ 174, 396, 1327, 1327, 374, 1327, 1327, 1327, 1327, 834, + /* 24780 */ 1327, 373, 1327, 1327, 173, 393, 388, 1327, 1327, 348, + /* 24790 */ 309, 1327, 844, 311, 308, 307, 352, 389, 350, 1327, + /* 24800 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, + /* 24810 */ 149, 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24820 */ 377, 385, 384, 383, 1327, 1327, 1327, 1327, 1327, 347, + /* 24830 */ 1327, 1327, 1327, 1327, 1327, 1327, 346, 1327, 369, 172, + /* 24840 */ 1327, 1327, 353, 310, 371, 1327, 1327, 1327, 1327, 1327, + /* 24850 */ 1327, 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, + /* 24870 */ 396, 1327, 1327, 374, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24880 */ 373, 1327, 1327, 173, 393, 388, 1327, 1327, 348, 309, + /* 24890 */ 1327, 844, 311, 308, 307, 352, 389, 350, 1327, 1327, + /* 24900 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 375, 836, 837, + /* 24910 */ 1327, 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, + /* 24920 */ 385, 384, 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, + /* 24930 */ 1327, 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 1327, + /* 24940 */ 1327, 353, 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24950 */ 1327, 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 24960 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, + /* 24970 */ 1327, 1327, 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, + /* 24980 */ 1327, 1327, 173, 393, 388, 1327, 1327, 348, 309, 1327, + /* 24990 */ 844, 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, + /* 25000 */ 1327, 1327, 1327, 1327, 1327, 1327, 375, 1327, 842, 1327, + /* 25010 */ 1327, 372, 1327, 1327, 1327, 1327, 1327, 1327, 377, 385, + /* 25020 */ 384, 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, + /* 25030 */ 1327, 1327, 1327, 1327, 346, 1327, 369, 172, 1327, 1327, + /* 25040 */ 353, 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25050 */ 1327, 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25060 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, + /* 25070 */ 1327, 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, 1327, + /* 25080 */ 1327, 173, 393, 388, 1327, 1327, 348, 309, 1327, 844, + /* 25090 */ 311, 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, + /* 25100 */ 1327, 1327, 1327, 1327, 1327, 375, 1327, 655, 1327, 1327, + /* 25110 */ 372, 1327, 1327, 1327, 843, 1327, 1327, 377, 385, 384, + /* 25120 */ 383, 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, + /* 25130 */ 1327, 1327, 1327, 346, 1327, 369, 172, 1327, 1327, 353, + /* 25140 */ 310, 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25150 */ 349, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25160 */ 1327, 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, + /* 25170 */ 374, 1327, 1327, 1327, 1327, 1327, 1327, 373, 1327, 1327, + /* 25180 */ 173, 393, 388, 1327, 1327, 348, 309, 1327, 844, 311, + /* 25190 */ 308, 307, 352, 389, 350, 1327, 1327, 1327, 1327, 1327, + /* 25200 */ 1327, 1327, 1327, 1327, 375, 1327, 654, 1327, 1327, 372, + /* 25210 */ 1327, 1327, 203, 1327, 1327, 1327, 377, 385, 384, 383, + /* 25220 */ 1327, 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, + /* 25230 */ 1327, 1327, 346, 1327, 369, 172, 1327, 1327, 353, 310, + /* 25240 */ 371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, + /* 25250 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25260 */ 1327, 1327, 1327, 1327, 1327, 174, 396, 1327, 1327, 374, + /* 25270 */ 1327, 1327, 1327, 1327, 663, 1327, 373, 1327, 1327, 173, + /* 25280 */ 393, 388, 1327, 1327, 348, 309, 1327, 844, 311, 308, + /* 25290 */ 307, 352, 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25300 */ 1327, 1327, 1327, 375, 1327, 149, 1327, 1327, 372, 204, + /* 25310 */ 1327, 1327, 1327, 1327, 1327, 377, 385, 384, 383, 1327, + /* 25320 */ 1327, 1327, 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, + /* 25330 */ 1327, 346, 1327, 369, 172, 1327, 1327, 353, 310, 371, + /* 25340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 349, 439, + /* 25350 */ 296, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25360 */ 621, 1327, 1327, 1327, 174, 396, 199, 1327, 374, 1327, + /* 25370 */ 198, 182, 539, 1327, 1327, 373, 1327, 1327, 173, 393, + /* 25380 */ 388, 1327, 1327, 348, 309, 1327, 844, 311, 308, 307, + /* 25390 */ 352, 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25400 */ 1327, 1327, 375, 1327, 429, 1327, 1327, 372, 1327, 1327, + /* 25410 */ 1327, 1327, 1327, 1327, 377, 385, 384, 383, 1327, 1327, + /* 25420 */ 1327, 1327, 1327, 347, 197, 196, 480, 477, 1327, 1327, + /* 25430 */ 346, 1327, 369, 172, 538, 1327, 353, 310, 371, 1327, + /* 25440 */ 1327, 1327, 1327, 1327, 1327, 1327, 537, 349, 536, 1327, + /* 25450 */ 1327, 1327, 1327, 1327, 1327, 481, 1327, 1327, 1327, 1327, + /* 25460 */ 1327, 1327, 1327, 174, 396, 1327, 1327, 374, 1327, 1327, + /* 25470 */ 1327, 181, 1327, 1327, 373, 1327, 1327, 173, 393, 388, + /* 25480 */ 1327, 1327, 348, 309, 1327, 844, 311, 308, 307, 352, + /* 25490 */ 389, 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25500 */ 1327, 375, 1327, 1327, 1327, 1327, 372, 1327, 1327, 1327, + /* 25510 */ 1327, 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, + /* 25520 */ 1327, 1327, 347, 1327, 1327, 1327, 1327, 1327, 1327, 346, + /* 25530 */ 1327, 369, 172, 1327, 1327, 353, 310, 371, 1327, 1327, + /* 25540 */ 1327, 1327, 1327, 1327, 1327, 1327, 349, 1327, 1327, 1327, + /* 25550 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25560 */ 1327, 1327, 174, 396, 1327, 1327, 374, 1327, 1327, 1327, + /* 25570 */ 1327, 1327, 1327, 373, 1327, 1327, 173, 393, 388, 1327, + /* 25580 */ 1327, 348, 309, 1327, 844, 311, 308, 307, 352, 389, + /* 25590 */ 350, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25600 */ 375, 1327, 1327, 1327, 1327, 372, 1327, 1327, 1327, 1327, + /* 25610 */ 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, + /* 25620 */ 1327, 347, 1327, 1327, 1327, 1773, 1327, 1327, 346, 576, + /* 25630 */ 369, 172, 308, 307, 353, 310, 371, 1327, 1327, 1327, + /* 25640 */ 1327, 1327, 1773, 1327, 1327, 349, 1773, 1773, 1773, 1327, + /* 25650 */ 1327, 1327, 1327, 309, 1327, 844, 311, 308, 307, 352, + /* 25660 */ 389, 350, 397, 413, 1327, 374, 254, 178, 1327, 1327, + /* 25670 */ 253, 375, 373, 1327, 1327, 173, 394, 388, 1327, 1327, + /* 25680 */ 348, 1327, 578, 1327, 252, 1327, 251, 1327, 1327, 1327, + /* 25690 */ 1327, 1327, 347, 1327, 1327, 1773, 1773, 1327, 1327, 1327, + /* 25700 */ 1773, 1773, 1327, 1327, 372, 353, 310, 1327, 1327, 689, + /* 25710 */ 1773, 377, 385, 384, 383, 1327, 349, 1327, 1327, 250, + /* 25720 */ 1327, 1327, 1773, 1327, 1773, 1327, 1327, 346, 1327, 369, + /* 25730 */ 172, 1773, 1327, 1327, 1327, 371, 374, 1327, 249, 1327, + /* 25740 */ 1327, 1327, 1773, 373, 1327, 1327, 1327, 1773, 395, 1327, + /* 25750 */ 1752, 348, 1327, 1752, 1752, 1327, 1327, 1327, 1327, 1327, + /* 25760 */ 1752, 1327, 1327, 1327, 1327, 1752, 1327, 1327, 248, 1327, + /* 25770 */ 1327, 1327, 1327, 1327, 1327, 372, 1327, 247, 1327, 1327, + /* 25780 */ 1327, 1327, 377, 385, 384, 383, 1327, 1327, 1327, 1327, + /* 25790 */ 1327, 246, 1327, 245, 1327, 1327, 1327, 1327, 346, 1327, + /* 25800 */ 369, 172, 1327, 1327, 1327, 1327, 371, 1752, 1752, 244, + /* 25810 */ 1752, 1327, 1752, 1327, 1752, 1327, 1327, 1327, 1752, 1327, + /* 25820 */ 1327, 1327, 1327, 1752, 1327, 1752, 1327, 1327, 1327, 1327, + /* 25830 */ 1752, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25840 */ 1327, 1327, 1327, 1752, 1327, 1625, 1327, 1327, 1625, 1625, + /* 25850 */ 1327, 1752, 1752, 1327, 1327, 1625, 1327, 1327, 1327, 1327, + /* 25860 */ 1625, 1752, 1327, 1752, 1752, 1752, 1327, 1752, 1327, 1327, + /* 25870 */ 1752, 1327, 1327, 1327, 1327, 1752, 1327, 1327, 1752, 1327, + /* 25880 */ 1327, 1327, 1752, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25890 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25900 */ 1327, 1327, 1625, 1625, 1327, 1625, 1327, 1625, 1327, 1625, + /* 25910 */ 1327, 1327, 1327, 1625, 1327, 1327, 1327, 1327, 1625, 1327, + /* 25920 */ 1625, 1327, 1327, 1327, 1327, 1625, 1327, 1327, 1327, 1327, + /* 25930 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1625, 1327, + /* 25940 */ 1327, 1327, 1327, 1327, 1327, 1327, 1625, 1625, 1327, 1327, + /* 25950 */ 1327, 1327, 1327, 1327, 1327, 1327, 1625, 1327, 1625, 1625, + /* 25960 */ 1625, 1327, 1625, 1327, 1624, 1625, 1327, 1624, 1624, 1327, + /* 25970 */ 1625, 1327, 1327, 1625, 1624, 1327, 1327, 1625, 1327, 1624, + /* 25980 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 25990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26000 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26010 */ 466, 467, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26020 */ 1327, 1624, 1624, 1327, 1624, 1327, 1624, 1327, 1624, 519, + /* 26030 */ 495, 1327, 1624, 1327, 1327, 1327, 1327, 1624, 1327, 1624, + /* 26040 */ 1327, 1327, 1327, 1327, 1624, 1327, 1327, 1327, 1327, 1327, + /* 26050 */ 1327, 1327, 1327, 1327, 534, 1327, 533, 1624, 1327, 1327, + /* 26060 */ 1327, 1327, 1327, 1327, 1327, 1624, 1624, 1327, 503, 1327, + /* 26070 */ 1327, 1327, 1327, 1327, 1327, 1624, 1327, 1624, 1624, 1624, + /* 26080 */ 1327, 1624, 1327, 1470, 1624, 1327, 1470, 1470, 1327, 1624, + /* 26090 */ 1327, 1327, 1624, 1470, 1327, 1327, 1624, 1327, 1470, 1327, + /* 26100 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, + /* 26110 */ 518, 517, 516, 515, 514, 513, 512, 1327, 1327, 1327, + /* 26120 */ 1327, 1327, 1327, 1327, 1327, 1327, 532, 1327, 1327, 1327, + /* 26130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26140 */ 1470, 1470, 1327, 1470, 531, 1470, 504, 1470, 1327, 530, + /* 26150 */ 1327, 1470, 1327, 1327, 1327, 1327, 1470, 1327, 1470, 1327, + /* 26160 */ 1327, 1327, 529, 1470, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26170 */ 1327, 1327, 1327, 1327, 1327, 1327, 1470, 1327, 1327, 1327, + /* 26180 */ 1327, 1327, 1327, 1327, 1470, 1470, 1327, 1327, 528, 1327, + /* 26190 */ 1327, 1327, 1327, 1327, 1470, 1327, 1470, 1470, 1470, 1327, + /* 26200 */ 1470, 1327, 1453, 1470, 1327, 1453, 1453, 1327, 1470, 1327, + /* 26210 */ 1327, 1470, 1453, 1327, 1327, 1470, 1327, 1453, 1327, 1327, + /* 26220 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26230 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26240 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 466, 467, + /* 26250 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1453, + /* 26260 */ 1453, 1327, 1453, 1327, 1453, 1327, 1453, 519, 774, 1327, + /* 26270 */ 1453, 1327, 1327, 1327, 1327, 1453, 1327, 1453, 1327, 1327, + /* 26280 */ 1327, 1327, 1453, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26290 */ 1327, 1327, 534, 1327, 533, 1453, 1327, 1327, 1327, 1327, + /* 26300 */ 1327, 1327, 1327, 1453, 1453, 1327, 503, 1327, 1327, 1327, + /* 26310 */ 1327, 1327, 1327, 1453, 1327, 1453, 1453, 1453, 1327, 1453, + /* 26320 */ 1327, 1452, 1453, 1327, 1452, 1452, 1327, 1453, 1327, 1327, + /* 26330 */ 1453, 1452, 1327, 1327, 1453, 1327, 1452, 1327, 1327, 1327, + /* 26340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, 518, 517, + /* 26350 */ 516, 515, 514, 513, 512, 1327, 1327, 1327, 1327, 1327, + /* 26360 */ 1327, 1327, 1327, 1327, 532, 1327, 1327, 1327, 1327, 1327, + /* 26370 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1452, 1452, + /* 26380 */ 1327, 1452, 531, 1452, 504, 1452, 1327, 530, 1327, 1452, + /* 26390 */ 1327, 1327, 1327, 1327, 1452, 1327, 1452, 1327, 1327, 1327, + /* 26400 */ 529, 1452, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26410 */ 1327, 1327, 1327, 1327, 1452, 1327, 1327, 1327, 1327, 1327, + /* 26420 */ 1327, 1327, 1452, 1452, 1327, 1327, 528, 1327, 1327, 1327, + /* 26430 */ 1327, 1327, 1452, 1327, 1452, 1452, 1452, 1327, 1452, 1327, + /* 26440 */ 1451, 1452, 1327, 1451, 1451, 1327, 1452, 1327, 1327, 1452, + /* 26450 */ 1451, 1327, 1327, 1452, 1327, 1451, 1327, 1327, 1327, 1327, + /* 26460 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26470 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26480 */ 1327, 1327, 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, + /* 26490 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1451, 1451, 1327, + /* 26500 */ 1451, 1327, 1451, 1327, 1451, 519, 493, 1327, 1451, 1327, + /* 26510 */ 1327, 1327, 1327, 1451, 1327, 1451, 1327, 1327, 1327, 1327, + /* 26520 */ 1451, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26530 */ 534, 1327, 533, 1451, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26540 */ 1327, 1451, 1451, 1327, 503, 1327, 1327, 1327, 1327, 1327, + /* 26550 */ 1327, 1451, 1327, 1451, 1451, 1451, 1327, 1451, 1327, 1450, + /* 26560 */ 1451, 1327, 1450, 1450, 1327, 1451, 1327, 1327, 1451, 1450, + /* 26570 */ 1327, 1327, 1451, 1327, 1450, 1327, 1327, 1327, 1327, 1327, + /* 26580 */ 1327, 1327, 1327, 1327, 1327, 505, 518, 517, 516, 515, + /* 26590 */ 514, 513, 512, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26600 */ 1327, 1327, 532, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26610 */ 1327, 1327, 1327, 1327, 1327, 1327, 1450, 1450, 1327, 1450, + /* 26620 */ 531, 1450, 504, 1450, 1327, 530, 1327, 1450, 1327, 1327, + /* 26630 */ 1327, 1327, 1450, 1327, 1450, 1327, 1327, 1327, 529, 1450, + /* 26640 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26650 */ 1327, 1327, 1450, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26660 */ 1450, 1450, 1327, 1327, 528, 1327, 1327, 1327, 1327, 1327, + /* 26670 */ 1450, 1327, 1450, 1450, 1450, 1327, 1450, 1327, 1449, 1450, + /* 26680 */ 1327, 1449, 1449, 1327, 1450, 1327, 1327, 1450, 1449, 1327, + /* 26690 */ 1327, 1450, 1327, 1449, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26700 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26710 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26720 */ 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, 1327, 1327, + /* 26730 */ 1327, 1327, 1327, 1327, 1327, 1449, 1449, 1327, 1449, 1327, + /* 26740 */ 1449, 1327, 1449, 519, 499, 1327, 1449, 1327, 1327, 1327, + /* 26750 */ 1327, 1449, 1327, 1449, 1327, 1327, 1327, 1327, 1449, 1327, + /* 26760 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 534, 1327, + /* 26770 */ 533, 1449, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1449, + /* 26780 */ 1449, 1327, 503, 1327, 1327, 1327, 1327, 1327, 1327, 1449, + /* 26790 */ 1327, 1449, 1449, 1449, 1327, 1449, 1327, 1441, 1449, 1327, + /* 26800 */ 1441, 1441, 1327, 1449, 1327, 1327, 1449, 1441, 1327, 1327, + /* 26810 */ 1449, 1327, 1441, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26820 */ 1327, 1327, 1327, 505, 518, 517, 516, 515, 514, 513, + /* 26830 */ 512, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26840 */ 532, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26850 */ 1327, 1327, 1327, 1327, 1441, 1441, 1327, 1441, 531, 1441, + /* 26860 */ 504, 1327, 1327, 530, 1327, 1441, 1327, 1327, 1327, 1327, + /* 26870 */ 1441, 1327, 1441, 1327, 1327, 1327, 529, 1441, 1327, 1371, + /* 26880 */ 1327, 1327, 1371, 1371, 1327, 1327, 1327, 1327, 1327, 1371, + /* 26890 */ 1441, 1327, 1327, 1327, 1371, 1327, 1327, 1327, 1441, 1441, + /* 26900 */ 1327, 1327, 528, 1327, 1327, 1327, 1327, 1327, 1441, 1327, + /* 26910 */ 1441, 1441, 1441, 1327, 1441, 1327, 1370, 1441, 1327, 1370, + /* 26920 */ 1370, 1327, 1441, 1327, 1327, 1441, 1370, 1327, 1327, 1441, + /* 26930 */ 1327, 1370, 1327, 1327, 1327, 1327, 1371, 1371, 1327, 1371, + /* 26940 */ 1327, 1371, 1327, 1371, 1327, 1327, 1327, 1371, 1327, 1327, + /* 26950 */ 1327, 1327, 1371, 1327, 1371, 1327, 1327, 1327, 1327, 1371, + /* 26960 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 26970 */ 1327, 1327, 1371, 1370, 1370, 1327, 1370, 1327, 1370, 1327, + /* 26980 */ 1370, 1371, 1327, 1327, 1370, 1327, 1327, 1327, 1327, 1370, + /* 26990 */ 1371, 1370, 1371, 1327, 1327, 1327, 1370, 1327, 1327, 1371, + /* 27000 */ 1327, 1327, 1327, 1327, 1371, 1327, 1327, 1371, 1327, 1370, + /* 27010 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1370, 1370, 1327, + /* 27020 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1370, 1371, 1370, + /* 27030 */ 1370, 1371, 1371, 1327, 1327, 1327, 1370, 1327, 1371, 1327, + /* 27040 */ 1327, 1370, 1327, 1371, 1370, 1327, 1327, 1327, 1370, 1327, + /* 27050 */ 1327, 1327, 1327, 1327, 1327, 1327, 1678, 1327, 1327, 1678, + /* 27060 */ 1678, 1327, 1327, 1327, 1327, 1327, 1678, 1327, 1327, 1327, + /* 27070 */ 1327, 1678, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27080 */ 1327, 1327, 1327, 1327, 1327, 1371, 1371, 1327, 1371, 1327, + /* 27090 */ 1371, 1327, 1371, 1327, 1327, 1327, 1371, 1327, 1327, 1327, + /* 27100 */ 1327, 1371, 1327, 1371, 1327, 1327, 1327, 1327, 1371, 1327, + /* 27110 */ 1327, 1327, 1327, 1678, 1678, 1327, 1678, 1327, 1678, 1327, + /* 27120 */ 1678, 1371, 1327, 1327, 1678, 1327, 1327, 1327, 1327, 1678, + /* 27130 */ 1371, 1678, 1327, 1327, 1327, 1327, 1678, 1327, 1327, 1371, + /* 27140 */ 1373, 1371, 1371, 1373, 1373, 1327, 1327, 1327, 1371, 1678, + /* 27150 */ 1373, 1327, 1327, 1371, 1327, 1373, 1371, 1373, 1678, 1327, + /* 27160 */ 1371, 1327, 1327, 1327, 1327, 1327, 1327, 1678, 1327, 1678, + /* 27170 */ 1678, 1327, 1327, 1327, 1327, 1372, 1678, 1327, 1372, 1372, + /* 27180 */ 1327, 1678, 1327, 1327, 1678, 1372, 1327, 1327, 1678, 1327, + /* 27190 */ 1372, 1327, 1372, 1327, 1327, 1327, 1327, 1373, 1373, 1327, + /* 27200 */ 1373, 1327, 1373, 1373, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27210 */ 1327, 1327, 1327, 1373, 1373, 1327, 1327, 1327, 1327, 1327, + /* 27220 */ 1373, 1327, 1373, 1373, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27230 */ 1327, 1327, 1372, 1372, 1327, 1372, 1327, 1372, 1372, 1327, + /* 27240 */ 1327, 1373, 1327, 1327, 1327, 1327, 1327, 1327, 1372, 1372, + /* 27250 */ 1327, 1373, 1373, 1373, 1373, 1372, 1327, 1372, 1372, 1371, + /* 27260 */ 1373, 1327, 1371, 1371, 1327, 1327, 1327, 1327, 1327, 1371, + /* 27270 */ 1327, 1327, 1373, 1327, 1371, 1327, 1372, 1327, 1327, 1327, + /* 27280 */ 1327, 1327, 1327, 1327, 1327, 1327, 1372, 1372, 1372, 1372, + /* 27290 */ 1327, 1327, 1327, 1327, 1327, 1372, 1327, 1327, 1327, 1327, + /* 27300 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1372, 1327, 1327, + /* 27310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1371, 1371, 1327, 1371, + /* 27320 */ 1327, 1371, 1327, 1371, 1327, 1327, 1327, 1371, 1327, 1327, + /* 27330 */ 1327, 1327, 1371, 1327, 1371, 1327, 1327, 1327, 1327, 1371, + /* 27340 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27350 */ 1327, 1327, 1371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27360 */ 1371, 1371, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27370 */ 1371, 1627, 1371, 1327, 1627, 1627, 1327, 1327, 1327, 1371, + /* 27380 */ 1327, 1627, 1327, 1327, 1371, 1327, 1627, 1371, 1327, 1327, + /* 27390 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27400 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27410 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27420 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1627, 1627, + /* 27430 */ 1327, 1627, 1327, 1627, 1327, 1627, 1327, 1327, 1327, 1627, + /* 27440 */ 1327, 1327, 1327, 1327, 1627, 1327, 1627, 1327, 1327, 1327, + /* 27450 */ 1327, 1627, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27460 */ 1327, 1327, 1327, 1327, 1627, 1327, 1327, 1327, 1327, 1327, + /* 27470 */ 1327, 1327, 1627, 1627, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27480 */ 1327, 1327, 1627, 1626, 1627, 1327, 1626, 1626, 1327, 1327, + /* 27490 */ 1327, 1627, 1327, 1626, 1327, 1327, 1627, 1327, 1626, 1627, + /* 27500 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27510 */ 1327, 1327, 1327, 466, 467, 1327, 1327, 1327, 1327, 1327, + /* 27520 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27530 */ 1327, 1327, 519, 501, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27540 */ 1626, 1626, 1327, 1626, 1327, 1626, 1327, 1626, 1327, 1327, + /* 27550 */ 1327, 1626, 1327, 1327, 1327, 1327, 1626, 534, 1626, 533, + /* 27560 */ 1327, 1327, 1327, 1626, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27570 */ 1327, 503, 1327, 1327, 1327, 1327, 1626, 1327, 466, 467, + /* 27580 */ 1327, 1327, 1327, 1327, 1626, 1626, 1327, 1327, 1327, 1327, + /* 27590 */ 1327, 1327, 1327, 1327, 1626, 1327, 1626, 519, 497, 1327, + /* 27600 */ 1327, 1327, 1327, 1626, 1327, 1327, 1327, 1327, 1626, 1327, + /* 27610 */ 1327, 1626, 505, 518, 517, 516, 515, 514, 513, 512, + /* 27620 */ 1327, 1327, 534, 1327, 533, 1327, 1327, 1327, 1327, 532, + /* 27630 */ 1327, 1327, 1327, 1327, 1327, 1327, 503, 1327, 1327, 1327, + /* 27640 */ 1327, 1327, 1327, 466, 467, 1327, 1327, 531, 1327, 504, + /* 27650 */ 1327, 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27660 */ 1327, 1327, 519, 755, 1327, 529, 1327, 1327, 1327, 1327, + /* 27670 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, 518, 517, + /* 27680 */ 516, 515, 514, 513, 512, 1327, 1327, 534, 1327, 533, + /* 27690 */ 1327, 528, 1327, 1327, 532, 1327, 1327, 1327, 1327, 1327, + /* 27700 */ 1327, 503, 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, + /* 27710 */ 1327, 1327, 531, 1327, 504, 1327, 1327, 530, 1327, 1327, + /* 27720 */ 1327, 1327, 1327, 1327, 1327, 519, 756, 1327, 1327, 1327, + /* 27730 */ 529, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27740 */ 1327, 1327, 505, 518, 517, 516, 515, 514, 513, 512, + /* 27750 */ 534, 1327, 533, 1327, 1327, 1327, 528, 1327, 1327, 532, + /* 27760 */ 1327, 1327, 1327, 1327, 503, 1327, 1327, 1327, 1327, 1327, + /* 27770 */ 466, 467, 1327, 1327, 1327, 1327, 1327, 531, 1327, 504, + /* 27780 */ 1327, 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, 519, + /* 27790 */ 587, 1327, 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, + /* 27800 */ 1327, 1327, 1327, 1327, 1327, 505, 518, 517, 516, 515, + /* 27810 */ 514, 513, 512, 1327, 534, 1327, 533, 1327, 1327, 1327, + /* 27820 */ 1327, 528, 532, 1327, 1327, 1327, 1327, 1327, 503, 1327, + /* 27830 */ 1327, 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, 1327, + /* 27840 */ 531, 1327, 504, 1327, 1327, 530, 1327, 1327, 1327, 1327, + /* 27850 */ 1327, 1327, 1327, 1327, 519, 596, 1327, 1327, 529, 1327, + /* 27860 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, + /* 27870 */ 518, 517, 516, 515, 514, 513, 512, 1327, 1327, 534, + /* 27880 */ 1327, 533, 1327, 1327, 528, 1327, 532, 1327, 1327, 1327, + /* 27890 */ 1327, 1327, 1327, 503, 1327, 1327, 1327, 1327, 466, 467, + /* 27900 */ 1327, 1327, 1327, 1327, 531, 1327, 504, 1327, 1327, 530, + /* 27910 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 519, 775, 1327, + /* 27920 */ 1327, 1327, 529, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 27930 */ 1327, 1327, 1327, 1327, 505, 518, 517, 516, 515, 514, + /* 27940 */ 513, 512, 534, 1327, 533, 1327, 1327, 1327, 528, 1327, + /* 27950 */ 1327, 532, 1327, 1327, 1327, 1327, 503, 1327, 1327, 1327, + /* 27960 */ 1327, 1327, 466, 467, 1327, 1327, 1327, 1327, 1327, 531, + /* 27970 */ 1327, 504, 1327, 1327, 530, 1327, 1327, 1327, 1327, 1327, + /* 27980 */ 1327, 519, 490, 1327, 1327, 1327, 1327, 529, 1327, 1327, + /* 27990 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, 518, 517, + /* 28000 */ 516, 515, 514, 513, 512, 1327, 534, 1327, 533, 1327, + /* 28010 */ 1327, 1327, 1327, 528, 532, 1327, 1327, 1327, 1327, 1327, + /* 28020 */ 503, 1327, 1327, 1327, 1327, 1327, 1327, 466, 467, 1327, + /* 28030 */ 1327, 1327, 531, 1327, 504, 1327, 1327, 530, 1327, 1327, + /* 28040 */ 1327, 1327, 1327, 1327, 1327, 1327, 519, 492, 1327, 1327, + /* 28050 */ 529, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28060 */ 1327, 505, 518, 517, 516, 515, 514, 513, 512, 1327, + /* 28070 */ 1327, 534, 1327, 533, 1327, 1327, 528, 1327, 532, 1327, + /* 28080 */ 1327, 1327, 1327, 1327, 1327, 503, 1327, 1327, 1327, 1327, + /* 28090 */ 466, 467, 1327, 1327, 1327, 1327, 531, 1327, 504, 1327, + /* 28100 */ 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 519, + /* 28110 */ 494, 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, 1327, + /* 28120 */ 1327, 1327, 1327, 1327, 1327, 1327, 505, 518, 517, 516, + /* 28130 */ 515, 514, 513, 512, 534, 1327, 533, 1327, 1327, 1327, + /* 28140 */ 528, 1327, 1327, 532, 1327, 1327, 1327, 1327, 503, 1327, + /* 28150 */ 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, 1327, 1327, + /* 28160 */ 1327, 531, 1327, 504, 1327, 1327, 530, 1327, 1327, 1327, + /* 28170 */ 1327, 1327, 1327, 519, 496, 1327, 1327, 1327, 1327, 529, + /* 28180 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, + /* 28190 */ 518, 517, 516, 515, 514, 513, 512, 1327, 534, 1327, + /* 28200 */ 533, 1327, 1327, 1327, 1327, 528, 532, 1327, 1327, 1327, + /* 28210 */ 1327, 1327, 503, 1327, 1327, 1327, 1327, 1327, 1327, 466, + /* 28220 */ 467, 1327, 1327, 1327, 531, 1327, 504, 1327, 1327, 530, + /* 28230 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 519, 498, + /* 28240 */ 1327, 1327, 529, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28250 */ 1327, 1327, 1327, 505, 518, 517, 516, 515, 514, 513, + /* 28260 */ 512, 1327, 1327, 534, 1327, 533, 1327, 1327, 528, 1327, + /* 28270 */ 532, 1327, 1327, 1327, 1327, 1327, 1327, 503, 1327, 1327, + /* 28280 */ 1327, 1327, 466, 467, 1327, 1327, 1327, 1327, 531, 1327, + /* 28290 */ 504, 1327, 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28300 */ 1327, 519, 500, 1327, 1327, 1327, 529, 1327, 1327, 1327, + /* 28310 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, 518, + /* 28320 */ 517, 516, 515, 514, 513, 512, 534, 1327, 533, 1327, + /* 28330 */ 1327, 1327, 528, 1327, 1327, 532, 1327, 1327, 1327, 1327, + /* 28340 */ 503, 1327, 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, + /* 28350 */ 1327, 1327, 1327, 531, 1327, 504, 1327, 1327, 530, 1327, + /* 28360 */ 1327, 1327, 1327, 1327, 1327, 519, 502, 1327, 1327, 1327, + /* 28370 */ 1327, 529, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28380 */ 1327, 505, 518, 517, 516, 515, 514, 513, 512, 1327, + /* 28390 */ 534, 1327, 533, 1327, 1327, 1327, 1327, 528, 532, 1327, + /* 28400 */ 1327, 1327, 1327, 1327, 503, 1327, 1327, 1327, 1327, 1327, + /* 28410 */ 1327, 466, 467, 1327, 1327, 1327, 531, 1327, 504, 1327, + /* 28420 */ 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28430 */ 519, 508, 1327, 1327, 529, 1327, 1327, 1327, 1327, 1327, + /* 28440 */ 1327, 1327, 1327, 1327, 1327, 505, 518, 517, 516, 515, + /* 28450 */ 514, 513, 512, 1327, 1327, 534, 1327, 533, 1327, 1327, + /* 28460 */ 528, 1327, 532, 1327, 1327, 1327, 1327, 1327, 1327, 503, + /* 28470 */ 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, 1327, 1327, + /* 28480 */ 531, 1327, 504, 1327, 1327, 530, 1327, 1327, 1327, 1327, + /* 28490 */ 1327, 1327, 1327, 519, 509, 1327, 1327, 1327, 529, 1327, + /* 28500 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28510 */ 505, 518, 517, 516, 515, 514, 513, 512, 534, 1327, + /* 28520 */ 533, 1327, 1327, 1327, 528, 1327, 1327, 532, 1327, 1327, + /* 28530 */ 1327, 1327, 503, 1327, 1327, 1327, 1327, 1327, 466, 467, + /* 28540 */ 1327, 1327, 1327, 1327, 1327, 531, 1327, 504, 1327, 1327, + /* 28550 */ 530, 1327, 1327, 1327, 1327, 1327, 1327, 519, 510, 1327, + /* 28560 */ 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28570 */ 1327, 1327, 1327, 505, 518, 517, 516, 515, 514, 513, + /* 28580 */ 512, 1327, 534, 1327, 533, 1327, 1327, 1327, 1327, 528, + /* 28590 */ 532, 1327, 1327, 1327, 1327, 1327, 503, 1327, 1327, 1327, + /* 28600 */ 1327, 1327, 1327, 466, 467, 1327, 1327, 1327, 531, 1327, + /* 28610 */ 504, 1327, 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28620 */ 1327, 1327, 519, 511, 1327, 1327, 529, 1327, 1327, 1327, + /* 28630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 505, 518, 517, + /* 28640 */ 516, 515, 514, 513, 512, 1327, 1327, 534, 1327, 533, + /* 28650 */ 1327, 1327, 528, 1327, 532, 1327, 1327, 1327, 1327, 1327, + /* 28660 */ 1327, 503, 1327, 1327, 1327, 1327, 466, 467, 1327, 1327, + /* 28670 */ 1327, 1327, 531, 1327, 504, 1327, 1327, 530, 1327, 1327, + /* 28680 */ 1327, 1327, 1327, 1327, 1327, 519, 520, 1327, 1327, 1327, + /* 28690 */ 529, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28700 */ 1327, 1327, 505, 518, 517, 516, 515, 514, 513, 512, + /* 28710 */ 534, 1327, 533, 1327, 1327, 1327, 528, 1327, 1327, 532, + /* 28720 */ 1327, 1327, 1327, 1327, 503, 1327, 1327, 1327, 1327, 1327, + /* 28730 */ 466, 467, 1327, 1327, 1327, 1327, 1327, 531, 1327, 504, + /* 28740 */ 1327, 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, 519, + /* 28750 */ 810, 1327, 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, + /* 28760 */ 1327, 1327, 1327, 1327, 1327, 505, 518, 517, 516, 515, + /* 28770 */ 514, 513, 512, 1327, 534, 1327, 533, 1327, 1327, 1327, + /* 28780 */ 1327, 528, 532, 1327, 1327, 1327, 1327, 1327, 503, 1327, + /* 28790 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28800 */ 531, 1327, 504, 1327, 576, 530, 1327, 308, 307, 1327, + /* 28810 */ 1503, 1327, 1327, 1503, 1503, 1327, 1327, 1327, 529, 1327, + /* 28820 */ 1503, 1327, 1327, 1327, 1327, 1503, 1327, 1327, 1327, 505, + /* 28830 */ 518, 517, 516, 515, 514, 513, 512, 87, 412, 1327, + /* 28840 */ 1327, 254, 178, 1327, 528, 253, 532, 1327, 1327, 1327, + /* 28850 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 578, 1327, 252, + /* 28860 */ 1327, 251, 1327, 1327, 531, 1327, 504, 1503, 1503, 530, + /* 28870 */ 1503, 1327, 1503, 1327, 1503, 1327, 1327, 1327, 1503, 1327, + /* 28880 */ 1327, 1327, 529, 1503, 1327, 1503, 1327, 1327, 1327, 1327, + /* 28890 */ 1503, 1327, 1327, 1327, 250, 1327, 1327, 1327, 1327, 1327, + /* 28900 */ 1327, 1327, 1327, 1503, 1327, 1327, 1327, 1502, 528, 1327, + /* 28910 */ 1502, 1502, 1503, 249, 1327, 1327, 1327, 1502, 1327, 1327, + /* 28920 */ 1327, 1503, 1502, 1503, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28930 */ 1503, 1327, 1327, 1327, 1327, 1503, 1327, 1327, 1503, 1327, + /* 28940 */ 1327, 1327, 1327, 248, 1327, 1327, 1327, 1327, 1327, 1327, + /* 28950 */ 1327, 1327, 247, 1327, 1327, 1327, 1327, 576, 1327, 1327, + /* 28960 */ 308, 307, 1327, 1327, 1502, 1502, 246, 1502, 245, 1502, + /* 28970 */ 1327, 1502, 1327, 1327, 1327, 1502, 1327, 1327, 1327, 1327, + /* 28980 */ 1502, 1327, 1502, 1327, 244, 1327, 1327, 1502, 1327, 1327, + /* 28990 */ 88, 412, 1327, 1327, 254, 178, 1327, 1327, 253, 1327, + /* 29000 */ 1502, 1327, 1327, 1327, 576, 1327, 1327, 308, 307, 1502, + /* 29010 */ 578, 1327, 252, 1327, 251, 1327, 1327, 1327, 1502, 1327, + /* 29020 */ 1502, 1327, 1327, 1327, 1327, 1327, 1327, 1502, 647, 645, + /* 29030 */ 1327, 1327, 1502, 1327, 1327, 1502, 1327, 85, 412, 1327, + /* 29040 */ 1327, 254, 178, 1327, 1327, 253, 1327, 250, 1327, 1327, + /* 29050 */ 649, 673, 672, 671, 670, 1327, 1327, 578, 1327, 252, + /* 29060 */ 1327, 251, 1327, 1327, 1327, 576, 249, 639, 308, 307, + /* 29070 */ 1327, 1327, 534, 1327, 533, 1327, 1327, 1327, 1327, 1327, + /* 29080 */ 1327, 1327, 1327, 1327, 1327, 646, 648, 1327, 1327, 1327, + /* 29090 */ 1327, 1327, 1327, 1327, 250, 1327, 248, 1327, 89, 412, + /* 29100 */ 1327, 1327, 254, 178, 1327, 247, 253, 1327, 576, 1327, + /* 29110 */ 1327, 308, 307, 249, 1327, 1327, 1327, 1327, 578, 246, + /* 29120 */ 252, 245, 251, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29130 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 244, 1327, 1327, + /* 29140 */ 1327, 90, 412, 248, 532, 254, 178, 1327, 1327, 253, + /* 29150 */ 1327, 1327, 247, 1327, 1327, 250, 1327, 1327, 1327, 1327, + /* 29160 */ 1327, 578, 531, 252, 1327, 251, 246, 530, 245, 1327, + /* 29170 */ 1327, 1327, 1327, 576, 249, 1327, 308, 307, 1327, 1327, + /* 29180 */ 529, 1327, 1327, 1327, 244, 1327, 1327, 1327, 1327, 1327, + /* 29190 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 250, 1327, + /* 29200 */ 1327, 1327, 1327, 1327, 248, 1327, 528, 272, 1327, 1327, + /* 29210 */ 254, 178, 1327, 247, 253, 1327, 1327, 249, 1327, 1327, + /* 29220 */ 1327, 1327, 1327, 1327, 1327, 1327, 578, 246, 252, 245, + /* 29230 */ 251, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29240 */ 1327, 1327, 1327, 1327, 1327, 244, 1327, 248, 1327, 1327, + /* 29250 */ 1327, 647, 645, 1327, 1327, 1327, 247, 1327, 1327, 1327, + /* 29260 */ 1327, 647, 645, 250, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29270 */ 246, 1327, 245, 649, 673, 672, 671, 670, 1327, 1327, + /* 29280 */ 1327, 1327, 249, 649, 673, 672, 671, 670, 244, 1327, + /* 29290 */ 641, 1327, 1327, 1327, 1327, 534, 1327, 533, 1327, 1327, + /* 29300 */ 642, 1327, 1327, 647, 645, 534, 1327, 533, 646, 648, + /* 29310 */ 1327, 1327, 248, 1327, 1327, 1327, 1327, 1327, 646, 648, + /* 29320 */ 1327, 247, 1327, 1327, 1327, 649, 673, 672, 671, 670, + /* 29330 */ 1327, 1327, 1327, 1327, 1327, 246, 1327, 245, 1327, 1327, + /* 29340 */ 1327, 1327, 643, 1327, 1327, 1327, 1327, 534, 1327, 533, + /* 29350 */ 1327, 1327, 1327, 244, 1327, 1327, 1327, 1327, 647, 645, + /* 29360 */ 646, 648, 1327, 1327, 1327, 1327, 1327, 532, 1327, 1327, + /* 29370 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 532, 1327, 1327, + /* 29380 */ 649, 673, 672, 671, 670, 531, 1327, 1327, 1327, 1327, + /* 29390 */ 530, 1327, 1327, 1327, 1327, 531, 1327, 668, 1327, 1327, + /* 29400 */ 530, 1327, 534, 529, 533, 1327, 1327, 1327, 1327, 1327, + /* 29410 */ 1327, 1327, 1327, 529, 1327, 646, 648, 1327, 1327, 532, + /* 29420 */ 1327, 647, 645, 1327, 1327, 1327, 1327, 1327, 1327, 528, + /* 29430 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 531, 1327, 528, + /* 29440 */ 1327, 1327, 530, 649, 673, 672, 671, 670, 1327, 1327, + /* 29450 */ 1327, 1327, 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, + /* 29460 */ 669, 1327, 647, 645, 1327, 534, 1327, 533, 1327, 1327, + /* 29470 */ 1327, 1327, 1327, 1327, 532, 1327, 1327, 1327, 646, 648, + /* 29480 */ 1327, 528, 1327, 1327, 649, 673, 672, 671, 670, 1327, + /* 29490 */ 1327, 1327, 531, 1327, 1327, 1327, 1327, 530, 1327, 1327, + /* 29500 */ 1327, 821, 1327, 1327, 1327, 1327, 534, 1327, 533, 1327, + /* 29510 */ 529, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 646, + /* 29520 */ 648, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29530 */ 1327, 1327, 1327, 1327, 1327, 1327, 528, 532, 1327, 1327, + /* 29540 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29550 */ 1327, 1327, 1327, 1327, 1327, 531, 1327, 1327, 1327, 1327, + /* 29560 */ 530, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29570 */ 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, 532, 1327, + /* 29580 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29590 */ 1327, 1327, 1327, 1327, 1327, 1327, 531, 1327, 1327, 528, + /* 29600 */ 1327, 530, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29610 */ 1327, 1327, 1327, 1327, 529, 1327, 1327, 1327, 1327, 1327, + /* 29620 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29630 */ 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, 1327, + /* 29640 */ 528, }; static const YYCODETYPE yy_lookahead[] = { - /* 0 */ 11, 12, 28, 11, 12, 31, 66, 15, 16, 17, - /* 10 */ 18, 80, 23, 21, 22, 26, 27, 28, 24, 25, - /* 20 */ 26, 123, 124, 34, 125, 127, 13, 14, 167, 131, - /* 30 */ 132, 133, 19, 39, 136, 95, 138, 139, 49, 30, - /* 40 */ 142, 143, 144, 145, 34, 56, 57, 19, 20, 34, - /* 50 */ 11, 12, 191, 129, 65, 40, 28, 235, 159, 70, - /* 60 */ 162, 239, 23, 74, 27, 26, 27, 33, 29, 80, - /* 70 */ 167, 34, 169, 34, 170, 65, 87, 88, 89, 90, - /* 80 */ 91, 241, 260, 261, 262, 263, 264, 72, 49, 100, - /* 90 */ 33, 251, 252, 253, 191, 56, 57, 19, 20, 129, - /* 100 */ 11, 12, 65, 179, 65, 19, 28, 209, 129, 70, - /* 110 */ 186, 74, 23, 74, 274, 26, 27, 193, 26, 80, - /* 120 */ 24, 25, 26, 34, 170, 33, 87, 88, 89, 90, - /* 130 */ 91, 94, 212, 213, 214, 215, 27, 217, 49, 100, - /* 140 */ 51, 221, 174, 164, 165, 56, 57, 24, 25, 26, - /* 150 */ 11, 12, 22, 183, 65, 212, 213, 214, 215, 70, - /* 160 */ 217, 182, 23, 74, 221, 26, 27, 136, 34, 80, - /* 170 */ 168, 267, 268, 34, 206, 207, 87, 88, 89, 90, - /* 180 */ 91, 212, 213, 214, 215, 129, 217, 129, 49, 100, - /* 190 */ 221, 30, 31, 19, 20, 56, 57, 19, 20, 229, - /* 200 */ 11, 12, 28, 136, 65, 212, 213, 214, 215, 70, - /* 210 */ 217, 26, 23, 74, 221, 26, 27, 62, 33, 80, - /* 220 */ 111, 267, 268, 34, 69, 34, 87, 88, 89, 90, - /* 230 */ 91, 113, 114, 115, 79, 0, 178, 179, 49, 100, - /* 240 */ 241, 148, 186, 129, 186, 56, 57, 30, 128, 193, - /* 250 */ 33, 193, 253, 98, 65, 27, 136, 255, 30, 70, - /* 260 */ 11, 12, 107, 74, 15, 16, 17, 18, 135, 80, - /* 270 */ 21, 22, 117, 274, 243, 244, 87, 88, 89, 90, - /* 280 */ 91, 1, 2, 3, 31, 5, 6, 7, 8, 100, - /* 290 */ 10, 11, 12, 173, 180, 15, 16, 17, 18, 50, - /* 300 */ 128, 21, 22, 27, 58, 128, 134, 29, 136, 31, - /* 310 */ 243, 244, 27, 136, 79, 195, 196, 197, 198, 199, - /* 320 */ 200, 201, 202, 203, 204, 205, 32, 194, 34, 83, - /* 330 */ 210, 85, 38, 129, 40, 41, 42, 43, 44, 45, - /* 340 */ 46, 47, 228, 28, 109, 28, 31, 27, 128, 256, - /* 350 */ 173, 211, 212, 30, 31, 215, 136, 237, 218, 219, - /* 360 */ 220, 136, 222, 223, 111, 71, 72, 73, 77, 78, - /* 370 */ 34, 146, 195, 196, 197, 198, 199, 200, 201, 202, - /* 380 */ 203, 204, 205, 15, 16, 17, 18, 210, 101, 21, - /* 390 */ 22, 212, 128, 173, 215, 216, 34, 218, 219, 220, - /* 400 */ 136, 222, 223, 30, 225, 26, 149, 150, 151, 152, - /* 410 */ 28, 154, 33, 31, 237, 195, 196, 197, 198, 199, - /* 420 */ 200, 201, 202, 203, 204, 205, 129, 65, 111, 250, - /* 430 */ 210, 111, 228, 208, 11, 12, 74, 173, 15, 16, - /* 440 */ 17, 18, 128, 185, 21, 22, 30, 31, 136, 30, - /* 450 */ 136, 26, 29, 30, 275, 136, 157, 237, 33, 195, - /* 460 */ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - /* 470 */ 28, 11, 12, 31, 210, 15, 16, 17, 18, 30, - /* 480 */ 31, 21, 22, 28, 265, 128, 31, 173, 230, 29, - /* 490 */ 193, 234, 273, 136, 95, 34, 271, 240, 241, 242, - /* 500 */ 26, 237, 245, 246, 247, 248, 249, 33, 33, 195, - /* 510 */ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - /* 520 */ 208, 60, 33, 136, 210, 28, 65, 208, 31, 128, - /* 530 */ 173, 129, 26, 146, 34, 278, 237, 136, 38, 33, - /* 540 */ 40, 41, 42, 43, 44, 45, 46, 47, 160, 161, - /* 550 */ 66, 237, 195, 196, 197, 198, 199, 200, 201, 202, - /* 560 */ 203, 204, 205, 63, 177, 175, 176, 210, 26, 211, - /* 570 */ 212, 71, 72, 215, 173, 33, 218, 219, 220, 128, - /* 580 */ 222, 223, 28, 271, 26, 31, 26, 136, 175, 176, - /* 590 */ 271, 33, 171, 33, 237, 208, 195, 196, 197, 198, - /* 600 */ 199, 200, 201, 202, 203, 204, 205, 276, 277, 25, - /* 610 */ 110, 210, 212, 213, 214, 215, 171, 217, 257, 258, - /* 620 */ 140, 221, 128, 34, 173, 24, 27, 34, 211, 212, - /* 630 */ 136, 229, 215, 212, 34, 218, 219, 220, 237, 222, - /* 640 */ 223, 30, 39, 30, 36, 27, 195, 196, 197, 198, - /* 650 */ 199, 200, 201, 202, 203, 204, 205, 212, 271, 149, - /* 660 */ 150, 210, 34, 34, 154, 65, 156, 173, 33, 1, - /* 670 */ 2, 3, 4, 5, 6, 7, 8, 9, 10, 149, - /* 680 */ 150, 13, 14, 33, 154, 79, 156, 19, 237, 195, - /* 690 */ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, - /* 700 */ 212, 213, 214, 215, 210, 217, 149, 150, 61, 221, - /* 710 */ 111, 154, 33, 156, 111, 109, 33, 237, 50, 115, - /* 720 */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - /* 730 */ 27, 237, 13, 14, 27, 33, 212, 27, 19, 34, - /* 740 */ 34, 37, 232, 233, 234, 235, 236, 28, 224, 120, - /* 750 */ 36, 55, 77, 104, 39, 245, 246, 247, 248, 249, - /* 760 */ 104, 30, 232, 233, 234, 235, 236, 34, 111, 53, - /* 770 */ 30, 39, 59, 30, 33, 245, 246, 247, 248, 249, - /* 780 */ 34, 33, 33, 33, 30, 34, 33, 93, 278, 232, - /* 790 */ 233, 234, 235, 236, 34, 97, 116, 33, 27, 1, - /* 800 */ 34, 106, 245, 246, 247, 248, 249, 68, 278, 36, - /* 810 */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - /* 820 */ 27, 84, 13, 14, 212, 213, 214, 215, 19, 217, - /* 830 */ 34, 34, 108, 221, 82, 278, 34, 34, 269, 30, - /* 840 */ 84, 1, 2, 3, 4, 5, 6, 7, 8, 9, - /* 850 */ 10, 270, 238, 13, 14, 155, 239, 237, 111, 19, - /* 860 */ 237, 1, 2, 3, 4, 5, 6, 7, 8, 9, - /* 870 */ 10, 153, 227, 13, 14, 26, 11, 12, 27, 19, - /* 880 */ 15, 16, 17, 18, 157, 141, 21, 22, 28, 27, - /* 890 */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - /* 900 */ 141, 189, 13, 14, 212, 213, 214, 215, 19, 217, - /* 910 */ 141, 96, 189, 221, 49, 141, 95, 28, 137, 1, - /* 920 */ 2, 3, 4, 5, 6, 7, 8, 9, 10, 39, - /* 930 */ 192, 13, 14, 86, 192, 34, 237, 19, 212, 213, - /* 940 */ 214, 215, 102, 217, 181, 184, 212, 221, 30, 95, - /* 950 */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - /* 960 */ 190, 66, 13, 14, 174, 58, 237, 212, 19, 62, - /* 970 */ 212, 213, 214, 215, 212, 217, 69, 212, 29, 221, - /* 980 */ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - /* 990 */ 126, 127, 13, 14, 237, 131, 132, 133, 19, 92, - /* 1000 */ 136, 113, 138, 139, 237, 98, 142, 143, 144, 145, - /* 1010 */ 118, 212, 33, 237, 1, 2, 3, 4, 5, 6, - /* 1020 */ 7, 8, 9, 10, 117, 237, 13, 14, 237, 237, - /* 1030 */ 148, 237, 19, 120, 1, 2, 3, 4, 5, 6, - /* 1040 */ 7, 8, 9, 10, 237, 237, 13, 14, 237, 147, - /* 1050 */ 237, 237, 19, 237, 1, 2, 3, 4, 5, 6, - /* 1060 */ 7, 8, 9, 10, 147, 237, 13, 14, 237, 149, - /* 1070 */ 150, 237, 19, 209, 154, 212, 213, 214, 215, 237, - /* 1080 */ 217, 28, 34, 254, 221, 170, 34, 237, 192, 76, - /* 1090 */ 192, 1, 2, 3, 4, 5, 6, 7, 8, 9, - /* 1100 */ 10, 34, 272, 13, 14, 237, 237, 237, 168, 19, - /* 1110 */ 27, 237, 237, 172, 81, 27, 1, 2, 3, 4, - /* 1120 */ 5, 6, 7, 8, 9, 10, 127, 170, 13, 14, - /* 1130 */ 131, 237, 133, 175, 19, 136, 237, 138, 139, 119, - /* 1140 */ 237, 142, 143, 128, 145, 34, 230, 237, 237, 27, - /* 1150 */ 259, 136, 232, 233, 234, 235, 236, 257, 34, 237, - /* 1160 */ 237, 237, 237, 48, 128, 245, 246, 247, 248, 249, - /* 1170 */ 127, 259, 136, 136, 131, 132, 133, 188, 227, 136, - /* 1180 */ 237, 138, 139, 146, 237, 142, 143, 144, 145, 227, - /* 1190 */ 227, 237, 227, 227, 212, 213, 214, 215, 278, 217, - /* 1200 */ 129, 111, 227, 221, 237, 188, 163, 227, 209, 188, - /* 1210 */ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, - /* 1220 */ 205, 212, 213, 214, 215, 210, 217, 227, 227, 237, - /* 1230 */ 221, 195, 196, 197, 198, 199, 200, 201, 202, 203, - /* 1240 */ 204, 205, 226, 126, 127, 208, 210, 266, 131, 132, - /* 1250 */ 133, 194, 209, 136, 194, 138, 139, 130, 67, 142, - /* 1260 */ 143, 144, 145, 237, 1, 2, 3, 4, 5, 6, - /* 1270 */ 7, 8, 9, 10, 231, 158, 13, 14, 237, 127, - /* 1280 */ 187, 237, 19, 131, 132, 133, 237, 187, 136, 34, - /* 1290 */ 138, 139, 279, 279, 142, 143, 144, 145, 127, 34, - /* 1300 */ 35, 136, 131, 132, 133, 279, 279, 136, 271, 138, - /* 1310 */ 139, 146, 279, 142, 143, 144, 145, 52, 279, 54, - /* 1320 */ 279, 279, 279, 279, 279, 279, 209, 279, 279, 64, - /* 1330 */ 65, 279, 279, 279, 211, 212, 279, 166, 215, 74, - /* 1340 */ 75, 218, 219, 220, 34, 222, 223, 279, 38, 279, - /* 1350 */ 40, 41, 42, 43, 44, 45, 46, 47, 279, 279, - /* 1360 */ 279, 209, 279, 279, 99, 279, 279, 279, 103, 279, - /* 1370 */ 105, 279, 279, 208, 279, 279, 111, 112, 279, 279, - /* 1380 */ 209, 71, 72, 231, 127, 279, 279, 279, 131, 132, - /* 1390 */ 133, 279, 279, 136, 279, 138, 139, 279, 279, 142, - /* 1400 */ 143, 144, 145, 127, 279, 279, 136, 131, 132, 133, - /* 1410 */ 279, 279, 136, 279, 138, 139, 146, 279, 142, 143, - /* 1420 */ 144, 145, 127, 279, 279, 279, 131, 132, 133, 279, - /* 1430 */ 279, 136, 279, 138, 139, 279, 271, 142, 143, 144, - /* 1440 */ 145, 127, 279, 279, 279, 131, 132, 133, 279, 279, - /* 1450 */ 136, 279, 138, 139, 279, 279, 142, 143, 144, 145, - /* 1460 */ 279, 279, 279, 279, 279, 127, 209, 279, 279, 131, - /* 1470 */ 132, 133, 279, 279, 136, 279, 138, 139, 208, 279, - /* 1480 */ 142, 143, 144, 145, 127, 209, 279, 279, 131, 132, - /* 1490 */ 133, 279, 279, 136, 279, 138, 139, 279, 279, 142, - /* 1500 */ 143, 144, 145, 279, 209, 279, 279, 279, 279, 127, - /* 1510 */ 279, 279, 279, 131, 132, 133, 279, 279, 136, 279, - /* 1520 */ 138, 139, 279, 209, 142, 143, 144, 145, 127, 279, - /* 1530 */ 279, 279, 131, 132, 133, 279, 279, 136, 279, 138, - /* 1540 */ 139, 271, 279, 142, 143, 144, 145, 209, 279, 279, - /* 1550 */ 279, 279, 279, 279, 279, 279, 127, 279, 279, 279, - /* 1560 */ 131, 132, 133, 279, 279, 136, 209, 138, 139, 279, - /* 1570 */ 279, 142, 143, 144, 145, 279, 279, 279, 127, 279, - /* 1580 */ 279, 279, 131, 132, 133, 279, 279, 136, 279, 138, - /* 1590 */ 139, 209, 279, 142, 143, 144, 145, 127, 279, 279, - /* 1600 */ 279, 131, 132, 133, 279, 279, 136, 279, 138, 139, - /* 1610 */ 209, 279, 142, 143, 144, 145, 127, 279, 279, 279, - /* 1620 */ 131, 132, 133, 279, 279, 136, 279, 138, 139, 279, - /* 1630 */ 279, 142, 143, 144, 145, 279, 279, 127, 209, 279, - /* 1640 */ 279, 131, 132, 133, 279, 279, 136, 279, 138, 139, - /* 1650 */ 279, 279, 142, 143, 144, 145, 279, 279, 279, 279, - /* 1660 */ 209, 279, 279, 279, 279, 127, 279, 279, 279, 131, - /* 1670 */ 132, 133, 279, 279, 136, 279, 138, 139, 279, 209, - /* 1680 */ 142, 143, 144, 145, 127, 279, 279, 279, 131, 132, - /* 1690 */ 133, 279, 279, 136, 279, 138, 139, 279, 209, 142, - /* 1700 */ 143, 144, 145, 279, 279, 279, 127, 279, 279, 279, - /* 1710 */ 131, 132, 133, 279, 279, 136, 279, 138, 139, 209, - /* 1720 */ 279, 142, 143, 144, 145, 127, 279, 279, 279, 131, - /* 1730 */ 132, 133, 279, 279, 136, 279, 138, 139, 279, 279, - /* 1740 */ 142, 143, 144, 145, 127, 279, 279, 209, 131, 132, - /* 1750 */ 133, 279, 279, 136, 279, 138, 139, 279, 279, 142, - /* 1760 */ 143, 144, 145, 279, 279, 127, 209, 279, 279, 131, - /* 1770 */ 132, 133, 279, 279, 136, 279, 138, 139, 279, 279, - /* 1780 */ 142, 143, 144, 145, 279, 279, 279, 279, 209, 279, - /* 1790 */ 279, 279, 279, 127, 279, 279, 279, 131, 132, 133, - /* 1800 */ 279, 279, 136, 279, 138, 139, 279, 209, 142, 143, - /* 1810 */ 144, 145, 127, 279, 279, 279, 131, 132, 133, 279, - /* 1820 */ 279, 136, 279, 138, 139, 279, 209, 142, 143, 144, - /* 1830 */ 145, 279, 279, 279, 127, 279, 279, 279, 131, 132, - /* 1840 */ 133, 279, 279, 136, 279, 138, 139, 209, 279, 142, - /* 1850 */ 143, 144, 145, 127, 279, 279, 279, 131, 132, 133, - /* 1860 */ 279, 279, 136, 279, 138, 139, 279, 279, 142, 143, - /* 1870 */ 144, 145, 127, 279, 279, 209, 131, 132, 133, 279, - /* 1880 */ 279, 136, 279, 138, 139, 279, 279, 142, 143, 144, - /* 1890 */ 145, 279, 279, 127, 209, 279, 279, 131, 132, 133, - /* 1900 */ 279, 279, 136, 279, 138, 139, 279, 279, 142, 143, - /* 1910 */ 144, 145, 279, 279, 279, 279, 209, 279, 279, 279, - /* 1920 */ 279, 127, 279, 279, 279, 131, 132, 133, 279, 279, - /* 1930 */ 136, 279, 138, 139, 279, 209, 142, 143, 144, 145, - /* 1940 */ 127, 279, 279, 279, 131, 132, 133, 279, 279, 136, - /* 1950 */ 279, 138, 139, 279, 209, 142, 143, 144, 145, 279, - /* 1960 */ 279, 279, 127, 279, 279, 279, 131, 132, 133, 279, - /* 1970 */ 279, 136, 279, 138, 139, 209, 279, 142, 143, 144, - /* 1980 */ 145, 127, 279, 279, 279, 131, 132, 133, 279, 279, - /* 1990 */ 136, 279, 138, 139, 279, 279, 142, 143, 144, 145, - /* 2000 */ 127, 279, 279, 209, 131, 132, 133, 279, 279, 136, - /* 2010 */ 279, 138, 139, 279, 279, 142, 143, 144, 145, 279, - /* 2020 */ 279, 127, 209, 279, 279, 131, 132, 133, 279, 279, - /* 2030 */ 136, 279, 138, 139, 279, 279, 142, 143, 144, 145, - /* 2040 */ 279, 279, 279, 279, 209, 279, 279, 279, 279, 127, - /* 2050 */ 279, 279, 279, 131, 132, 133, 279, 279, 136, 279, - /* 2060 */ 138, 139, 279, 209, 142, 143, 144, 145, 127, 279, - /* 2070 */ 279, 279, 131, 132, 133, 279, 279, 136, 279, 138, - /* 2080 */ 139, 279, 209, 142, 143, 144, 145, 279, 279, 279, - /* 2090 */ 127, 279, 279, 279, 131, 132, 133, 279, 279, 136, - /* 2100 */ 279, 138, 139, 209, 279, 142, 143, 144, 145, 127, - /* 2110 */ 279, 279, 279, 131, 132, 133, 279, 279, 136, 279, - /* 2120 */ 138, 139, 279, 279, 142, 143, 144, 145, 127, 279, - /* 2130 */ 279, 209, 131, 132, 133, 279, 279, 136, 279, 138, - /* 2140 */ 139, 279, 279, 142, 143, 144, 145, 279, 279, 127, - /* 2150 */ 209, 279, 279, 131, 132, 133, 279, 279, 136, 279, - /* 2160 */ 138, 139, 279, 279, 142, 143, 144, 145, 279, 279, - /* 2170 */ 279, 279, 209, 279, 279, 279, 279, 127, 34, 35, - /* 2180 */ 279, 131, 132, 133, 279, 279, 136, 279, 138, 139, - /* 2190 */ 279, 209, 142, 143, 144, 145, 52, 279, 54, 279, - /* 2200 */ 279, 279, 279, 279, 279, 279, 279, 279, 64, 65, - /* 2210 */ 209, 127, 279, 279, 279, 131, 279, 133, 74, 75, - /* 2220 */ 136, 279, 138, 139, 279, 279, 142, 143, 144, 145, - /* 2230 */ 279, 209, 279, 279, 279, 279, 279, 279, 279, 279, - /* 2240 */ 279, 279, 279, 99, 279, 279, 127, 103, 279, 105, - /* 2250 */ 131, 279, 133, 279, 279, 136, 112, 138, 139, 209, - /* 2260 */ 279, 142, 143, 144, 145, 127, 279, 279, 279, 131, - /* 2270 */ 279, 133, 279, 279, 136, 279, 138, 139, 279, 279, - /* 2280 */ 142, 143, 144, 145, 279, 279, 127, 279, 279, 279, - /* 2290 */ 131, 279, 133, 209, 279, 136, 279, 138, 139, 279, - /* 2300 */ 279, 142, 143, 144, 145, 127, 279, 279, 279, 131, - /* 2310 */ 279, 133, 279, 279, 136, 279, 138, 139, 279, 279, - /* 2320 */ 142, 143, 144, 145, 279, 279, 127, 279, 209, 279, - /* 2330 */ 131, 279, 133, 279, 279, 136, 279, 138, 139, 279, - /* 2340 */ 279, 142, 143, 144, 145, 127, 279, 209, 279, 131, - /* 2350 */ 279, 133, 279, 279, 136, 279, 138, 139, 279, 279, - /* 2360 */ 142, 143, 144, 145, 279, 279, 279, 279, 209, 279, - /* 2370 */ 279, 279, 279, 279, 127, 279, 279, 279, 131, 279, - /* 2380 */ 133, 279, 279, 136, 279, 138, 139, 209, 279, 142, - /* 2390 */ 143, 144, 145, 279, 279, 211, 212, 279, 279, 215, - /* 2400 */ 279, 279, 218, 219, 220, 127, 222, 223, 209, 131, - /* 2410 */ 279, 133, 279, 279, 136, 279, 138, 139, 279, 279, - /* 2420 */ 142, 143, 144, 145, 279, 127, 279, 209, 279, 131, - /* 2430 */ 279, 133, 279, 279, 136, 279, 138, 139, 279, 279, - /* 2440 */ 142, 143, 144, 145, 279, 279, 279, 279, 127, 279, - /* 2450 */ 279, 279, 131, 279, 133, 279, 209, 136, 279, 138, - /* 2460 */ 139, 279, 279, 142, 143, 144, 145, 279, 279, 279, - /* 2470 */ 279, 279, 279, 127, 279, 279, 279, 131, 279, 133, - /* 2480 */ 279, 279, 136, 279, 138, 139, 279, 209, 142, 143, - /* 2490 */ 144, 145, 211, 212, 279, 279, 215, 279, 279, 218, - /* 2500 */ 219, 220, 127, 222, 223, 279, 131, 209, 133, 279, - /* 2510 */ 279, 136, 279, 138, 139, 279, 279, 142, 143, 144, - /* 2520 */ 145, 279, 279, 279, 279, 279, 279, 279, 279, 279, - /* 2530 */ 209, 279, 279, 127, 279, 279, 279, 131, 279, 133, - /* 2540 */ 279, 279, 136, 279, 138, 139, 279, 279, 142, 143, - /* 2550 */ 144, 145, 279, 127, 279, 209, 279, 131, 279, 133, - /* 2560 */ 279, 279, 136, 279, 138, 139, 279, 279, 142, 143, - /* 2570 */ 127, 145, 279, 279, 131, 279, 133, 279, 279, 136, - /* 2580 */ 279, 138, 139, 279, 209, 142, 143, 279, 145, 279, - /* 2590 */ 211, 212, 279, 279, 215, 279, 279, 218, 219, 220, - /* 2600 */ 279, 222, 223, 279, 279, 279, 279, 279, 279, 279, - /* 2610 */ 279, 279, 279, 279, 279, 209, 211, 212, 279, 279, - /* 2620 */ 215, 279, 279, 218, 219, 220, 279, 222, 223, 211, - /* 2630 */ 212, 279, 279, 215, 279, 209, 218, 219, 220, 279, - /* 2640 */ 222, 223, 279, 279, 279, 279, 211, 212, 279, 279, - /* 2650 */ 215, 279, 209, 218, 219, 220, 279, 222, 223, + /* 0 */ 218, 219, 176, 362, 321, 189, 190, 191, 192, 191, + /* 10 */ 192, 195, 193, 194, 192, 15, 16, 189, 190, 191, + /* 20 */ 192, 218, 219, 195, 218, 219, 26, 225, 28, 326, + /* 30 */ 30, 390, 391, 358, 359, 191, 192, 37, 38, 39, + /* 40 */ 40, 41, 42, 43, 44, 45, 363, 228, 48, 39, + /* 50 */ 40, 358, 359, 53, 40, 55, 37, 38, 39, 40, + /* 60 */ 266, 267, 43, 63, 64, 65, 66, 67, 68, 69, + /* 70 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 80 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 90 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 100 */ 100, 101, 19, 35, 40, 30, 31, 24, 30, 45, + /* 110 */ 28, 111, 112, 204, 31, 33, 34, 29, 118, 31, + /* 120 */ 120, 121, 192, 48, 49, 125, 48, 197, 128, 129, + /* 130 */ 130, 48, 49, 133, 134, 135, 48, 49, 35, 139, + /* 140 */ 52, 59, 142, 48, 48, 327, 328, 192, 45, 149, + /* 150 */ 150, 151, 152, 331, 332, 333, 35, 157, 158, 159, + /* 160 */ 160, 345, 346, 154, 192, 15, 16, 19, 65, 353, + /* 170 */ 170, 327, 192, 30, 346, 32, 26, 220, 28, 31, + /* 180 */ 30, 353, 35, 40, 48, 107, 65, 37, 38, 39, + /* 190 */ 40, 41, 42, 43, 44, 45, 48, 49, 48, 377, + /* 200 */ 378, 379, 380, 53, 184, 55, 46, 47, 48, 141, + /* 210 */ 122, 123, 137, 63, 64, 65, 66, 67, 68, 69, + /* 220 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 230 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 240 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 250 */ 100, 101, 232, 233, 159, 160, 168, 106, 221, 171, + /* 260 */ 164, 111, 112, 183, 113, 308, 309, 310, 118, 197, + /* 270 */ 120, 121, 191, 192, 184, 125, 192, 31, 128, 129, + /* 280 */ 130, 261, 226, 133, 134, 135, 331, 187, 333, 139, + /* 290 */ 234, 140, 142, 192, 48, 159, 160, 197, 29, 149, + /* 300 */ 150, 151, 152, 331, 153, 333, 155, 157, 158, 159, + /* 310 */ 160, 331, 35, 333, 163, 15, 16, 166, 49, 182, + /* 320 */ 170, 52, 232, 233, 164, 48, 26, 45, 28, 35, + /* 330 */ 30, 192, 377, 378, 379, 380, 197, 37, 38, 39, + /* 340 */ 40, 41, 42, 43, 44, 45, 35, 65, 48, 377, + /* 350 */ 378, 379, 380, 53, 298, 55, 0, 377, 378, 379, + /* 360 */ 380, 341, 306, 63, 64, 65, 66, 67, 68, 69, + /* 370 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 380 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 390 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 400 */ 100, 101, 322, 323, 324, 182, 316, 317, 327, 328, + /* 410 */ 31, 111, 112, 341, 282, 331, 344, 333, 118, 35, + /* 420 */ 120, 121, 285, 286, 184, 125, 19, 48, 128, 129, + /* 430 */ 130, 341, 331, 133, 134, 135, 187, 35, 31, 139, + /* 440 */ 48, 341, 142, 51, 344, 168, 197, 45, 171, 149, + /* 450 */ 150, 151, 152, 30, 31, 48, 49, 157, 158, 159, + /* 460 */ 160, 377, 378, 379, 380, 15, 16, 65, 387, 35, + /* 470 */ 170, 48, 232, 233, 41, 42, 26, 340, 28, 347, + /* 480 */ 30, 380, 59, 185, 384, 385, 386, 37, 38, 39, + /* 490 */ 40, 41, 42, 43, 44, 45, 48, 49, 48, 107, + /* 500 */ 52, 49, 35, 53, 52, 55, 54, 105, 285, 286, + /* 510 */ 154, 59, 289, 63, 64, 65, 66, 67, 68, 69, + /* 520 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 530 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 540 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 550 */ 100, 101, 30, 28, 35, 182, 316, 106, 33, 34, + /* 560 */ 31, 111, 112, 183, 113, 360, 132, 29, 118, 374, + /* 570 */ 120, 121, 170, 48, 184, 125, 278, 48, 128, 129, + /* 580 */ 130, 341, 35, 133, 134, 135, 48, 192, 59, 139, + /* 590 */ 341, 140, 142, 344, 146, 143, 47, 48, 192, 149, + /* 600 */ 150, 151, 152, 197, 153, 58, 155, 157, 158, 159, + /* 610 */ 160, 30, 65, 32, 163, 15, 16, 166, 0, 28, + /* 620 */ 170, 40, 232, 233, 33, 34, 26, 46, 28, 107, + /* 630 */ 30, 364, 365, 167, 385, 386, 170, 37, 38, 39, + /* 640 */ 40, 41, 42, 43, 44, 45, 225, 30, 48, 32, + /* 650 */ 59, 48, 105, 53, 51, 55, 110, 40, 285, 286, + /* 660 */ 141, 123, 116, 63, 64, 65, 66, 67, 68, 69, + /* 670 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 680 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 690 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 700 */ 100, 101, 156, 323, 324, 182, 168, 106, 225, 171, + /* 710 */ 107, 111, 112, 164, 113, 19, 192, 170, 118, 31, + /* 720 */ 120, 121, 268, 191, 192, 125, 331, 31, 128, 129, + /* 730 */ 130, 341, 35, 133, 134, 135, 48, 183, 35, 139, + /* 740 */ 52, 140, 142, 162, 48, 49, 165, 59, 198, 149, + /* 750 */ 150, 151, 152, 236, 153, 58, 155, 157, 158, 159, + /* 760 */ 160, 30, 65, 32, 163, 15, 16, 166, 31, 182, + /* 770 */ 170, 40, 154, 378, 379, 380, 26, 46, 28, 162, + /* 780 */ 30, 192, 165, 31, 199, 200, 49, 37, 38, 39, + /* 790 */ 40, 41, 42, 43, 44, 45, 0, 30, 48, 32, + /* 800 */ 48, 48, 105, 53, 52, 55, 103, 40, 285, 286, + /* 810 */ 7, 59, 9, 63, 64, 65, 66, 67, 68, 69, + /* 820 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 830 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 840 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 850 */ 100, 101, 364, 365, 28, 182, 302, 106, 192, 327, + /* 860 */ 275, 111, 112, 197, 113, 48, 197, 170, 118, 0, + /* 870 */ 120, 121, 285, 286, 137, 125, 123, 51, 128, 129, + /* 880 */ 130, 357, 19, 133, 134, 135, 48, 24, 48, 139, + /* 890 */ 236, 140, 142, 162, 31, 30, 165, 32, 366, 149, + /* 900 */ 150, 151, 152, 349, 153, 40, 155, 157, 158, 159, + /* 910 */ 160, 48, 49, 28, 163, 15, 16, 166, 33, 34, + /* 920 */ 170, 168, 19, 373, 171, 108, 26, 24, 28, 162, + /* 930 */ 30, 276, 165, 48, 31, 364, 365, 37, 38, 39, + /* 940 */ 40, 41, 42, 43, 44, 45, 357, 192, 48, 192, + /* 950 */ 154, 48, 49, 53, 197, 55, 371, 372, 285, 286, + /* 960 */ 276, 376, 48, 63, 64, 65, 66, 67, 68, 69, + /* 970 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 980 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 990 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 1000 */ 100, 101, 49, 28, 40, 52, 168, 106, 168, 171, + /* 1010 */ 341, 111, 112, 344, 113, 250, 251, 350, 118, 31, + /* 1020 */ 120, 121, 186, 154, 60, 125, 51, 162, 128, 129, + /* 1030 */ 130, 201, 19, 133, 134, 135, 48, 24, 48, 139, + /* 1040 */ 48, 140, 142, 51, 31, 30, 31, 59, 212, 149, + /* 1050 */ 150, 151, 152, 58, 153, 386, 155, 157, 158, 159, + /* 1060 */ 160, 48, 49, 48, 163, 15, 16, 166, 30, 31, + /* 1070 */ 170, 0, 19, 30, 59, 32, 26, 24, 28, 115, + /* 1080 */ 30, 186, 168, 40, 31, 171, 48, 37, 38, 39, + /* 1090 */ 40, 41, 42, 43, 44, 45, 192, 59, 48, 146, + /* 1100 */ 105, 48, 49, 53, 269, 55, 48, 212, 105, 48, + /* 1110 */ 48, 49, 357, 63, 64, 65, 66, 67, 68, 69, + /* 1120 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 1130 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 1140 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 1150 */ 100, 101, 35, 28, 31, 186, 164, 106, 168, 31, + /* 1160 */ 172, 111, 112, 362, 113, 170, 108, 28, 118, 31, + /* 1170 */ 120, 121, 49, 170, 28, 125, 51, 49, 128, 129, + /* 1180 */ 130, 212, 19, 133, 134, 135, 48, 24, 52, 139, + /* 1190 */ 51, 140, 142, 7, 31, 9, 31, 51, 28, 149, + /* 1200 */ 150, 151, 152, 29, 153, 162, 155, 157, 158, 159, + /* 1210 */ 160, 48, 49, 48, 163, 15, 16, 166, 31, 31, + /* 1220 */ 170, 51, 19, 49, 59, 154, 26, 24, 28, 168, + /* 1230 */ 30, 270, 171, 31, 31, 48, 48, 37, 38, 39, + /* 1240 */ 40, 41, 42, 43, 44, 45, 59, 59, 48, 132, + /* 1250 */ 48, 48, 49, 53, 372, 55, 49, 119, 122, 52, + /* 1260 */ 137, 59, 351, 63, 64, 65, 66, 67, 68, 69, + /* 1270 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 1280 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 1290 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 1300 */ 100, 101, 48, 49, 48, 31, 168, 106, 28, 31, + /* 1310 */ 31, 111, 112, 49, 113, 59, 52, 28, 118, 31, + /* 1320 */ 120, 121, 28, 49, 229, 125, 48, 48, 128, 129, + /* 1330 */ 130, 51, 35, 133, 134, 135, 48, 59, 59, 139, + /* 1340 */ 51, 140, 142, 229, 31, 51, 31, 59, 48, 149, + /* 1350 */ 150, 151, 152, 31, 153, 58, 155, 157, 158, 159, + /* 1360 */ 160, 48, 65, 48, 163, 15, 16, 166, 31, 31, + /* 1370 */ 170, 49, 59, 7, 59, 9, 26, 270, 28, 48, + /* 1380 */ 30, 229, 31, 31, 33, 48, 48, 37, 38, 39, + /* 1390 */ 40, 41, 42, 43, 44, 45, 59, 59, 48, 48, + /* 1400 */ 49, 49, 105, 53, 49, 55, 49, 52, 229, 52, + /* 1410 */ 59, 137, 229, 63, 64, 65, 66, 67, 68, 69, + /* 1420 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 1430 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 1440 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 1450 */ 100, 101, 31, 229, 31, 31, 184, 31, 30, 108, + /* 1460 */ 31, 111, 112, 49, 164, 31, 52, 170, 118, 48, + /* 1470 */ 120, 121, 49, 49, 48, 125, 48, 48, 128, 129, + /* 1480 */ 130, 35, 48, 133, 134, 135, 48, 35, 137, 139, + /* 1490 */ 250, 45, 142, 59, 31, 164, 30, 45, 229, 149, + /* 1500 */ 150, 151, 152, 31, 232, 233, 30, 157, 158, 159, + /* 1510 */ 160, 65, 49, 31, 48, 15, 16, 65, 35, 31, + /* 1520 */ 170, 49, 49, 313, 48, 52, 26, 229, 28, 31, + /* 1530 */ 30, 49, 31, 261, 31, 263, 48, 37, 38, 39, + /* 1540 */ 40, 41, 42, 43, 44, 45, 48, 59, 48, 48, + /* 1550 */ 49, 105, 49, 53, 313, 55, 49, 105, 48, 52, + /* 1560 */ 59, 137, 229, 63, 64, 65, 66, 67, 68, 69, + /* 1570 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 1580 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 1590 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 1600 */ 100, 101, 164, 51, 52, 31, 31, 35, 188, 31, + /* 1610 */ 31, 111, 112, 341, 49, 132, 170, 52, 118, 31, + /* 1620 */ 120, 121, 170, 49, 49, 125, 48, 48, 128, 129, + /* 1630 */ 130, 35, 35, 133, 134, 135, 48, 59, 137, 139, + /* 1640 */ 137, 49, 142, 49, 52, 31, 52, 59, 36, 149, + /* 1650 */ 150, 151, 152, 31, 58, 58, 31, 157, 158, 159, + /* 1660 */ 160, 65, 65, 49, 31, 15, 16, 35, 31, 31, + /* 1670 */ 170, 49, 49, 48, 164, 52, 26, 48, 28, 48, + /* 1680 */ 30, 48, 31, 35, 59, 48, 48, 37, 38, 39, + /* 1690 */ 40, 41, 42, 43, 44, 45, 59, 59, 48, 48, + /* 1700 */ 49, 105, 105, 53, 132, 55, 49, 48, 49, 52, + /* 1710 */ 59, 137, 137, 63, 64, 65, 66, 67, 68, 69, + /* 1720 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 1730 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 1740 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 1750 */ 100, 101, 48, 49, 31, 31, 31, 48, 49, 31, + /* 1760 */ 31, 111, 112, 180, 132, 30, 170, 170, 118, 31, + /* 1770 */ 120, 121, 49, 49, 49, 125, 48, 48, 128, 129, + /* 1780 */ 130, 35, 35, 133, 134, 135, 48, 59, 137, 139, + /* 1790 */ 277, 49, 142, 164, 52, 164, 31, 59, 30, 149, + /* 1800 */ 150, 151, 152, 31, 58, 58, 31, 157, 158, 159, + /* 1810 */ 160, 65, 65, 30, 49, 15, 16, 39, 31, 31, + /* 1820 */ 170, 49, 49, 365, 49, 52, 26, 191, 28, 185, + /* 1830 */ 30, 48, 31, 31, 30, 48, 48, 37, 38, 39, + /* 1840 */ 40, 41, 42, 43, 44, 45, 59, 59, 48, 48, + /* 1850 */ 48, 105, 105, 53, 277, 55, 52, 48, 49, 49, + /* 1860 */ 59, 59, 52, 63, 64, 65, 66, 67, 68, 69, + /* 1870 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 1880 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 1890 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 1900 */ 100, 101, 48, 277, 31, 30, 30, 35, 191, 31, + /* 1910 */ 31, 111, 112, 59, 192, 35, 170, 170, 118, 31, + /* 1920 */ 120, 121, 49, 48, 48, 125, 48, 48, 128, 129, + /* 1930 */ 130, 35, 35, 133, 134, 135, 48, 59, 59, 139, + /* 1940 */ 49, 49, 142, 52, 52, 181, 183, 59, 182, 149, + /* 1950 */ 150, 151, 152, 30, 58, 58, 31, 157, 158, 159, + /* 1960 */ 160, 65, 65, 31, 29, 15, 16, 183, 31, 31, + /* 1970 */ 170, 48, 51, 192, 49, 103, 26, 201, 28, 45, + /* 1980 */ 30, 49, 31, 31, 49, 48, 48, 37, 38, 39, + /* 1990 */ 40, 41, 42, 43, 44, 45, 59, 59, 48, 48, + /* 2000 */ 48, 105, 105, 53, 49, 55, 192, 52, 197, 197, + /* 2010 */ 59, 59, 197, 63, 64, 65, 66, 67, 68, 69, + /* 2020 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 2030 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 2040 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 2050 */ 100, 101, 48, 48, 31, 31, 31, 35, 192, 31, + /* 2060 */ 31, 111, 112, 59, 59, 197, 170, 170, 118, 31, + /* 2070 */ 120, 121, 49, 49, 49, 125, 48, 48, 128, 129, + /* 2080 */ 130, 35, 35, 133, 134, 135, 48, 59, 59, 139, + /* 2090 */ 35, 192, 142, 192, 35, 197, 31, 59, 184, 149, + /* 2100 */ 150, 151, 152, 31, 58, 58, 31, 157, 158, 159, + /* 2110 */ 160, 65, 65, 31, 49, 15, 16, 33, 31, 31, + /* 2120 */ 170, 49, 298, 234, 49, 103, 26, 34, 28, 35, + /* 2130 */ 30, 49, 31, 31, 29, 48, 48, 37, 38, 39, + /* 2140 */ 40, 41, 42, 43, 44, 45, 59, 59, 48, 48, + /* 2150 */ 48, 105, 105, 53, 348, 55, 188, 52, 103, 183, + /* 2160 */ 59, 59, 192, 63, 64, 65, 66, 67, 68, 69, + /* 2170 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 2180 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 2190 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 2200 */ 100, 101, 48, 197, 31, 31, 30, 44, 196, 31, + /* 2210 */ 31, 111, 112, 59, 28, 229, 170, 170, 118, 31, + /* 2220 */ 120, 121, 49, 49, 48, 125, 48, 48, 128, 129, + /* 2230 */ 130, 35, 35, 133, 134, 135, 48, 59, 59, 139, + /* 2240 */ 35, 29, 142, 179, 155, 31, 48, 59, 48, 149, + /* 2250 */ 150, 151, 152, 30, 58, 58, 29, 157, 158, 159, + /* 2260 */ 160, 65, 65, 49, 52, 15, 16, 48, 31, 31, + /* 2270 */ 170, 48, 155, 48, 48, 35, 26, 148, 28, 52, + /* 2280 */ 30, 48, 31, 31, 59, 48, 48, 37, 38, 39, + /* 2290 */ 40, 41, 42, 43, 44, 45, 59, 59, 48, 48, + /* 2300 */ 48, 105, 105, 53, 30, 55, 48, 54, 54, 152, + /* 2310 */ 59, 59, 48, 63, 64, 65, 66, 67, 68, 69, + /* 2320 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 2330 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 2340 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 2350 */ 100, 101, 48, 152, 48, 31, 31, 48, 48, 48, + /* 2360 */ 48, 111, 112, 59, 31, 59, 170, 170, 118, 167, + /* 2370 */ 120, 121, 31, 49, 49, 125, 31, 31, 128, 129, + /* 2380 */ 130, 54, 49, 133, 134, 135, 48, 48, 48, 139, + /* 2390 */ 49, 48, 142, 48, 48, 48, 51, 51, 59, 149, + /* 2400 */ 150, 151, 152, 48, 59, 59, 59, 157, 158, 159, + /* 2410 */ 160, 48, 48, 29, 59, 15, 16, 48, 48, 48, + /* 2420 */ 170, 48, 59, 59, 48, 48, 26, 48, 28, 31, + /* 2430 */ 30, 29, 31, 49, 29, 59, 59, 37, 38, 39, + /* 2440 */ 40, 41, 42, 43, 44, 45, 156, 49, 48, 5, + /* 2450 */ 49, 49, 48, 53, 49, 55, 48, 48, 48, 48, + /* 2460 */ 48, 48, 48, 63, 64, 65, 66, 67, 68, 69, + /* 2470 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 2480 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 2490 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 2500 */ 100, 101, 48, 48, 48, 48, 35, 48, 48, 48, + /* 2510 */ 162, 111, 112, 59, 59, 59, 48, 54, 118, 30, + /* 2520 */ 120, 121, 162, 48, 48, 125, 48, 59, 128, 129, + /* 2530 */ 130, 48, 48, 133, 134, 135, 35, 59, 47, 139, + /* 2540 */ 48, 48, 142, 59, 48, 51, 99, 99, 48, 149, + /* 2550 */ 150, 151, 152, 48, 52, 48, 31, 157, 158, 159, + /* 2560 */ 160, 48, 48, 48, 48, 15, 16, 122, 59, 48, + /* 2570 */ 170, 48, 48, 51, 48, 48, 26, 119, 28, 48, + /* 2580 */ 30, 48, 54, 48, 48, 48, 52, 37, 38, 39, + /* 2590 */ 40, 41, 42, 43, 44, 45, 35, 48, 48, 48, + /* 2600 */ 48, 30, 48, 53, 51, 55, 48, 31, 31, 30, + /* 2610 */ 30, 48, 48, 63, 64, 65, 66, 67, 68, 69, + /* 2620 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 2630 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 2640 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 2650 */ 100, 101, 35, 105, 48, 48, 48, 33, 54, 48, + /* 2660 */ 48, 111, 112, 33, 54, 33, 48, 48, 118, 54, + /* 2670 */ 120, 121, 51, 48, 48, 125, 33, 54, 128, 129, + /* 2680 */ 130, 48, 48, 133, 134, 135, 33, 52, 51, 139, + /* 2690 */ 54, 52, 142, 48, 48, 48, 48, 48, 48, 149, + /* 2700 */ 150, 151, 152, 52, 52, 105, 48, 157, 158, 159, + /* 2710 */ 160, 51, 51, 59, 51, 15, 16, 51, 51, 48, + /* 2720 */ 170, 52, 148, 48, 48, 51, 26, 59, 28, 31, + /* 2730 */ 30, 51, 31, 51, 29, 52, 144, 37, 38, 39, + /* 2740 */ 40, 41, 42, 43, 44, 45, 31, 31, 48, 31, + /* 2750 */ 31, 31, 31, 53, 31, 55, 30, 144, 29, 143, + /* 2760 */ 29, 33, 51, 63, 64, 65, 66, 67, 68, 69, + /* 2770 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 2780 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 2790 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 2800 */ 100, 101, 51, 126, 126, 52, 48, 392, 392, 392, + /* 2810 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 2820 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 2830 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 2840 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 2850 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 2860 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 2870 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 2880 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 2890 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 2900 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 2910 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 2920 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 2930 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 2940 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 2950 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 2960 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 2970 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 2980 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 2990 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 3000 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 3010 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 3020 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 3030 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 3040 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 3050 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 3060 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 3070 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 3080 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 3090 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 3100 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 3110 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 3120 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 3130 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 3140 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 3150 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 3160 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 3170 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 3180 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 3190 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 3200 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 3210 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 3220 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 3230 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 3240 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 3250 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 3260 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 3270 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 3280 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 3290 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 3300 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 3310 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 3320 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 3330 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 3340 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 3350 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 3360 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 3370 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 3380 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 3390 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 3400 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 3410 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 3420 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 3430 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 3440 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 3450 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 3460 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 3470 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 3480 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 3490 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 3500 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 3510 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 3520 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 3530 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 3540 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 3550 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 3560 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 3570 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 3580 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 3590 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 3600 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 3610 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 3620 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 3630 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 3640 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 3650 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 3660 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 3670 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 3680 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 3690 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 3700 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 3710 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 3720 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 3730 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 3740 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 3750 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 3760 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 3770 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 3780 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 3790 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 3800 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 3810 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 3820 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 3830 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 3840 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 3850 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 3860 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 3870 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 3880 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 3890 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 149, + /* 3900 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 3910 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 3920 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 3930 */ 30, 392, 392, 392, 392, 392, 392, 37, 38, 39, + /* 3940 */ 40, 41, 42, 43, 44, 45, 392, 392, 48, 392, + /* 3950 */ 392, 392, 392, 53, 392, 55, 392, 392, 392, 392, + /* 3960 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 3970 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 3980 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 3990 */ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, + /* 4000 */ 100, 101, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4010 */ 392, 111, 112, 392, 392, 392, 392, 392, 118, 392, + /* 4020 */ 120, 121, 392, 392, 392, 125, 392, 392, 128, 129, + /* 4030 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 139, + /* 4040 */ 392, 58, 142, 392, 392, 392, 392, 392, 392, 149, + /* 4050 */ 150, 151, 152, 392, 392, 392, 392, 157, 158, 159, + /* 4060 */ 160, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 4070 */ 170, 392, 392, 392, 392, 392, 26, 392, 28, 392, + /* 4080 */ 30, 392, 29, 392, 31, 35, 392, 37, 105, 39, + /* 4090 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 4100 */ 392, 48, 49, 392, 51, 52, 392, 392, 392, 392, + /* 4110 */ 127, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 4120 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 4130 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 4140 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 4150 */ 392, 392, 392, 170, 392, 105, 392, 392, 392, 392, + /* 4160 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4170 */ 392, 392, 119, 392, 392, 125, 392, 392, 128, 129, + /* 4180 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 4190 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 4200 */ 15, 16, 152, 392, 392, 392, 392, 157, 392, 159, + /* 4210 */ 160, 26, 392, 28, 35, 30, 35, 167, 392, 392, + /* 4220 */ 35, 168, 37, 392, 39, 40, 41, 42, 43, 44, + /* 4230 */ 45, 392, 392, 392, 392, 392, 392, 58, 392, 58, + /* 4240 */ 392, 392, 392, 392, 65, 392, 65, 392, 63, 64, + /* 4250 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 4260 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 4270 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 4280 */ 184, 392, 392, 104, 105, 104, 105, 392, 392, 392, + /* 4290 */ 105, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4300 */ 392, 392, 392, 392, 392, 392, 127, 392, 127, 392, + /* 4310 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 4320 */ 135, 392, 392, 392, 392, 392, 392, 142, 232, 233, + /* 4330 */ 392, 392, 392, 392, 392, 15, 16, 152, 392, 392, + /* 4340 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 170, + /* 4350 */ 30, 170, 167, 392, 392, 35, 392, 37, 262, 39, + /* 4360 */ 40, 41, 42, 43, 44, 45, 392, 271, 392, 392, + /* 4370 */ 392, 392, 392, 392, 392, 392, 392, 281, 392, 392, + /* 4380 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 4390 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 4400 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 4410 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 4420 */ 392, 35, 392, 392, 392, 105, 392, 392, 392, 392, + /* 4430 */ 392, 392, 392, 392, 392, 392, 392, 341, 392, 392, + /* 4440 */ 392, 392, 392, 392, 58, 125, 392, 392, 128, 129, + /* 4450 */ 130, 65, 392, 133, 134, 135, 392, 392, 392, 392, + /* 4460 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 4470 */ 15, 16, 152, 392, 392, 392, 392, 157, 392, 159, + /* 4480 */ 160, 26, 392, 28, 392, 30, 392, 167, 392, 392, + /* 4490 */ 104, 105, 37, 392, 39, 40, 41, 42, 43, 44, + /* 4500 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4510 */ 392, 392, 392, 127, 392, 392, 392, 392, 63, 64, + /* 4520 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 4530 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 4540 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 4550 */ 392, 392, 97, 392, 99, 392, 170, 392, 392, 392, + /* 4560 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4570 */ 392, 392, 392, 222, 392, 392, 392, 392, 392, 392, + /* 4580 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 4590 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 4600 */ 392, 392, 392, 392, 392, 15, 16, 256, 257, 258, + /* 4610 */ 259, 260, 157, 392, 159, 160, 26, 392, 28, 392, + /* 4620 */ 30, 392, 392, 392, 392, 274, 392, 37, 392, 39, + /* 4630 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 288, + /* 4640 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4650 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 4660 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 4670 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 4680 */ 90, 91, 92, 93, 94, 392, 392, 97, 392, 99, + /* 4690 */ 339, 392, 392, 102, 392, 392, 392, 106, 392, 392, + /* 4700 */ 392, 392, 392, 392, 113, 392, 355, 356, 392, 392, + /* 4710 */ 392, 392, 361, 392, 392, 125, 392, 392, 128, 129, + /* 4720 */ 130, 392, 392, 133, 134, 135, 375, 392, 392, 392, + /* 4730 */ 392, 140, 142, 382, 392, 392, 392, 392, 147, 392, + /* 4740 */ 15, 16, 392, 392, 153, 392, 155, 157, 392, 159, + /* 4750 */ 160, 26, 392, 28, 163, 30, 35, 166, 392, 392, + /* 4760 */ 169, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 4770 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 58, + /* 4780 */ 392, 392, 392, 392, 392, 392, 65, 392, 63, 64, + /* 4790 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 4800 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 4810 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 4820 */ 392, 392, 97, 392, 99, 104, 105, 392, 392, 392, + /* 4830 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4840 */ 392, 220, 392, 222, 392, 392, 392, 392, 127, 392, + /* 4850 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 4860 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 4870 */ 392, 392, 392, 392, 392, 15, 16, 256, 257, 258, + /* 4880 */ 259, 260, 157, 392, 159, 160, 26, 392, 28, 392, + /* 4890 */ 30, 170, 392, 392, 392, 274, 392, 37, 392, 39, + /* 4900 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 288, + /* 4910 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4920 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 4930 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 4940 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 4950 */ 90, 91, 92, 93, 94, 392, 392, 97, 392, 99, + /* 4960 */ 339, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4970 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 4980 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 4990 */ 130, 392, 392, 133, 134, 135, 375, 392, 392, 392, + /* 5000 */ 392, 392, 142, 382, 392, 392, 392, 392, 392, 392, + /* 5010 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 5020 */ 160, 26, 392, 28, 392, 30, 35, 392, 392, 392, + /* 5030 */ 35, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 5040 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 58, + /* 5050 */ 392, 392, 392, 392, 392, 392, 65, 392, 63, 64, + /* 5060 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 5070 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 5080 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 5090 */ 392, 392, 35, 392, 392, 104, 105, 392, 392, 392, + /* 5100 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 5110 */ 392, 392, 392, 392, 392, 58, 392, 392, 127, 392, + /* 5120 */ 125, 392, 65, 128, 129, 130, 392, 392, 133, 134, + /* 5130 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 5140 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 5150 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 29, + /* 5160 */ 30, 170, 105, 392, 392, 392, 392, 37, 392, 39, + /* 5170 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 5180 */ 392, 392, 392, 392, 127, 392, 392, 392, 392, 392, + /* 5190 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 5200 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 5210 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 5220 */ 90, 91, 92, 93, 94, 392, 392, 170, 392, 392, + /* 5230 */ 392, 35, 392, 102, 392, 392, 392, 106, 392, 392, + /* 5240 */ 392, 392, 392, 392, 113, 392, 392, 392, 392, 392, + /* 5250 */ 392, 392, 392, 392, 58, 125, 392, 392, 128, 129, + /* 5260 */ 130, 65, 392, 133, 134, 135, 392, 392, 392, 392, + /* 5270 */ 392, 140, 142, 392, 392, 392, 392, 392, 147, 392, + /* 5280 */ 15, 16, 392, 392, 153, 392, 155, 157, 392, 159, + /* 5290 */ 160, 26, 392, 28, 163, 30, 31, 166, 392, 392, + /* 5300 */ 169, 105, 37, 392, 39, 40, 41, 42, 43, 44, + /* 5310 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 5320 */ 392, 392, 392, 127, 392, 392, 392, 392, 63, 64, + /* 5330 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 5340 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 5350 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 5360 */ 392, 392, 392, 392, 392, 392, 170, 392, 102, 392, + /* 5370 */ 392, 392, 106, 392, 392, 392, 392, 392, 392, 113, + /* 5380 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 5390 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 5400 */ 135, 392, 392, 392, 392, 392, 140, 142, 392, 392, + /* 5410 */ 392, 392, 392, 147, 392, 15, 16, 392, 392, 153, + /* 5420 */ 392, 155, 157, 392, 159, 160, 26, 392, 28, 163, + /* 5430 */ 30, 35, 166, 392, 392, 169, 392, 37, 392, 39, + /* 5440 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 5450 */ 392, 392, 392, 392, 58, 392, 392, 392, 392, 392, + /* 5460 */ 392, 65, 392, 63, 64, 65, 66, 67, 68, 69, + /* 5470 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 5480 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 5490 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 5500 */ 104, 105, 392, 102, 392, 392, 392, 106, 392, 392, + /* 5510 */ 392, 392, 392, 392, 113, 392, 392, 392, 392, 392, + /* 5520 */ 392, 392, 392, 127, 392, 125, 392, 392, 128, 129, + /* 5530 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 5540 */ 392, 140, 142, 392, 392, 392, 392, 392, 147, 392, + /* 5550 */ 15, 16, 392, 392, 153, 392, 155, 157, 392, 159, + /* 5560 */ 160, 26, 392, 28, 163, 30, 170, 166, 392, 392, + /* 5570 */ 169, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 5580 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 5590 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 5600 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 5610 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 5620 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 5630 */ 392, 392, 392, 392, 392, 392, 35, 392, 102, 392, + /* 5640 */ 392, 392, 106, 392, 392, 392, 392, 392, 392, 113, + /* 5650 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 58, + /* 5660 */ 125, 392, 392, 128, 129, 130, 65, 392, 133, 134, + /* 5670 */ 135, 392, 392, 392, 392, 392, 140, 142, 392, 392, + /* 5680 */ 392, 392, 392, 147, 392, 15, 16, 392, 392, 153, + /* 5690 */ 392, 155, 157, 392, 159, 160, 26, 392, 28, 163, + /* 5700 */ 30, 392, 166, 392, 392, 169, 105, 37, 392, 39, + /* 5710 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 5720 */ 392, 392, 392, 392, 392, 392, 392, 392, 127, 392, + /* 5730 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 5740 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 5750 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 5760 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 5770 */ 392, 170, 392, 102, 392, 392, 392, 106, 392, 392, + /* 5780 */ 392, 392, 392, 392, 113, 392, 392, 392, 392, 392, + /* 5790 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 5800 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 5810 */ 392, 140, 142, 392, 392, 392, 392, 392, 147, 392, + /* 5820 */ 15, 16, 392, 392, 153, 392, 155, 157, 392, 159, + /* 5830 */ 160, 26, 392, 28, 163, 30, 35, 166, 392, 392, + /* 5840 */ 169, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 5850 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 58, + /* 5860 */ 392, 392, 392, 392, 392, 392, 65, 392, 63, 64, + /* 5870 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 5880 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 5890 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 5900 */ 392, 392, 392, 392, 392, 392, 105, 392, 102, 392, + /* 5910 */ 392, 392, 106, 392, 392, 392, 392, 392, 392, 113, + /* 5920 */ 392, 392, 392, 392, 392, 392, 392, 392, 127, 392, + /* 5930 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 5940 */ 135, 392, 392, 392, 392, 392, 140, 142, 392, 392, + /* 5950 */ 392, 392, 392, 147, 392, 15, 16, 392, 392, 153, + /* 5960 */ 392, 155, 157, 392, 159, 160, 26, 392, 28, 163, + /* 5970 */ 30, 170, 166, 392, 392, 169, 392, 37, 392, 39, + /* 5980 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 5990 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6000 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 6010 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 6020 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 6030 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 6040 */ 392, 392, 392, 102, 392, 392, 392, 106, 392, 392, + /* 6050 */ 392, 392, 392, 392, 113, 392, 392, 392, 392, 392, + /* 6060 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 6070 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 6080 */ 392, 140, 142, 392, 392, 392, 392, 392, 147, 392, + /* 6090 */ 15, 16, 392, 392, 153, 392, 155, 157, 392, 159, + /* 6100 */ 160, 26, 392, 28, 163, 30, 392, 166, 392, 392, + /* 6110 */ 169, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 6120 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6130 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 6140 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 6150 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 6160 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 6170 */ 392, 392, 392, 392, 392, 392, 392, 392, 102, 392, + /* 6180 */ 392, 392, 106, 392, 392, 392, 392, 392, 392, 113, + /* 6190 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6200 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 6210 */ 135, 392, 392, 392, 392, 392, 140, 142, 392, 392, + /* 6220 */ 392, 392, 392, 147, 392, 15, 16, 392, 392, 153, + /* 6230 */ 392, 155, 157, 392, 159, 160, 26, 392, 28, 163, + /* 6240 */ 30, 392, 166, 392, 392, 169, 392, 37, 392, 39, + /* 6250 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 6260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6270 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 6280 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 6290 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 6300 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 6310 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6320 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6330 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 6340 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 6350 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 6360 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 6370 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 6380 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 6390 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6400 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 6410 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 6420 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 6430 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 6440 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6450 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6460 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6470 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 6480 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 6490 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 6500 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 6510 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 6520 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 6530 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6540 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 6550 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 6560 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 6570 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 6580 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6590 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6600 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 6610 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 6620 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 6630 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 6640 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 6650 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 6660 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6670 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 6680 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 6690 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 6700 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 6710 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6720 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6730 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6740 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 6750 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 6760 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 6770 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 6780 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 6790 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 6800 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6810 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 6820 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 6830 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 6840 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 6850 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6860 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6870 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 6880 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 6890 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 6900 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 6910 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 6920 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 6930 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6940 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 6950 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 6960 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 6970 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 6980 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 6990 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7000 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7010 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 7020 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 7030 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 7040 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 7050 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 7060 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 7070 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7080 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 7090 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 7100 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 7110 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 7120 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7130 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7140 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 7150 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 7160 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 7170 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 7180 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 7190 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 7200 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7210 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 7220 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 7230 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 7240 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 7250 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7270 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7280 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 7290 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 7300 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 7310 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 7320 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 7330 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 7340 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7350 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 7360 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 7370 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 7380 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 7390 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7400 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7410 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 7420 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 7430 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 7440 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 7450 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 7460 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 7470 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7480 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 7490 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 7500 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 7510 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 7520 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7530 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7540 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7550 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 7560 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 7570 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 7580 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 7590 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 7600 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 7610 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7620 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 7630 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 7640 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 7650 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 7660 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7670 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7680 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 7690 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 7700 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 7710 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 7720 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 7730 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 7740 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7750 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 7760 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 7770 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 7780 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 7790 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7800 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7810 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7820 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 7830 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 7840 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 7850 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 7860 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 7870 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 7880 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7890 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 7900 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 7910 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 7920 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 7930 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7940 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 7950 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 7960 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 7970 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 7980 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 7990 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 8000 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 8010 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8020 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 8030 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 8040 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 8050 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 8060 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8070 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8080 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8090 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 8100 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 8110 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 8120 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 8130 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 8140 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 8150 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8160 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 8170 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 8180 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 8190 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 8200 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8210 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8220 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 8230 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 8240 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 8250 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 8260 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 8270 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 8280 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8290 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 8300 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 8310 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 8320 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 8330 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8340 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8350 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8360 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 8370 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 8380 */ 392, 392, 392, 392, 392, 15, 16, 392, 392, 392, + /* 8390 */ 392, 392, 157, 392, 159, 160, 26, 392, 28, 392, + /* 8400 */ 30, 392, 392, 392, 392, 392, 392, 37, 392, 39, + /* 8410 */ 40, 41, 42, 43, 44, 45, 392, 392, 392, 392, + /* 8420 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8430 */ 392, 392, 392, 63, 64, 65, 66, 67, 68, 69, + /* 8440 */ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, + /* 8450 */ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, + /* 8460 */ 90, 91, 92, 93, 94, 392, 392, 392, 392, 392, + /* 8470 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8480 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8490 */ 392, 392, 392, 392, 392, 125, 392, 392, 128, 129, + /* 8500 */ 130, 392, 392, 133, 134, 135, 392, 392, 392, 392, + /* 8510 */ 392, 392, 142, 392, 392, 392, 392, 392, 392, 392, + /* 8520 */ 15, 16, 392, 392, 392, 392, 392, 157, 392, 159, + /* 8530 */ 160, 26, 392, 28, 392, 30, 392, 392, 392, 392, + /* 8540 */ 392, 392, 37, 392, 39, 40, 41, 42, 43, 44, + /* 8550 */ 45, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8560 */ 392, 392, 392, 392, 392, 392, 392, 392, 63, 64, + /* 8570 */ 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, + /* 8580 */ 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, + /* 8590 */ 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, + /* 8600 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8610 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8620 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8630 */ 125, 392, 392, 128, 129, 130, 392, 392, 133, 134, + /* 8640 */ 135, 392, 392, 392, 392, 392, 392, 142, 392, 392, + /* 8650 */ 392, 392, 392, 392, 392, 392, 392, 26, 392, 392, + /* 8660 */ 392, 30, 157, 392, 159, 160, 392, 392, 37, 392, + /* 8670 */ 392, 40, 41, 42, 43, 392, 45, 392, 392, 392, + /* 8680 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8690 */ 392, 392, 392, 392, 63, 64, 65, 66, 67, 68, + /* 8700 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, + /* 8710 */ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, + /* 8720 */ 89, 90, 91, 92, 93, 94, 392, 392, 392, 392, + /* 8730 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8740 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8750 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 128, + /* 8760 */ 129, 130, 392, 392, 133, 134, 135, 392, 392, 392, + /* 8770 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8780 */ 392, 392, 392, 392, 392, 392, 392, 392, 26, 392, + /* 8790 */ 159, 160, 30, 392, 392, 392, 392, 392, 392, 37, + /* 8800 */ 392, 392, 40, 41, 42, 43, 392, 45, 392, 392, + /* 8810 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8820 */ 392, 392, 392, 392, 392, 63, 64, 65, 66, 67, + /* 8830 */ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, + /* 8840 */ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, + /* 8850 */ 88, 89, 90, 91, 92, 93, 94, 392, 392, 392, + /* 8860 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8870 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8880 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8890 */ 128, 129, 130, 392, 392, 133, 134, 135, 392, 392, + /* 8900 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8910 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 26, + /* 8920 */ 392, 159, 160, 30, 392, 392, 392, 392, 392, 392, + /* 8930 */ 37, 392, 392, 40, 41, 42, 43, 392, 45, 392, + /* 8940 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 8950 */ 392, 392, 392, 392, 392, 392, 63, 64, 65, 66, + /* 8960 */ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, + /* 8970 */ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, + /* 8980 */ 87, 88, 89, 90, 91, 92, 93, 94, 5, 6, + /* 8990 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 9000 */ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, + /* 9010 */ 392, 28, 29, 30, 31, 38, 33, 34, 41, 42, + /* 9020 */ 392, 128, 129, 130, 392, 48, 133, 134, 135, 392, + /* 9030 */ 53, 48, 49, 392, 51, 52, 392, 54, 392, 392, + /* 9040 */ 392, 392, 59, 392, 392, 392, 392, 392, 392, 392, + /* 9050 */ 392, 392, 159, 160, 392, 392, 392, 392, 392, 392, + /* 9060 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9070 */ 392, 392, 95, 96, 392, 98, 392, 100, 392, 102, + /* 9080 */ 392, 392, 392, 106, 392, 392, 392, 392, 111, 392, + /* 9090 */ 113, 392, 392, 392, 392, 118, 392, 392, 392, 392, + /* 9100 */ 392, 392, 119, 392, 392, 122, 123, 392, 131, 126, + /* 9110 */ 392, 392, 392, 392, 392, 392, 139, 140, 392, 392, + /* 9120 */ 137, 392, 392, 392, 392, 392, 149, 144, 151, 152, + /* 9130 */ 153, 392, 155, 392, 38, 158, 392, 41, 42, 392, + /* 9140 */ 163, 392, 392, 166, 48, 392, 392, 170, 392, 53, + /* 9150 */ 392, 168, 392, 392, 171, 392, 392, 5, 6, 7, + /* 9160 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 9170 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 9180 */ 28, 29, 392, 31, 392, 33, 34, 392, 392, 392, + /* 9190 */ 392, 95, 96, 392, 98, 392, 100, 392, 102, 392, + /* 9200 */ 48, 49, 106, 51, 52, 392, 392, 111, 392, 113, + /* 9210 */ 392, 59, 392, 392, 118, 392, 392, 392, 392, 392, + /* 9220 */ 392, 392, 392, 392, 392, 392, 392, 131, 392, 392, + /* 9230 */ 392, 392, 392, 392, 392, 139, 140, 392, 392, 392, + /* 9240 */ 392, 392, 392, 392, 392, 149, 392, 151, 152, 153, + /* 9250 */ 392, 155, 392, 392, 158, 392, 392, 392, 392, 163, + /* 9260 */ 392, 392, 166, 392, 392, 392, 170, 392, 392, 392, + /* 9270 */ 392, 119, 392, 392, 122, 123, 392, 392, 126, 392, + /* 9280 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9290 */ 392, 392, 392, 392, 392, 392, 144, 392, 146, 392, + /* 9300 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9310 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9320 */ 168, 392, 392, 171, 392, 392, 5, 6, 7, 8, + /* 9330 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 9340 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 9350 */ 29, 392, 31, 392, 33, 34, 392, 392, 392, 392, + /* 9360 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 9370 */ 49, 392, 51, 52, 392, 392, 392, 392, 392, 392, + /* 9380 */ 59, 392, 392, 392, 392, 392, 5, 6, 7, 8, + /* 9390 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 9400 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 9410 */ 29, 30, 31, 392, 33, 34, 392, 392, 392, 392, + /* 9420 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 9430 */ 49, 392, 51, 52, 392, 392, 392, 392, 392, 392, + /* 9440 */ 119, 392, 392, 122, 123, 392, 392, 126, 392, 392, + /* 9450 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9460 */ 392, 392, 392, 392, 392, 144, 392, 146, 392, 392, + /* 9470 */ 392, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 9480 */ 12, 13, 14, 15, 16, 17, 18, 392, 392, 168, + /* 9490 */ 392, 392, 171, 392, 392, 392, 392, 29, 392, 31, + /* 9500 */ 119, 392, 392, 122, 123, 392, 392, 126, 392, 392, + /* 9510 */ 392, 392, 392, 392, 392, 392, 48, 49, 137, 51, + /* 9520 */ 52, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 9530 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9540 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 9550 */ 392, 392, 171, 392, 392, 5, 6, 7, 8, 9, + /* 9560 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 9570 */ 20, 21, 22, 23, 24, 25, 26, 392, 28, 29, + /* 9580 */ 392, 31, 392, 33, 34, 392, 392, 119, 392, 392, + /* 9590 */ 122, 123, 392, 392, 126, 392, 392, 392, 48, 49, + /* 9600 */ 392, 51, 52, 392, 392, 392, 392, 392, 392, 59, + /* 9610 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 9620 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9630 */ 392, 392, 392, 392, 392, 392, 168, 392, 392, 171, + /* 9640 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 9650 */ 13, 14, 15, 16, 17, 18, 392, 392, 392, 392, + /* 9660 */ 392, 392, 392, 392, 392, 392, 29, 392, 31, 119, + /* 9670 */ 392, 392, 122, 123, 392, 392, 126, 392, 392, 392, + /* 9680 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 9690 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 9700 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9710 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 392, + /* 9720 */ 392, 171, 392, 392, 5, 6, 7, 8, 9, 10, + /* 9730 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 9740 */ 21, 22, 23, 24, 25, 26, 392, 28, 29, 392, + /* 9750 */ 31, 392, 33, 34, 392, 392, 119, 392, 392, 122, + /* 9760 */ 123, 392, 392, 126, 392, 392, 392, 48, 49, 392, + /* 9770 */ 51, 52, 392, 392, 392, 392, 392, 392, 59, 392, + /* 9780 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9790 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9800 */ 392, 392, 392, 392, 191, 168, 392, 392, 171, 392, + /* 9810 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 9820 */ 14, 15, 16, 17, 18, 392, 213, 214, 215, 216, + /* 9830 */ 217, 392, 392, 392, 392, 29, 392, 31, 119, 392, + /* 9840 */ 392, 122, 123, 392, 392, 126, 392, 392, 235, 392, + /* 9850 */ 237, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 9860 */ 392, 248, 249, 144, 392, 392, 253, 254, 255, 392, + /* 9870 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 9880 */ 392, 392, 392, 392, 392, 392, 392, 168, 392, 392, + /* 9890 */ 171, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 9900 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 9910 */ 22, 23, 24, 25, 26, 392, 28, 29, 392, 31, + /* 9920 */ 307, 33, 34, 392, 392, 119, 392, 392, 122, 123, + /* 9930 */ 392, 392, 126, 392, 392, 392, 48, 49, 325, 51, + /* 9940 */ 52, 392, 392, 330, 392, 392, 392, 59, 392, 392, + /* 9950 */ 144, 392, 392, 392, 392, 392, 343, 392, 392, 392, + /* 9960 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 9970 */ 13, 14, 392, 392, 168, 392, 392, 171, 392, 392, + /* 9980 */ 392, 392, 369, 392, 392, 392, 29, 392, 31, 392, + /* 9990 */ 392, 392, 392, 392, 392, 392, 383, 392, 392, 392, + /* 10000 */ 392, 392, 392, 392, 392, 48, 49, 119, 51, 52, + /* 10010 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 10020 */ 392, 392, 39, 40, 392, 392, 392, 392, 392, 392, + /* 10030 */ 392, 392, 144, 50, 392, 392, 392, 392, 392, 56, + /* 10040 */ 57, 58, 392, 60, 61, 62, 392, 392, 392, 392, + /* 10050 */ 392, 392, 392, 392, 392, 392, 168, 392, 392, 171, + /* 10060 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 10070 */ 13, 14, 15, 16, 17, 18, 119, 20, 21, 22, + /* 10080 */ 23, 24, 25, 26, 392, 28, 29, 392, 31, 392, + /* 10090 */ 33, 34, 392, 392, 392, 392, 392, 114, 115, 116, + /* 10100 */ 117, 392, 392, 392, 392, 48, 49, 124, 51, 52, + /* 10110 */ 392, 392, 392, 392, 392, 392, 59, 392, 392, 136, + /* 10120 */ 392, 138, 392, 392, 392, 168, 392, 392, 145, 392, + /* 10130 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10140 */ 392, 392, 392, 392, 161, 392, 392, 392, 392, 392, + /* 10150 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10160 */ 392, 392, 392, 392, 392, 392, 191, 192, 392, 392, + /* 10170 */ 392, 392, 392, 392, 392, 392, 119, 392, 392, 122, + /* 10180 */ 123, 392, 392, 126, 392, 210, 211, 392, 392, 392, + /* 10190 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10200 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10210 */ 235, 392, 237, 392, 392, 392, 392, 392, 392, 392, + /* 10220 */ 392, 392, 392, 392, 249, 168, 392, 392, 171, 392, + /* 10230 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 10240 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 10250 */ 24, 25, 26, 392, 28, 29, 392, 31, 392, 33, + /* 10260 */ 34, 392, 392, 392, 392, 290, 291, 292, 293, 294, + /* 10270 */ 295, 296, 297, 392, 48, 49, 392, 51, 52, 392, + /* 10280 */ 392, 392, 307, 392, 392, 59, 392, 392, 392, 392, + /* 10290 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10300 */ 325, 392, 327, 392, 392, 330, 392, 392, 392, 392, + /* 10310 */ 392, 191, 192, 392, 392, 392, 392, 392, 343, 392, + /* 10320 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10330 */ 392, 392, 392, 213, 214, 215, 216, 217, 392, 392, + /* 10340 */ 392, 392, 392, 392, 369, 119, 392, 392, 122, 123, + /* 10350 */ 230, 392, 126, 392, 392, 235, 392, 237, 392, 392, + /* 10360 */ 392, 392, 392, 392, 392, 392, 392, 392, 248, 249, + /* 10370 */ 144, 392, 392, 392, 392, 38, 392, 392, 41, 42, + /* 10380 */ 392, 392, 392, 392, 392, 48, 392, 392, 392, 392, + /* 10390 */ 53, 392, 392, 392, 168, 392, 392, 171, 392, 392, + /* 10400 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + /* 10410 */ 15, 16, 17, 18, 392, 20, 21, 22, 23, 24, + /* 10420 */ 25, 26, 392, 28, 29, 392, 31, 307, 33, 34, + /* 10430 */ 392, 392, 95, 96, 392, 98, 392, 100, 392, 392, + /* 10440 */ 392, 392, 392, 48, 49, 325, 51, 52, 111, 392, + /* 10450 */ 330, 392, 392, 392, 59, 118, 392, 120, 121, 392, + /* 10460 */ 392, 392, 392, 343, 392, 392, 392, 392, 392, 392, + /* 10470 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10480 */ 392, 392, 392, 392, 392, 392, 149, 392, 151, 369, + /* 10490 */ 392, 392, 392, 190, 392, 158, 193, 194, 392, 392, + /* 10500 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10510 */ 392, 392, 392, 392, 119, 392, 392, 122, 123, 392, + /* 10520 */ 392, 126, 392, 392, 392, 392, 223, 224, 392, 392, + /* 10530 */ 227, 228, 392, 392, 231, 392, 392, 392, 392, 144, + /* 10540 */ 392, 392, 392, 392, 392, 392, 243, 392, 245, 392, + /* 10550 */ 247, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10560 */ 392, 392, 392, 168, 392, 392, 171, 392, 392, 5, + /* 10570 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + /* 10580 */ 16, 17, 18, 280, 20, 21, 22, 23, 24, 25, + /* 10590 */ 26, 392, 28, 29, 392, 31, 392, 33, 34, 392, + /* 10600 */ 392, 392, 299, 392, 392, 392, 392, 392, 392, 392, + /* 10610 */ 392, 392, 48, 49, 392, 51, 52, 392, 392, 392, + /* 10620 */ 392, 392, 392, 59, 392, 392, 392, 392, 392, 392, + /* 10630 */ 392, 392, 329, 392, 392, 392, 191, 192, 392, 392, + /* 10640 */ 392, 338, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10650 */ 392, 392, 392, 392, 392, 352, 392, 354, 213, 214, + /* 10660 */ 215, 216, 217, 392, 392, 392, 392, 392, 392, 392, + /* 10670 */ 392, 392, 392, 370, 392, 230, 392, 392, 392, 392, + /* 10680 */ 235, 392, 237, 119, 392, 392, 122, 123, 392, 392, + /* 10690 */ 126, 392, 392, 248, 249, 392, 392, 392, 392, 392, + /* 10700 */ 392, 392, 392, 392, 392, 392, 392, 392, 144, 392, + /* 10710 */ 392, 392, 392, 392, 38, 392, 392, 41, 42, 392, + /* 10720 */ 392, 392, 392, 392, 48, 392, 392, 392, 392, 53, + /* 10730 */ 392, 392, 168, 392, 392, 171, 392, 392, 5, 6, + /* 10740 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 10750 */ 17, 18, 307, 20, 21, 22, 23, 24, 25, 26, + /* 10760 */ 392, 28, 29, 392, 31, 392, 33, 34, 392, 392, + /* 10770 */ 325, 95, 96, 392, 98, 330, 100, 392, 392, 392, + /* 10780 */ 392, 48, 49, 392, 51, 52, 392, 111, 343, 392, + /* 10790 */ 392, 392, 59, 392, 118, 392, 392, 392, 392, 392, + /* 10800 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10810 */ 392, 392, 392, 392, 369, 139, 392, 392, 392, 392, + /* 10820 */ 392, 392, 392, 392, 392, 149, 38, 151, 152, 41, + /* 10830 */ 42, 392, 392, 392, 158, 392, 48, 392, 392, 392, + /* 10840 */ 392, 53, 392, 392, 392, 392, 170, 392, 392, 392, + /* 10850 */ 392, 392, 119, 392, 392, 122, 123, 392, 392, 126, + /* 10860 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 10870 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 10880 */ 392, 392, 392, 95, 96, 392, 98, 392, 100, 392, + /* 10890 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 111, + /* 10900 */ 392, 168, 392, 392, 171, 392, 118, 5, 6, 7, + /* 10910 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 10920 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 10930 */ 28, 29, 392, 31, 392, 33, 34, 149, 392, 151, + /* 10940 */ 152, 392, 392, 392, 392, 392, 158, 392, 392, 392, + /* 10950 */ 48, 49, 392, 51, 52, 392, 392, 392, 170, 392, + /* 10960 */ 392, 59, 392, 392, 392, 392, 392, 5, 6, 7, + /* 10970 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 10980 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 10990 */ 28, 29, 30, 31, 392, 33, 34, 392, 392, 392, + /* 11000 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11010 */ 48, 49, 392, 51, 52, 392, 392, 392, 392, 392, + /* 11020 */ 392, 119, 392, 392, 122, 123, 392, 392, 126, 392, + /* 11030 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11040 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 11050 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11060 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11070 */ 168, 392, 392, 171, 392, 392, 392, 392, 392, 392, + /* 11080 */ 392, 119, 392, 392, 122, 123, 392, 392, 126, 392, + /* 11090 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11100 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 11110 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11120 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11130 */ 168, 392, 392, 171, 392, 392, 5, 6, 7, 8, + /* 11140 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 11150 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 11160 */ 29, 30, 31, 392, 33, 34, 392, 392, 392, 392, + /* 11170 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 11180 */ 49, 392, 51, 52, 392, 392, 5, 6, 7, 8, + /* 11190 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 11200 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 11210 */ 29, 30, 31, 392, 33, 34, 392, 392, 392, 392, + /* 11220 */ 392, 38, 392, 392, 41, 42, 392, 392, 392, 48, + /* 11230 */ 49, 48, 51, 52, 392, 392, 53, 392, 392, 392, + /* 11240 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11250 */ 119, 392, 392, 122, 123, 392, 392, 126, 392, 392, + /* 11260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11270 */ 392, 392, 392, 392, 392, 144, 392, 392, 95, 96, + /* 11280 */ 392, 98, 392, 100, 392, 392, 392, 392, 392, 392, + /* 11290 */ 392, 392, 392, 392, 111, 392, 392, 392, 392, 168, + /* 11300 */ 119, 118, 171, 122, 123, 392, 392, 126, 392, 392, + /* 11310 */ 392, 392, 392, 392, 131, 392, 392, 392, 392, 392, + /* 11320 */ 392, 392, 139, 392, 392, 144, 392, 392, 392, 392, + /* 11330 */ 392, 392, 149, 392, 151, 152, 392, 392, 392, 392, + /* 11340 */ 392, 158, 392, 392, 392, 392, 392, 392, 392, 168, + /* 11350 */ 392, 392, 171, 170, 392, 5, 6, 7, 8, 9, + /* 11360 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 11370 */ 20, 21, 22, 23, 24, 25, 26, 392, 28, 29, + /* 11380 */ 30, 31, 392, 33, 34, 392, 392, 392, 392, 392, + /* 11390 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 11400 */ 392, 51, 52, 392, 392, 5, 6, 7, 8, 9, + /* 11410 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 11420 */ 20, 21, 22, 23, 24, 25, 26, 392, 28, 29, + /* 11430 */ 30, 31, 392, 33, 34, 392, 392, 392, 392, 392, + /* 11440 */ 38, 392, 392, 41, 42, 392, 392, 392, 48, 49, + /* 11450 */ 48, 51, 52, 392, 392, 53, 392, 392, 392, 392, + /* 11460 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 119, + /* 11470 */ 392, 392, 122, 123, 392, 392, 126, 392, 392, 392, + /* 11480 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11490 */ 392, 392, 392, 392, 144, 392, 392, 95, 96, 392, + /* 11500 */ 98, 392, 100, 392, 392, 392, 392, 392, 392, 392, + /* 11510 */ 392, 392, 392, 111, 392, 392, 392, 392, 168, 119, + /* 11520 */ 118, 171, 122, 123, 392, 392, 126, 392, 392, 392, + /* 11530 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11540 */ 392, 139, 392, 392, 144, 392, 392, 392, 392, 392, + /* 11550 */ 392, 149, 392, 151, 152, 392, 392, 392, 392, 392, + /* 11560 */ 158, 392, 392, 392, 392, 392, 392, 392, 168, 392, + /* 11570 */ 392, 171, 170, 392, 5, 6, 7, 8, 9, 10, + /* 11580 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 11590 */ 21, 22, 23, 24, 25, 26, 392, 28, 29, 30, + /* 11600 */ 31, 392, 33, 34, 392, 392, 392, 392, 392, 392, + /* 11610 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 11620 */ 51, 52, 392, 392, 5, 6, 7, 8, 9, 10, + /* 11630 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 11640 */ 21, 22, 23, 24, 25, 26, 392, 28, 29, 30, + /* 11650 */ 31, 392, 33, 34, 392, 392, 392, 392, 392, 38, + /* 11660 */ 392, 392, 41, 42, 392, 392, 392, 48, 49, 48, + /* 11670 */ 51, 52, 392, 392, 53, 392, 392, 392, 392, 392, + /* 11680 */ 392, 392, 392, 392, 392, 392, 392, 392, 119, 392, + /* 11690 */ 392, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 11700 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11710 */ 392, 392, 392, 144, 392, 392, 95, 96, 392, 98, + /* 11720 */ 392, 100, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11730 */ 392, 392, 111, 392, 392, 392, 392, 168, 119, 118, + /* 11740 */ 171, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 11750 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11760 */ 139, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 11770 */ 149, 392, 151, 392, 392, 392, 392, 392, 392, 158, + /* 11780 */ 392, 392, 392, 392, 392, 392, 392, 168, 392, 392, + /* 11790 */ 171, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 11800 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 11810 */ 22, 23, 24, 25, 26, 392, 28, 29, 30, 31, + /* 11820 */ 392, 33, 34, 392, 392, 392, 392, 392, 392, 392, + /* 11830 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 11840 */ 52, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 11850 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 11860 */ 22, 23, 24, 25, 26, 392, 28, 29, 30, 31, + /* 11870 */ 392, 33, 34, 392, 392, 392, 392, 392, 38, 392, + /* 11880 */ 392, 41, 42, 392, 392, 392, 48, 49, 48, 51, + /* 11890 */ 52, 392, 392, 53, 392, 392, 392, 392, 392, 392, + /* 11900 */ 392, 392, 392, 392, 392, 392, 392, 119, 392, 392, + /* 11910 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 11920 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11930 */ 392, 392, 144, 392, 392, 95, 96, 392, 98, 392, + /* 11940 */ 100, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11950 */ 392, 111, 112, 392, 392, 392, 168, 119, 118, 171, + /* 11960 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 11970 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 11980 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 149, + /* 11990 */ 392, 151, 392, 392, 392, 392, 392, 392, 158, 392, + /* 12000 */ 392, 392, 392, 392, 392, 392, 168, 392, 392, 171, + /* 12010 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 12020 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 12030 */ 23, 24, 25, 26, 392, 28, 29, 30, 31, 392, + /* 12040 */ 33, 34, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12050 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 12060 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 12070 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 12080 */ 23, 24, 25, 26, 392, 28, 29, 30, 31, 392, + /* 12090 */ 33, 34, 392, 392, 392, 392, 392, 38, 392, 392, + /* 12100 */ 41, 42, 392, 392, 392, 48, 49, 48, 51, 52, + /* 12110 */ 392, 392, 53, 392, 392, 392, 392, 392, 392, 392, + /* 12120 */ 392, 392, 392, 392, 392, 392, 119, 392, 392, 122, + /* 12130 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 12140 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12150 */ 392, 144, 392, 392, 95, 96, 392, 98, 392, 100, + /* 12160 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12170 */ 111, 392, 392, 392, 392, 168, 119, 118, 171, 122, + /* 12180 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 12190 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12200 */ 392, 144, 392, 392, 392, 392, 392, 392, 149, 150, + /* 12210 */ 151, 392, 392, 392, 392, 392, 392, 158, 392, 392, + /* 12220 */ 392, 392, 392, 392, 392, 168, 392, 392, 171, 392, + /* 12230 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 12240 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 12250 */ 24, 25, 26, 392, 28, 29, 30, 31, 392, 33, + /* 12260 */ 34, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12270 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 12280 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 12290 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 12300 */ 24, 25, 26, 392, 28, 29, 30, 31, 392, 33, + /* 12310 */ 34, 392, 392, 392, 392, 392, 38, 392, 392, 41, + /* 12320 */ 42, 392, 392, 392, 48, 49, 48, 51, 52, 392, + /* 12330 */ 392, 53, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12340 */ 392, 392, 392, 392, 392, 119, 392, 392, 122, 123, + /* 12350 */ 392, 392, 126, 392, 392, 392, 392, 392, 392, 392, + /* 12360 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12370 */ 144, 392, 392, 95, 96, 392, 98, 392, 100, 101, + /* 12380 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 111, + /* 12390 */ 392, 392, 392, 392, 168, 119, 118, 171, 122, 123, + /* 12400 */ 392, 392, 126, 392, 392, 392, 392, 392, 392, 392, + /* 12410 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12420 */ 144, 392, 392, 392, 392, 392, 392, 149, 392, 151, + /* 12430 */ 392, 392, 392, 392, 392, 392, 158, 392, 392, 392, + /* 12440 */ 392, 392, 392, 392, 168, 392, 392, 171, 392, 392, + /* 12450 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + /* 12460 */ 15, 16, 17, 18, 392, 20, 21, 22, 23, 24, + /* 12470 */ 25, 26, 392, 28, 29, 30, 31, 392, 33, 34, + /* 12480 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12490 */ 392, 392, 392, 48, 49, 392, 51, 52, 392, 392, + /* 12500 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + /* 12510 */ 15, 16, 17, 18, 392, 20, 21, 22, 23, 24, + /* 12520 */ 25, 26, 392, 28, 29, 30, 31, 392, 33, 34, + /* 12530 */ 392, 392, 392, 392, 392, 38, 392, 392, 41, 42, + /* 12540 */ 392, 392, 392, 48, 49, 48, 51, 52, 392, 392, + /* 12550 */ 53, 392, 55, 392, 392, 392, 392, 392, 392, 392, + /* 12560 */ 392, 392, 392, 392, 119, 392, 392, 122, 123, 392, + /* 12570 */ 392, 126, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12580 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 144, + /* 12590 */ 392, 392, 95, 96, 392, 98, 392, 100, 392, 392, + /* 12600 */ 392, 392, 392, 392, 392, 392, 392, 392, 111, 392, + /* 12610 */ 392, 392, 392, 168, 119, 118, 171, 122, 123, 392, + /* 12620 */ 392, 126, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12630 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 144, + /* 12640 */ 392, 392, 392, 392, 392, 392, 149, 392, 151, 392, + /* 12650 */ 392, 392, 392, 392, 392, 158, 392, 392, 392, 392, + /* 12660 */ 392, 392, 392, 168, 392, 392, 171, 392, 392, 5, + /* 12670 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + /* 12680 */ 16, 17, 18, 392, 20, 21, 22, 23, 24, 25, + /* 12690 */ 26, 392, 28, 29, 30, 31, 392, 33, 34, 392, + /* 12700 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12710 */ 392, 392, 48, 49, 392, 51, 52, 392, 392, 5, + /* 12720 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + /* 12730 */ 16, 17, 18, 392, 20, 21, 22, 23, 24, 25, + /* 12740 */ 26, 392, 28, 29, 30, 31, 392, 33, 34, 392, + /* 12750 */ 392, 392, 392, 392, 38, 392, 392, 41, 42, 392, + /* 12760 */ 392, 392, 48, 49, 48, 51, 52, 392, 392, 53, + /* 12770 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12780 */ 392, 392, 392, 119, 392, 392, 122, 123, 392, 392, + /* 12790 */ 126, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12800 */ 392, 392, 392, 392, 392, 392, 392, 392, 144, 392, + /* 12810 */ 392, 95, 96, 392, 98, 392, 100, 392, 392, 392, + /* 12820 */ 392, 392, 392, 392, 392, 392, 392, 111, 392, 392, + /* 12830 */ 392, 392, 168, 119, 118, 171, 122, 123, 392, 392, + /* 12840 */ 126, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12850 */ 392, 392, 392, 392, 392, 139, 392, 392, 144, 392, + /* 12860 */ 392, 392, 392, 392, 392, 149, 392, 151, 392, 392, + /* 12870 */ 392, 392, 392, 392, 158, 392, 392, 392, 392, 392, + /* 12880 */ 392, 392, 168, 392, 392, 171, 392, 392, 5, 6, + /* 12890 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 12900 */ 17, 18, 392, 20, 21, 22, 23, 24, 25, 26, + /* 12910 */ 392, 28, 29, 30, 31, 392, 33, 34, 392, 392, + /* 12920 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 12930 */ 392, 48, 49, 392, 51, 52, 392, 392, 5, 6, + /* 12940 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 12950 */ 17, 18, 392, 20, 21, 22, 23, 24, 25, 26, + /* 12960 */ 392, 28, 29, 30, 31, 392, 33, 34, 392, 392, + /* 12970 */ 392, 392, 392, 38, 392, 392, 41, 42, 392, 392, + /* 12980 */ 392, 48, 49, 48, 51, 52, 392, 392, 53, 392, + /* 12990 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13000 */ 392, 392, 119, 392, 392, 122, 123, 392, 392, 126, + /* 13010 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13020 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 13030 */ 95, 96, 392, 98, 392, 100, 392, 392, 392, 392, + /* 13040 */ 392, 392, 392, 392, 392, 392, 111, 392, 392, 392, + /* 13050 */ 392, 168, 119, 118, 171, 122, 123, 392, 392, 126, + /* 13060 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13070 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 13080 */ 392, 392, 392, 392, 149, 392, 151, 392, 392, 392, + /* 13090 */ 392, 392, 392, 158, 392, 392, 392, 392, 392, 392, + /* 13100 */ 392, 168, 392, 392, 171, 392, 392, 5, 6, 7, + /* 13110 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 13120 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 13130 */ 28, 29, 30, 31, 392, 33, 34, 392, 392, 392, + /* 13140 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13150 */ 48, 49, 392, 51, 52, 392, 392, 5, 6, 7, + /* 13160 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 13170 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 13180 */ 28, 29, 30, 31, 392, 33, 34, 392, 392, 392, + /* 13190 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13200 */ 48, 49, 392, 51, 52, 392, 392, 392, 392, 392, + /* 13210 */ 392, 392, 392, 392, 392, 392, 392, 392, 39, 40, + /* 13220 */ 392, 119, 392, 392, 122, 123, 392, 392, 126, 392, + /* 13230 */ 392, 392, 392, 392, 392, 56, 392, 58, 392, 60, + /* 13240 */ 61, 62, 392, 392, 392, 392, 144, 392, 392, 392, + /* 13250 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13270 */ 168, 119, 392, 171, 122, 123, 392, 392, 126, 392, + /* 13280 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13290 */ 392, 392, 392, 114, 115, 392, 144, 392, 392, 392, + /* 13300 */ 392, 392, 392, 124, 392, 392, 392, 392, 392, 392, + /* 13310 */ 392, 392, 392, 392, 392, 136, 392, 138, 392, 392, + /* 13320 */ 168, 392, 392, 171, 145, 392, 5, 6, 7, 8, + /* 13330 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 13340 */ 161, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 13350 */ 29, 30, 31, 392, 33, 34, 392, 392, 392, 392, + /* 13360 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 13370 */ 49, 392, 51, 52, 392, 392, 5, 6, 7, 8, + /* 13380 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 13390 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 13400 */ 29, 30, 31, 392, 33, 34, 392, 392, 392, 392, + /* 13410 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 13420 */ 49, 392, 51, 52, 392, 392, 392, 392, 392, 392, + /* 13430 */ 392, 392, 392, 392, 392, 392, 392, 39, 40, 392, + /* 13440 */ 119, 392, 392, 122, 123, 392, 392, 126, 392, 392, + /* 13450 */ 392, 392, 392, 392, 56, 392, 58, 392, 60, 61, + /* 13460 */ 62, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 13470 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13480 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 13490 */ 119, 392, 171, 122, 123, 392, 392, 126, 392, 392, + /* 13500 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13510 */ 392, 392, 114, 115, 392, 144, 392, 392, 392, 392, + /* 13520 */ 392, 392, 124, 392, 392, 392, 392, 392, 392, 392, + /* 13530 */ 392, 392, 392, 392, 136, 392, 138, 392, 392, 168, + /* 13540 */ 392, 392, 171, 145, 392, 5, 6, 7, 8, 9, + /* 13550 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 161, + /* 13560 */ 20, 21, 22, 23, 24, 25, 26, 392, 28, 29, + /* 13570 */ 30, 31, 392, 33, 34, 392, 392, 392, 392, 392, + /* 13580 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 13590 */ 392, 51, 52, 392, 392, 5, 6, 7, 8, 9, + /* 13600 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 13610 */ 20, 21, 22, 23, 24, 25, 26, 392, 28, 29, + /* 13620 */ 30, 31, 392, 33, 34, 392, 392, 392, 392, 392, + /* 13630 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 13640 */ 392, 51, 52, 392, 392, 392, 392, 392, 392, 392, + /* 13650 */ 392, 392, 392, 392, 392, 392, 39, 40, 392, 119, + /* 13660 */ 392, 392, 122, 123, 392, 392, 126, 392, 392, 392, + /* 13670 */ 392, 392, 392, 56, 392, 58, 392, 60, 61, 62, + /* 13680 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 13690 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13700 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 119, + /* 13710 */ 392, 171, 122, 123, 392, 392, 126, 392, 392, 392, + /* 13720 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13730 */ 392, 114, 115, 392, 144, 392, 392, 392, 392, 392, + /* 13740 */ 392, 124, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13750 */ 392, 392, 392, 136, 392, 138, 392, 392, 168, 392, + /* 13760 */ 392, 171, 145, 392, 5, 6, 7, 8, 9, 10, + /* 13770 */ 11, 12, 13, 14, 15, 16, 17, 18, 161, 20, + /* 13780 */ 21, 22, 23, 24, 25, 26, 392, 28, 29, 30, + /* 13790 */ 31, 392, 33, 34, 392, 392, 392, 392, 392, 392, + /* 13800 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 13810 */ 51, 52, 392, 392, 5, 6, 7, 8, 9, 10, + /* 13820 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 13830 */ 21, 22, 23, 24, 25, 26, 392, 28, 29, 30, + /* 13840 */ 31, 392, 33, 34, 392, 392, 392, 392, 392, 392, + /* 13850 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 13860 */ 51, 52, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13870 */ 392, 392, 392, 392, 392, 39, 40, 392, 119, 392, + /* 13880 */ 392, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 13890 */ 392, 392, 56, 57, 392, 392, 60, 61, 62, 392, + /* 13900 */ 392, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 13910 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13920 */ 392, 392, 392, 392, 392, 392, 392, 168, 119, 392, + /* 13930 */ 171, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 13940 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13950 */ 114, 115, 392, 144, 392, 392, 392, 392, 392, 392, + /* 13960 */ 124, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 13970 */ 392, 392, 136, 392, 138, 392, 392, 168, 392, 392, + /* 13980 */ 171, 145, 392, 5, 6, 7, 8, 9, 10, 11, + /* 13990 */ 12, 13, 14, 15, 16, 17, 18, 161, 20, 21, + /* 14000 */ 22, 23, 24, 25, 26, 392, 28, 29, 30, 31, + /* 14010 */ 392, 33, 34, 392, 392, 392, 392, 392, 392, 392, + /* 14020 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 14030 */ 52, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 14040 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 14050 */ 22, 23, 24, 25, 26, 392, 28, 29, 30, 31, + /* 14060 */ 392, 33, 34, 392, 392, 392, 392, 392, 392, 392, + /* 14070 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 14080 */ 52, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14090 */ 392, 392, 392, 392, 39, 40, 392, 119, 392, 392, + /* 14100 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 14110 */ 392, 56, 392, 392, 392, 60, 61, 62, 392, 392, + /* 14120 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 14130 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14140 */ 392, 392, 392, 392, 392, 392, 168, 119, 392, 171, + /* 14150 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 14160 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 114, + /* 14170 */ 115, 392, 144, 392, 392, 392, 392, 392, 392, 124, + /* 14180 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14190 */ 392, 136, 392, 138, 392, 392, 168, 392, 392, 171, + /* 14200 */ 145, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 14210 */ 13, 14, 15, 16, 17, 18, 161, 20, 21, 22, + /* 14220 */ 23, 24, 25, 26, 392, 28, 29, 30, 31, 392, + /* 14230 */ 33, 34, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14240 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 14250 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 14260 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 14270 */ 23, 24, 25, 26, 392, 28, 29, 30, 31, 392, + /* 14280 */ 33, 34, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14290 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 14300 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14310 */ 392, 392, 392, 392, 392, 392, 119, 392, 392, 122, + /* 14320 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 14330 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14340 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14350 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14360 */ 392, 392, 392, 392, 392, 168, 119, 392, 171, 122, + /* 14370 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 14380 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14390 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14400 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14410 */ 392, 392, 392, 392, 392, 168, 392, 392, 171, 392, + /* 14420 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 14430 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 14440 */ 24, 25, 26, 392, 28, 29, 30, 31, 392, 33, + /* 14450 */ 34, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14460 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 14470 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 14480 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 14490 */ 24, 25, 26, 392, 28, 29, 392, 31, 392, 33, + /* 14500 */ 34, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14510 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 14520 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14530 */ 392, 392, 392, 392, 392, 119, 392, 392, 122, 123, + /* 14540 */ 392, 392, 126, 392, 392, 392, 392, 392, 392, 392, + /* 14550 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14560 */ 144, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14570 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14580 */ 392, 392, 392, 392, 168, 119, 392, 171, 122, 123, + /* 14590 */ 392, 392, 126, 392, 392, 392, 392, 392, 392, 392, + /* 14600 */ 39, 40, 392, 137, 392, 392, 392, 392, 392, 392, + /* 14610 */ 144, 50, 392, 392, 392, 392, 392, 56, 57, 58, + /* 14620 */ 392, 60, 61, 62, 392, 392, 392, 392, 392, 392, + /* 14630 */ 392, 392, 392, 392, 168, 392, 392, 171, 392, 392, + /* 14640 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + /* 14650 */ 15, 16, 17, 18, 392, 20, 21, 22, 23, 24, + /* 14660 */ 25, 26, 392, 28, 29, 392, 31, 392, 33, 34, + /* 14670 */ 392, 392, 392, 392, 392, 114, 115, 116, 117, 392, + /* 14680 */ 392, 392, 392, 48, 49, 124, 51, 52, 392, 392, + /* 14690 */ 392, 392, 392, 392, 59, 392, 392, 136, 392, 138, + /* 14700 */ 392, 392, 392, 392, 392, 392, 145, 392, 392, 392, + /* 14710 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14720 */ 392, 392, 161, 392, 392, 392, 392, 392, 392, 392, + /* 14730 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14740 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14750 */ 392, 392, 392, 392, 119, 392, 392, 122, 123, 392, + /* 14760 */ 392, 126, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14770 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 144, + /* 14780 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14790 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14800 */ 392, 392, 392, 168, 392, 392, 171, 392, 392, 5, + /* 14810 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + /* 14820 */ 16, 17, 18, 392, 20, 21, 22, 23, 24, 25, + /* 14830 */ 26, 392, 28, 29, 392, 31, 392, 33, 34, 392, + /* 14840 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14850 */ 392, 392, 48, 49, 392, 51, 52, 392, 392, 392, + /* 14860 */ 392, 392, 392, 59, 392, 392, 392, 392, 392, 5, + /* 14870 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + /* 14880 */ 16, 17, 18, 392, 20, 21, 22, 23, 24, 25, + /* 14890 */ 26, 392, 28, 29, 392, 31, 392, 33, 34, 392, + /* 14900 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14910 */ 392, 392, 48, 49, 392, 51, 52, 392, 392, 392, + /* 14920 */ 392, 392, 392, 119, 392, 392, 122, 123, 392, 392, + /* 14930 */ 126, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14940 */ 392, 392, 392, 392, 392, 392, 392, 392, 144, 392, + /* 14950 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14960 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 14970 */ 392, 392, 168, 392, 392, 171, 392, 392, 392, 392, + /* 14980 */ 392, 392, 392, 119, 392, 392, 122, 123, 392, 392, + /* 14990 */ 126, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15000 */ 392, 392, 392, 392, 392, 392, 392, 392, 144, 392, + /* 15010 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15020 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15030 */ 392, 392, 168, 392, 392, 171, 392, 392, 5, 6, + /* 15040 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 15050 */ 17, 18, 392, 20, 21, 22, 23, 24, 25, 26, + /* 15060 */ 392, 28, 29, 392, 31, 392, 33, 34, 392, 392, + /* 15070 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15080 */ 392, 48, 49, 392, 51, 52, 392, 392, 5, 6, + /* 15090 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 15100 */ 17, 18, 392, 20, 21, 22, 23, 24, 25, 26, + /* 15110 */ 392, 28, 29, 392, 31, 392, 33, 34, 392, 392, + /* 15120 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15130 */ 392, 48, 49, 392, 51, 52, 392, 392, 392, 392, + /* 15140 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15150 */ 392, 392, 119, 392, 392, 122, 123, 392, 392, 126, + /* 15160 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15170 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 15180 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15190 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15200 */ 392, 168, 119, 392, 171, 122, 123, 392, 392, 126, + /* 15210 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15220 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 15230 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15240 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15250 */ 392, 168, 392, 392, 171, 392, 392, 5, 6, 7, + /* 15260 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 15270 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 15280 */ 28, 29, 392, 31, 392, 33, 34, 392, 392, 392, + /* 15290 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15300 */ 48, 49, 392, 51, 52, 392, 392, 5, 6, 7, + /* 15310 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 15320 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 15330 */ 28, 29, 392, 31, 392, 33, 34, 392, 392, 392, + /* 15340 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15350 */ 48, 49, 392, 51, 52, 392, 392, 392, 392, 392, + /* 15360 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15370 */ 392, 119, 392, 392, 122, 123, 392, 392, 126, 392, + /* 15380 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15390 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 15400 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15410 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15420 */ 168, 119, 392, 171, 122, 123, 392, 392, 126, 392, + /* 15430 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15440 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 15450 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15460 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15470 */ 168, 392, 392, 171, 392, 392, 5, 6, 7, 8, + /* 15480 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 15490 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 15500 */ 29, 392, 31, 392, 33, 34, 392, 392, 392, 392, + /* 15510 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 15520 */ 49, 392, 51, 52, 392, 392, 5, 6, 7, 8, + /* 15530 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 15540 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 28, + /* 15550 */ 29, 392, 31, 392, 33, 34, 392, 392, 392, 392, + /* 15560 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 15570 */ 49, 392, 51, 52, 392, 392, 392, 392, 392, 392, + /* 15580 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15590 */ 119, 392, 392, 122, 123, 392, 392, 126, 392, 392, + /* 15600 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15610 */ 392, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 15620 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15630 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 15640 */ 119, 392, 171, 122, 123, 392, 392, 126, 392, 392, + /* 15650 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15660 */ 392, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 15670 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15680 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 15690 */ 392, 392, 171, 392, 392, 5, 6, 7, 8, 9, + /* 15700 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 15710 */ 20, 21, 22, 23, 24, 25, 26, 392, 28, 29, + /* 15720 */ 392, 31, 392, 33, 34, 392, 392, 392, 392, 392, + /* 15730 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 15740 */ 392, 51, 52, 392, 392, 5, 6, 7, 8, 9, + /* 15750 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 15760 */ 20, 21, 22, 23, 24, 25, 26, 392, 28, 29, + /* 15770 */ 392, 31, 392, 33, 34, 392, 392, 392, 392, 392, + /* 15780 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 15790 */ 392, 51, 52, 392, 392, 392, 392, 392, 392, 392, + /* 15800 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 119, + /* 15810 */ 392, 392, 122, 123, 392, 392, 126, 392, 392, 392, + /* 15820 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15830 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 15840 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15850 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 119, + /* 15860 */ 392, 171, 122, 123, 392, 392, 126, 392, 392, 392, + /* 15870 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15880 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 15890 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 15900 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 392, + /* 15910 */ 392, 171, 392, 392, 5, 6, 7, 8, 9, 10, + /* 15920 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 15930 */ 21, 22, 23, 24, 25, 26, 392, 28, 29, 392, + /* 15940 */ 31, 392, 33, 34, 392, 392, 392, 392, 392, 392, + /* 15950 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 15960 */ 51, 52, 392, 392, 5, 6, 7, 8, 9, 10, + /* 15970 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 15980 */ 21, 22, 23, 24, 25, 26, 392, 28, 29, 392, + /* 15990 */ 31, 392, 33, 34, 392, 392, 392, 392, 392, 392, + /* 16000 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 16010 */ 51, 52, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16020 */ 392, 392, 392, 392, 392, 392, 392, 392, 119, 392, + /* 16030 */ 392, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 16040 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16050 */ 392, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 16060 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16070 */ 392, 392, 392, 392, 392, 392, 392, 168, 119, 392, + /* 16080 */ 171, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 16090 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16100 */ 392, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 16110 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16120 */ 392, 392, 392, 392, 392, 392, 392, 168, 392, 392, + /* 16130 */ 171, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 16140 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 16150 */ 22, 23, 24, 25, 26, 392, 28, 29, 392, 31, + /* 16160 */ 392, 33, 34, 392, 392, 392, 392, 392, 392, 392, + /* 16170 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 16180 */ 52, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 16190 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 16200 */ 22, 23, 24, 25, 26, 392, 28, 29, 392, 31, + /* 16210 */ 392, 33, 34, 392, 392, 392, 392, 392, 392, 392, + /* 16220 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 16230 */ 52, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16240 */ 392, 392, 392, 392, 392, 392, 392, 119, 392, 392, + /* 16250 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 16260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16270 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 16280 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16290 */ 392, 392, 392, 392, 392, 392, 168, 119, 392, 171, + /* 16300 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 16310 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16320 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 16330 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16340 */ 392, 392, 392, 392, 392, 392, 168, 392, 392, 171, + /* 16350 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 16360 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 16370 */ 23, 24, 25, 26, 392, 28, 29, 392, 31, 392, + /* 16380 */ 33, 34, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16390 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 16400 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 16410 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 16420 */ 23, 24, 25, 26, 392, 28, 29, 392, 31, 392, + /* 16430 */ 33, 34, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16440 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 16450 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16460 */ 392, 392, 392, 392, 392, 392, 119, 392, 392, 122, + /* 16470 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 16480 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16490 */ 392, 144, 392, 392, 392, 190, 392, 392, 193, 194, + /* 16500 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16510 */ 392, 392, 392, 392, 392, 168, 119, 392, 171, 122, + /* 16520 */ 123, 392, 392, 126, 392, 392, 392, 392, 223, 224, + /* 16530 */ 392, 392, 227, 228, 392, 392, 231, 392, 392, 392, + /* 16540 */ 392, 144, 392, 392, 392, 392, 392, 392, 243, 392, + /* 16550 */ 245, 392, 247, 392, 392, 392, 392, 392, 392, 392, + /* 16560 */ 392, 392, 392, 392, 392, 168, 392, 392, 171, 392, + /* 16570 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 16580 */ 14, 15, 16, 17, 18, 280, 20, 21, 22, 23, + /* 16590 */ 24, 25, 26, 392, 28, 29, 392, 31, 392, 33, + /* 16600 */ 34, 392, 392, 392, 299, 392, 174, 175, 190, 177, + /* 16610 */ 178, 193, 194, 392, 48, 49, 392, 51, 52, 392, + /* 16620 */ 392, 189, 392, 191, 192, 193, 194, 195, 196, 197, + /* 16630 */ 392, 392, 392, 392, 329, 392, 392, 392, 392, 207, + /* 16640 */ 392, 209, 224, 338, 392, 227, 228, 392, 392, 231, + /* 16650 */ 392, 392, 392, 392, 392, 392, 392, 352, 392, 354, + /* 16660 */ 228, 243, 392, 245, 392, 247, 392, 392, 392, 392, + /* 16670 */ 392, 392, 392, 241, 242, 370, 244, 392, 392, 392, + /* 16680 */ 392, 392, 392, 392, 252, 119, 392, 392, 122, 123, + /* 16690 */ 392, 392, 126, 392, 392, 392, 392, 392, 280, 392, + /* 16700 */ 392, 392, 392, 392, 272, 392, 392, 392, 392, 392, + /* 16710 */ 144, 279, 392, 392, 392, 283, 284, 299, 392, 287, + /* 16720 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16730 */ 392, 392, 392, 392, 168, 392, 392, 171, 392, 392, + /* 16740 */ 392, 392, 392, 311, 392, 392, 392, 329, 392, 392, + /* 16750 */ 318, 319, 320, 321, 392, 392, 338, 392, 392, 392, + /* 16760 */ 392, 392, 178, 392, 392, 392, 334, 392, 336, 337, + /* 16770 */ 352, 187, 354, 189, 342, 191, 192, 193, 194, 195, + /* 16780 */ 196, 197, 392, 392, 392, 392, 392, 392, 370, 392, + /* 16790 */ 392, 207, 392, 209, 392, 392, 392, 392, 392, 367, + /* 16800 */ 368, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16810 */ 392, 392, 228, 381, 392, 392, 39, 40, 392, 392, + /* 16820 */ 392, 392, 392, 392, 392, 241, 242, 50, 392, 392, + /* 16830 */ 392, 392, 392, 56, 57, 392, 252, 60, 61, 62, + /* 16840 */ 392, 392, 392, 392, 392, 392, 392, 392, 264, 392, + /* 16850 */ 392, 392, 392, 392, 392, 392, 272, 392, 392, 392, + /* 16860 */ 392, 392, 392, 279, 392, 392, 392, 283, 284, 392, + /* 16870 */ 392, 287, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16880 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16890 */ 392, 114, 115, 116, 117, 311, 392, 392, 392, 392, + /* 16900 */ 392, 124, 318, 319, 320, 321, 392, 392, 392, 392, + /* 16910 */ 392, 392, 392, 136, 392, 138, 178, 392, 334, 392, + /* 16920 */ 336, 337, 145, 392, 392, 187, 342, 189, 392, 191, + /* 16930 */ 192, 193, 194, 195, 196, 197, 392, 392, 161, 392, + /* 16940 */ 392, 392, 392, 392, 392, 207, 392, 209, 392, 392, + /* 16950 */ 392, 367, 368, 392, 392, 392, 189, 392, 392, 192, + /* 16960 */ 193, 194, 195, 392, 197, 381, 228, 392, 392, 392, + /* 16970 */ 392, 392, 388, 392, 392, 392, 392, 392, 392, 241, + /* 16980 */ 242, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 16990 */ 252, 392, 392, 392, 392, 228, 392, 392, 392, 392, + /* 17000 */ 392, 392, 264, 392, 392, 392, 392, 392, 241, 242, + /* 17010 */ 272, 392, 392, 392, 392, 178, 392, 279, 392, 252, + /* 17020 */ 392, 283, 284, 392, 392, 287, 189, 392, 191, 192, + /* 17030 */ 193, 194, 195, 196, 197, 392, 392, 392, 392, 392, + /* 17040 */ 392, 392, 205, 206, 207, 392, 209, 392, 392, 311, + /* 17050 */ 392, 392, 392, 392, 287, 392, 318, 319, 320, 321, + /* 17060 */ 392, 392, 392, 392, 392, 228, 392, 392, 392, 392, + /* 17070 */ 392, 392, 334, 392, 336, 337, 392, 392, 241, 242, + /* 17080 */ 342, 392, 392, 392, 392, 318, 319, 320, 321, 252, + /* 17090 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17100 */ 392, 334, 392, 336, 337, 367, 368, 392, 392, 272, + /* 17110 */ 392, 392, 392, 392, 178, 392, 279, 392, 392, 381, + /* 17120 */ 283, 284, 392, 392, 287, 189, 392, 191, 192, 193, + /* 17130 */ 194, 195, 196, 197, 392, 392, 392, 392, 202, 203, + /* 17140 */ 392, 392, 392, 207, 392, 209, 392, 392, 311, 392, + /* 17150 */ 392, 392, 392, 392, 392, 318, 319, 320, 321, 392, + /* 17160 */ 392, 392, 392, 392, 228, 392, 392, 392, 392, 392, + /* 17170 */ 392, 334, 392, 336, 337, 392, 392, 241, 242, 342, + /* 17180 */ 392, 392, 392, 392, 392, 392, 392, 392, 252, 392, + /* 17190 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17200 */ 392, 392, 392, 392, 367, 368, 392, 392, 272, 392, + /* 17210 */ 392, 392, 392, 178, 392, 279, 392, 392, 381, 283, + /* 17220 */ 284, 392, 392, 287, 189, 392, 191, 192, 193, 194, + /* 17230 */ 195, 196, 197, 392, 392, 392, 392, 202, 203, 392, + /* 17240 */ 392, 392, 207, 392, 209, 392, 392, 311, 392, 392, + /* 17250 */ 392, 392, 392, 392, 318, 319, 320, 321, 392, 392, + /* 17260 */ 392, 392, 392, 228, 392, 392, 392, 392, 392, 392, + /* 17270 */ 334, 392, 336, 337, 392, 392, 241, 242, 342, 392, + /* 17280 */ 392, 392, 392, 392, 392, 392, 392, 252, 392, 392, + /* 17290 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17300 */ 392, 392, 392, 367, 368, 392, 392, 272, 392, 392, + /* 17310 */ 392, 392, 392, 392, 279, 392, 392, 381, 283, 284, + /* 17320 */ 392, 392, 287, 189, 392, 191, 192, 193, 194, 195, + /* 17330 */ 196, 197, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17340 */ 392, 207, 392, 209, 392, 392, 311, 392, 392, 392, + /* 17350 */ 392, 392, 392, 318, 319, 320, 321, 392, 392, 392, + /* 17360 */ 392, 392, 228, 392, 392, 392, 392, 392, 392, 334, + /* 17370 */ 392, 336, 337, 239, 392, 241, 242, 342, 392, 392, + /* 17380 */ 392, 392, 392, 392, 392, 392, 252, 392, 392, 392, + /* 17390 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17400 */ 392, 392, 367, 368, 392, 392, 272, 392, 392, 392, + /* 17410 */ 392, 392, 392, 279, 392, 392, 381, 283, 284, 392, + /* 17420 */ 392, 287, 189, 392, 191, 192, 193, 194, 195, 196, + /* 17430 */ 197, 392, 392, 392, 392, 392, 392, 303, 392, 305, + /* 17440 */ 207, 392, 209, 392, 392, 311, 392, 392, 392, 392, + /* 17450 */ 392, 392, 318, 319, 320, 321, 392, 392, 392, 392, + /* 17460 */ 392, 228, 392, 392, 392, 392, 392, 392, 334, 392, + /* 17470 */ 336, 337, 239, 392, 241, 242, 342, 392, 392, 392, + /* 17480 */ 392, 392, 392, 392, 392, 252, 392, 392, 392, 392, + /* 17490 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17500 */ 392, 367, 368, 392, 392, 272, 392, 392, 392, 392, + /* 17510 */ 178, 392, 279, 392, 392, 381, 283, 284, 392, 392, + /* 17520 */ 287, 189, 392, 191, 192, 193, 194, 195, 196, 197, + /* 17530 */ 392, 392, 392, 392, 202, 203, 303, 304, 392, 207, + /* 17540 */ 392, 209, 392, 392, 311, 392, 392, 392, 392, 392, + /* 17550 */ 392, 318, 319, 320, 321, 392, 392, 392, 392, 392, + /* 17560 */ 228, 392, 392, 392, 392, 392, 392, 334, 392, 336, + /* 17570 */ 337, 392, 392, 241, 242, 342, 392, 392, 392, 392, + /* 17580 */ 392, 392, 392, 392, 252, 392, 392, 392, 392, 392, + /* 17590 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17600 */ 367, 368, 392, 392, 272, 392, 392, 392, 392, 178, + /* 17610 */ 392, 279, 392, 392, 381, 283, 284, 392, 392, 287, + /* 17620 */ 189, 392, 191, 192, 193, 194, 195, 196, 197, 392, + /* 17630 */ 392, 392, 392, 202, 203, 392, 392, 392, 207, 392, + /* 17640 */ 209, 392, 392, 311, 392, 392, 392, 392, 392, 392, + /* 17650 */ 318, 319, 320, 321, 392, 392, 392, 392, 392, 228, + /* 17660 */ 392, 392, 191, 192, 392, 392, 334, 392, 336, 337, + /* 17670 */ 392, 392, 241, 242, 342, 392, 392, 392, 392, 392, + /* 17680 */ 392, 392, 392, 252, 213, 214, 215, 216, 217, 392, + /* 17690 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 367, + /* 17700 */ 368, 230, 392, 272, 392, 392, 235, 392, 237, 392, + /* 17710 */ 279, 392, 392, 381, 283, 284, 392, 392, 287, 248, + /* 17720 */ 249, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17730 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17740 */ 392, 392, 311, 392, 392, 392, 392, 392, 392, 318, + /* 17750 */ 319, 320, 321, 392, 392, 392, 392, 392, 392, 392, + /* 17760 */ 392, 392, 392, 392, 392, 334, 392, 336, 337, 392, + /* 17770 */ 392, 392, 392, 342, 392, 392, 392, 392, 307, 392, + /* 17780 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17790 */ 392, 392, 392, 392, 392, 392, 325, 392, 367, 368, + /* 17800 */ 392, 330, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17810 */ 392, 392, 381, 392, 343, 392, 392, 392, 5, 6, + /* 17820 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 17830 */ 17, 18, 392, 20, 21, 22, 23, 24, 25, 26, + /* 17840 */ 369, 392, 29, 189, 31, 392, 192, 193, 194, 195, + /* 17850 */ 392, 197, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17860 */ 392, 48, 49, 392, 51, 52, 392, 392, 5, 6, + /* 17870 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 17880 */ 17, 18, 228, 20, 21, 22, 23, 24, 25, 26, + /* 17890 */ 392, 392, 29, 392, 31, 241, 242, 392, 392, 392, + /* 17900 */ 392, 392, 392, 392, 392, 392, 252, 392, 392, 392, + /* 17910 */ 392, 48, 49, 392, 51, 52, 392, 392, 392, 392, + /* 17920 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17930 */ 392, 392, 119, 392, 392, 122, 123, 392, 392, 126, + /* 17940 */ 392, 287, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17950 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 17960 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 17970 */ 392, 392, 318, 319, 320, 321, 392, 392, 392, 392, + /* 17980 */ 392, 168, 119, 392, 171, 122, 123, 392, 334, 126, + /* 17990 */ 336, 337, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18000 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 18010 */ 392, 392, 189, 392, 392, 192, 193, 194, 195, 392, + /* 18020 */ 197, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18030 */ 392, 168, 392, 392, 171, 392, 392, 5, 6, 7, + /* 18040 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 18050 */ 18, 228, 20, 21, 22, 23, 24, 25, 26, 392, + /* 18060 */ 392, 29, 392, 31, 241, 242, 392, 392, 392, 392, + /* 18070 */ 392, 392, 392, 392, 392, 252, 392, 392, 392, 392, + /* 18080 */ 48, 49, 392, 51, 52, 392, 392, 5, 6, 7, + /* 18090 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 18100 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 18110 */ 287, 29, 392, 31, 392, 392, 392, 392, 392, 392, + /* 18120 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18130 */ 48, 49, 392, 51, 52, 392, 392, 392, 392, 392, + /* 18140 */ 392, 318, 319, 320, 321, 392, 392, 392, 392, 392, + /* 18150 */ 392, 119, 392, 392, 122, 123, 392, 334, 126, 336, + /* 18160 */ 337, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18170 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 18180 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18190 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18200 */ 168, 119, 392, 171, 122, 123, 392, 392, 126, 392, + /* 18210 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18220 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 18230 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18240 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18250 */ 168, 392, 392, 171, 392, 392, 5, 6, 7, 8, + /* 18260 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 18270 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 392, + /* 18280 */ 29, 392, 31, 392, 392, 392, 392, 392, 392, 392, + /* 18290 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 18300 */ 49, 392, 51, 52, 392, 392, 5, 6, 7, 8, + /* 18310 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 18320 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 392, + /* 18330 */ 29, 392, 31, 392, 392, 392, 392, 392, 392, 392, + /* 18340 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 18350 */ 49, 392, 51, 52, 392, 392, 392, 392, 392, 392, + /* 18360 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18370 */ 119, 392, 392, 122, 123, 392, 392, 126, 392, 392, + /* 18380 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18390 */ 392, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 18400 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18410 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 18420 */ 119, 392, 171, 122, 123, 392, 392, 126, 392, 392, + /* 18430 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18440 */ 392, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 18450 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18460 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 18470 */ 392, 392, 171, 392, 392, 5, 6, 7, 8, 9, + /* 18480 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 18490 */ 20, 21, 22, 23, 24, 25, 26, 392, 392, 29, + /* 18500 */ 392, 31, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18510 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 18520 */ 392, 51, 52, 392, 392, 5, 6, 7, 8, 9, + /* 18530 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 18540 */ 20, 21, 22, 23, 24, 25, 26, 392, 392, 29, + /* 18550 */ 392, 31, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18560 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 18570 */ 392, 51, 52, 392, 392, 392, 392, 392, 392, 392, + /* 18580 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 119, + /* 18590 */ 392, 392, 122, 123, 392, 392, 126, 392, 392, 392, + /* 18600 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18610 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 18620 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18630 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 119, + /* 18640 */ 392, 171, 122, 123, 392, 392, 126, 392, 392, 392, + /* 18650 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18660 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 18670 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18680 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 392, + /* 18690 */ 392, 171, 392, 392, 5, 6, 7, 8, 9, 10, + /* 18700 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 18710 */ 21, 22, 23, 24, 25, 26, 392, 392, 29, 392, + /* 18720 */ 31, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18730 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 18740 */ 51, 52, 392, 392, 5, 6, 7, 8, 9, 10, + /* 18750 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 18760 */ 21, 22, 23, 24, 25, 26, 392, 392, 29, 392, + /* 18770 */ 31, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18780 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 18790 */ 51, 52, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18800 */ 392, 392, 392, 392, 392, 392, 392, 392, 119, 392, + /* 18810 */ 392, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 18820 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18830 */ 392, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 18840 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18850 */ 392, 392, 392, 392, 392, 392, 392, 168, 119, 392, + /* 18860 */ 171, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 18870 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18880 */ 392, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 18890 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18900 */ 392, 392, 392, 392, 392, 392, 392, 168, 392, 392, + /* 18910 */ 171, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 18920 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 18930 */ 22, 23, 24, 25, 26, 392, 392, 29, 392, 31, + /* 18940 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 18950 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 18960 */ 52, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 18970 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 18980 */ 22, 23, 24, 25, 26, 392, 392, 29, 392, 31, + /* 18990 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19000 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 19010 */ 52, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19020 */ 392, 392, 392, 392, 392, 392, 392, 119, 392, 392, + /* 19030 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 19040 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19050 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 19060 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19070 */ 392, 392, 392, 392, 392, 392, 168, 119, 392, 171, + /* 19080 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 19090 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19100 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 19110 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19120 */ 392, 392, 392, 392, 392, 392, 168, 392, 392, 171, + /* 19130 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 19140 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 19150 */ 23, 24, 25, 26, 392, 392, 29, 392, 31, 392, + /* 19160 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19170 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 19180 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 19190 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 19200 */ 23, 24, 25, 26, 392, 392, 29, 392, 31, 392, + /* 19210 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19220 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 19230 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19240 */ 392, 392, 392, 392, 392, 392, 119, 392, 392, 122, + /* 19250 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 19260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19270 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19280 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19290 */ 392, 392, 392, 392, 392, 168, 119, 392, 171, 122, + /* 19300 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 19310 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19320 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19330 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19340 */ 392, 392, 392, 392, 392, 168, 392, 392, 171, 392, + /* 19350 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 19360 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 19370 */ 24, 25, 26, 392, 392, 29, 392, 31, 392, 392, + /* 19380 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19390 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 19400 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 19410 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 19420 */ 24, 25, 26, 392, 392, 29, 392, 31, 392, 392, + /* 19430 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19440 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 19450 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19460 */ 392, 392, 392, 392, 392, 119, 392, 392, 122, 123, + /* 19470 */ 392, 392, 126, 392, 392, 392, 392, 392, 392, 392, + /* 19480 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19490 */ 144, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19500 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19510 */ 392, 392, 392, 392, 168, 119, 392, 171, 122, 123, + /* 19520 */ 392, 392, 126, 392, 392, 392, 392, 392, 392, 392, + /* 19530 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19540 */ 144, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19550 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19560 */ 392, 392, 392, 392, 168, 392, 392, 171, 392, 392, + /* 19570 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + /* 19580 */ 15, 16, 17, 18, 392, 20, 21, 22, 23, 24, + /* 19590 */ 25, 26, 392, 392, 29, 392, 31, 392, 392, 392, + /* 19600 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19610 */ 392, 392, 392, 48, 49, 392, 51, 52, 392, 392, + /* 19620 */ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + /* 19630 */ 15, 16, 17, 18, 392, 20, 21, 22, 23, 24, + /* 19640 */ 25, 26, 392, 392, 29, 392, 31, 392, 392, 392, + /* 19650 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19660 */ 392, 392, 392, 48, 49, 392, 51, 52, 392, 392, + /* 19670 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19680 */ 392, 392, 392, 392, 119, 392, 392, 122, 123, 392, + /* 19690 */ 392, 126, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19700 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 144, + /* 19710 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19720 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19730 */ 392, 392, 392, 168, 119, 392, 171, 122, 123, 392, + /* 19740 */ 392, 126, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19750 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 144, + /* 19760 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19770 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19780 */ 392, 392, 392, 168, 392, 392, 171, 392, 392, 5, + /* 19790 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + /* 19800 */ 16, 17, 18, 392, 20, 21, 22, 23, 24, 25, + /* 19810 */ 26, 392, 392, 29, 392, 31, 392, 392, 392, 392, + /* 19820 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19830 */ 392, 392, 48, 49, 392, 51, 52, 392, 392, 5, + /* 19840 */ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + /* 19850 */ 16, 17, 18, 392, 20, 21, 22, 23, 24, 25, + /* 19860 */ 26, 392, 392, 29, 392, 31, 392, 392, 392, 392, + /* 19870 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19880 */ 392, 392, 48, 49, 392, 51, 52, 392, 392, 392, + /* 19890 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19900 */ 392, 392, 392, 119, 392, 392, 122, 123, 392, 392, + /* 19910 */ 126, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19920 */ 392, 392, 392, 392, 392, 392, 392, 392, 144, 392, + /* 19930 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19940 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19950 */ 392, 392, 168, 119, 392, 171, 122, 123, 392, 392, + /* 19960 */ 126, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19970 */ 392, 392, 392, 392, 392, 392, 392, 392, 144, 392, + /* 19980 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 19990 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20000 */ 392, 392, 168, 392, 392, 171, 392, 392, 5, 6, + /* 20010 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 20020 */ 17, 18, 392, 20, 21, 22, 23, 24, 25, 26, + /* 20030 */ 392, 392, 29, 392, 31, 392, 392, 392, 392, 392, + /* 20040 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20050 */ 392, 48, 49, 392, 51, 52, 392, 392, 5, 6, + /* 20060 */ 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + /* 20070 */ 17, 18, 392, 20, 21, 22, 23, 24, 25, 26, + /* 20080 */ 392, 392, 29, 392, 31, 392, 392, 392, 392, 392, + /* 20090 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20100 */ 392, 48, 49, 392, 51, 52, 392, 392, 392, 392, + /* 20110 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20120 */ 392, 392, 119, 392, 392, 122, 123, 392, 392, 126, + /* 20130 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20140 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 20150 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20160 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20170 */ 392, 168, 119, 392, 171, 122, 123, 392, 392, 126, + /* 20180 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20190 */ 392, 392, 392, 392, 392, 392, 392, 144, 392, 392, + /* 20200 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20210 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20220 */ 392, 168, 392, 392, 171, 392, 392, 5, 6, 7, + /* 20230 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 20240 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 20250 */ 392, 29, 392, 31, 392, 392, 392, 392, 392, 392, + /* 20260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20270 */ 48, 49, 392, 51, 52, 392, 392, 5, 6, 7, + /* 20280 */ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + /* 20290 */ 18, 392, 20, 21, 22, 23, 24, 25, 26, 392, + /* 20300 */ 392, 29, 392, 31, 392, 392, 392, 392, 392, 392, + /* 20310 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20320 */ 48, 49, 392, 51, 52, 392, 392, 392, 392, 392, + /* 20330 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20340 */ 392, 119, 392, 392, 122, 123, 392, 392, 126, 392, + /* 20350 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20360 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 20370 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20380 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20390 */ 168, 119, 392, 171, 122, 123, 392, 392, 126, 392, + /* 20400 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20410 */ 392, 392, 392, 392, 392, 392, 144, 392, 392, 392, + /* 20420 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20430 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20440 */ 168, 392, 392, 171, 392, 392, 5, 6, 7, 8, + /* 20450 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 20460 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 392, + /* 20470 */ 29, 392, 31, 392, 392, 392, 392, 392, 392, 392, + /* 20480 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 20490 */ 49, 392, 51, 52, 392, 392, 5, 6, 7, 8, + /* 20500 */ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + /* 20510 */ 392, 20, 21, 22, 23, 24, 25, 26, 392, 392, + /* 20520 */ 29, 392, 31, 392, 392, 392, 392, 392, 392, 392, + /* 20530 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 48, + /* 20540 */ 49, 392, 51, 52, 392, 392, 392, 392, 392, 392, + /* 20550 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20560 */ 119, 392, 392, 122, 123, 392, 392, 126, 392, 392, + /* 20570 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20580 */ 392, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 20590 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20600 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 20610 */ 119, 392, 171, 122, 123, 392, 392, 126, 392, 392, + /* 20620 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20630 */ 392, 392, 392, 392, 392, 144, 392, 392, 392, 392, + /* 20640 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20650 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 168, + /* 20660 */ 392, 392, 171, 392, 392, 5, 6, 7, 8, 9, + /* 20670 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 20680 */ 20, 21, 22, 23, 24, 25, 26, 392, 392, 29, + /* 20690 */ 392, 31, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20700 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 20710 */ 392, 51, 52, 392, 392, 5, 6, 7, 8, 9, + /* 20720 */ 10, 11, 12, 13, 14, 15, 16, 17, 18, 392, + /* 20730 */ 20, 21, 22, 23, 24, 25, 26, 392, 392, 29, + /* 20740 */ 392, 31, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20750 */ 392, 392, 392, 392, 392, 392, 392, 392, 48, 49, + /* 20760 */ 392, 51, 52, 392, 392, 392, 392, 392, 392, 392, + /* 20770 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 119, + /* 20780 */ 392, 392, 122, 123, 392, 392, 126, 392, 392, 392, + /* 20790 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20800 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 20810 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20820 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 119, + /* 20830 */ 392, 171, 122, 123, 392, 392, 126, 392, 392, 392, + /* 20840 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20850 */ 392, 392, 392, 392, 144, 392, 392, 392, 392, 392, + /* 20860 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20870 */ 392, 392, 392, 392, 392, 392, 392, 392, 168, 392, + /* 20880 */ 392, 171, 392, 392, 5, 6, 7, 8, 9, 10, + /* 20890 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 20900 */ 21, 22, 23, 24, 25, 26, 392, 392, 29, 392, + /* 20910 */ 31, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20920 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 20930 */ 51, 52, 392, 392, 5, 6, 7, 8, 9, 10, + /* 20940 */ 11, 12, 13, 14, 15, 16, 17, 18, 392, 20, + /* 20950 */ 21, 22, 23, 24, 25, 26, 392, 392, 29, 392, + /* 20960 */ 31, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20970 */ 392, 392, 392, 392, 392, 392, 392, 48, 49, 392, + /* 20980 */ 51, 52, 392, 392, 392, 392, 392, 392, 392, 392, + /* 20990 */ 392, 392, 392, 392, 392, 392, 392, 392, 119, 392, + /* 21000 */ 392, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 21010 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21020 */ 392, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 21030 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21040 */ 392, 392, 392, 392, 392, 392, 392, 168, 119, 392, + /* 21050 */ 171, 122, 123, 392, 392, 126, 392, 392, 392, 392, + /* 21060 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21070 */ 392, 392, 392, 144, 392, 392, 392, 392, 392, 392, + /* 21080 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21090 */ 392, 392, 392, 392, 392, 392, 392, 168, 392, 392, + /* 21100 */ 171, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 21110 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 21120 */ 22, 23, 24, 25, 26, 392, 392, 29, 392, 31, + /* 21130 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21140 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 21150 */ 52, 392, 392, 5, 6, 7, 8, 9, 10, 11, + /* 21160 */ 12, 13, 14, 15, 16, 17, 18, 392, 20, 21, + /* 21170 */ 22, 23, 24, 25, 26, 392, 392, 29, 392, 31, + /* 21180 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21190 */ 392, 392, 392, 392, 392, 392, 48, 49, 392, 51, + /* 21200 */ 52, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21210 */ 392, 392, 392, 392, 392, 392, 392, 119, 392, 392, + /* 21220 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 21230 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21240 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 21250 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21260 */ 392, 392, 392, 392, 392, 392, 168, 119, 392, 171, + /* 21270 */ 122, 123, 392, 392, 126, 392, 392, 392, 392, 392, + /* 21280 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21290 */ 392, 392, 144, 392, 392, 392, 392, 392, 392, 392, + /* 21300 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21310 */ 392, 392, 392, 392, 392, 392, 168, 392, 392, 171, + /* 21320 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 21330 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 21340 */ 23, 24, 25, 26, 392, 392, 29, 392, 31, 392, + /* 21350 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21360 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 21370 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 21380 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 21390 */ 23, 24, 25, 26, 392, 392, 29, 392, 31, 392, + /* 21400 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21410 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 21420 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21430 */ 392, 392, 392, 392, 392, 392, 119, 392, 392, 122, + /* 21440 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 21450 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21460 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21470 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21480 */ 392, 392, 392, 392, 392, 168, 119, 392, 171, 122, + /* 21490 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 21500 */ 392, 392, 392, 392, 392, 178, 392, 392, 392, 392, + /* 21510 */ 392, 144, 392, 392, 392, 392, 189, 392, 191, 192, + /* 21520 */ 193, 194, 195, 196, 197, 392, 392, 392, 392, 392, + /* 21530 */ 392, 392, 392, 392, 207, 168, 209, 392, 171, 392, + /* 21540 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 21550 */ 14, 15, 16, 17, 18, 228, 20, 21, 22, 23, + /* 21560 */ 24, 25, 26, 392, 392, 29, 392, 31, 241, 242, + /* 21570 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 252, + /* 21580 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 21590 */ 392, 392, 38, 392, 392, 41, 42, 392, 392, 272, + /* 21600 */ 273, 392, 48, 392, 392, 392, 279, 53, 392, 392, + /* 21610 */ 283, 284, 392, 392, 287, 392, 392, 392, 392, 392, + /* 21620 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21630 */ 392, 392, 392, 392, 392, 392, 392, 392, 311, 392, + /* 21640 */ 392, 392, 392, 392, 392, 318, 319, 320, 321, 95, + /* 21650 */ 96, 392, 98, 392, 100, 119, 392, 392, 122, 123, + /* 21660 */ 392, 334, 126, 336, 337, 111, 392, 392, 178, 342, + /* 21670 */ 392, 392, 118, 392, 392, 121, 392, 392, 392, 189, + /* 21680 */ 144, 191, 192, 193, 194, 195, 196, 197, 392, 392, + /* 21690 */ 392, 392, 392, 392, 367, 368, 392, 207, 392, 209, + /* 21700 */ 392, 392, 392, 149, 168, 151, 392, 171, 381, 392, + /* 21710 */ 392, 392, 158, 392, 392, 392, 392, 392, 228, 392, + /* 21720 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 21730 */ 392, 241, 242, 392, 244, 392, 392, 392, 392, 178, + /* 21740 */ 392, 392, 252, 392, 392, 392, 392, 392, 392, 392, + /* 21750 */ 189, 392, 191, 192, 193, 194, 195, 196, 197, 392, + /* 21760 */ 392, 392, 272, 392, 392, 392, 392, 392, 207, 279, + /* 21770 */ 209, 392, 392, 283, 284, 392, 392, 287, 392, 392, + /* 21780 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 228, + /* 21790 */ 392, 392, 191, 192, 392, 392, 392, 392, 392, 392, + /* 21800 */ 392, 311, 241, 242, 392, 392, 392, 392, 318, 319, + /* 21810 */ 320, 321, 392, 252, 213, 214, 215, 216, 217, 392, + /* 21820 */ 392, 392, 392, 392, 334, 392, 336, 337, 392, 392, + /* 21830 */ 392, 230, 342, 272, 392, 392, 235, 392, 237, 392, + /* 21840 */ 279, 392, 392, 392, 283, 284, 392, 392, 287, 248, + /* 21850 */ 249, 392, 38, 392, 392, 41, 42, 367, 368, 392, + /* 21860 */ 392, 300, 48, 392, 392, 392, 392, 53, 392, 392, + /* 21870 */ 392, 381, 311, 178, 392, 392, 392, 392, 392, 318, + /* 21880 */ 319, 320, 321, 392, 189, 392, 191, 192, 193, 194, + /* 21890 */ 195, 196, 197, 392, 392, 334, 392, 336, 337, 392, + /* 21900 */ 392, 392, 207, 342, 209, 392, 392, 392, 307, 95, + /* 21910 */ 96, 392, 98, 392, 100, 392, 102, 392, 392, 392, + /* 21920 */ 106, 392, 392, 228, 392, 111, 325, 113, 367, 368, + /* 21930 */ 392, 330, 118, 392, 392, 392, 241, 242, 392, 392, + /* 21940 */ 392, 392, 381, 392, 343, 131, 392, 252, 392, 392, + /* 21950 */ 392, 392, 392, 139, 140, 392, 392, 392, 392, 392, + /* 21960 */ 392, 392, 392, 149, 392, 151, 152, 272, 392, 392, + /* 21970 */ 369, 392, 158, 392, 279, 392, 392, 163, 283, 284, + /* 21980 */ 166, 392, 287, 392, 170, 392, 392, 392, 392, 392, + /* 21990 */ 392, 392, 392, 392, 392, 300, 392, 392, 392, 392, + /* 22000 */ 392, 392, 392, 392, 392, 392, 311, 392, 392, 392, + /* 22010 */ 392, 392, 392, 318, 319, 320, 321, 392, 392, 392, + /* 22020 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 334, + /* 22030 */ 392, 336, 337, 392, 392, 392, 392, 342, 189, 392, + /* 22040 */ 191, 192, 193, 194, 195, 196, 197, 392, 392, 392, + /* 22050 */ 392, 392, 392, 392, 392, 392, 207, 392, 209, 392, + /* 22060 */ 392, 392, 367, 368, 392, 392, 392, 392, 392, 392, + /* 22070 */ 392, 392, 392, 392, 392, 392, 381, 228, 392, 392, + /* 22080 */ 392, 392, 392, 392, 392, 392, 392, 392, 239, 392, + /* 22090 */ 241, 242, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22100 */ 392, 252, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22110 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22120 */ 392, 272, 392, 392, 392, 392, 392, 392, 279, 392, + /* 22130 */ 392, 392, 283, 284, 392, 392, 287, 189, 392, 191, + /* 22140 */ 192, 193, 194, 195, 196, 197, 392, 392, 392, 392, + /* 22150 */ 301, 392, 392, 392, 392, 207, 392, 209, 392, 392, + /* 22160 */ 311, 392, 392, 392, 392, 392, 392, 318, 319, 320, + /* 22170 */ 321, 190, 392, 392, 193, 194, 228, 392, 392, 392, + /* 22180 */ 392, 392, 392, 334, 392, 336, 337, 239, 240, 241, + /* 22190 */ 242, 342, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22200 */ 252, 392, 392, 392, 223, 224, 392, 392, 227, 228, + /* 22210 */ 392, 392, 231, 392, 392, 392, 367, 368, 392, 392, + /* 22220 */ 272, 392, 392, 392, 243, 392, 245, 279, 247, 392, + /* 22230 */ 381, 283, 284, 392, 392, 287, 392, 392, 392, 392, + /* 22240 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22250 */ 392, 270, 392, 392, 392, 392, 392, 392, 392, 311, + /* 22260 */ 392, 280, 392, 392, 392, 392, 318, 319, 320, 321, + /* 22270 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22280 */ 299, 392, 334, 392, 336, 337, 392, 392, 392, 392, + /* 22290 */ 342, 189, 392, 191, 192, 193, 194, 195, 196, 197, + /* 22300 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 207, + /* 22310 */ 329, 209, 392, 392, 392, 367, 368, 392, 392, 338, + /* 22320 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 381, + /* 22330 */ 228, 392, 392, 352, 392, 354, 392, 392, 392, 392, + /* 22340 */ 238, 239, 392, 241, 242, 392, 392, 392, 392, 39, + /* 22350 */ 40, 370, 392, 392, 252, 392, 392, 392, 392, 392, + /* 22360 */ 50, 392, 392, 392, 392, 392, 56, 392, 58, 392, + /* 22370 */ 60, 61, 62, 392, 272, 392, 392, 392, 392, 178, + /* 22380 */ 392, 279, 392, 392, 392, 283, 284, 392, 392, 287, + /* 22390 */ 189, 392, 191, 192, 193, 194, 195, 196, 197, 392, + /* 22400 */ 392, 392, 392, 392, 392, 392, 392, 392, 207, 392, + /* 22410 */ 209, 392, 392, 311, 392, 392, 392, 392, 392, 392, + /* 22420 */ 318, 319, 320, 321, 114, 115, 116, 117, 392, 228, + /* 22430 */ 392, 392, 392, 392, 124, 392, 334, 392, 336, 337, + /* 22440 */ 392, 392, 241, 242, 342, 392, 136, 392, 138, 392, + /* 22450 */ 392, 392, 392, 252, 392, 145, 392, 392, 392, 392, + /* 22460 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 367, + /* 22470 */ 368, 161, 392, 272, 392, 392, 392, 392, 178, 392, + /* 22480 */ 279, 392, 392, 381, 283, 284, 392, 392, 287, 189, + /* 22490 */ 392, 191, 192, 193, 194, 195, 196, 197, 392, 392, + /* 22500 */ 392, 300, 392, 392, 392, 392, 392, 207, 392, 209, + /* 22510 */ 392, 392, 311, 392, 392, 392, 392, 392, 392, 318, + /* 22520 */ 319, 320, 321, 392, 392, 392, 392, 392, 228, 392, + /* 22530 */ 392, 392, 392, 392, 392, 334, 392, 336, 337, 392, + /* 22540 */ 392, 241, 242, 342, 392, 392, 246, 392, 392, 392, + /* 22550 */ 392, 392, 252, 392, 392, 392, 392, 392, 392, 392, + /* 22560 */ 392, 392, 392, 392, 392, 392, 392, 392, 367, 368, + /* 22570 */ 392, 392, 272, 392, 392, 392, 392, 392, 392, 279, + /* 22580 */ 392, 392, 381, 283, 284, 392, 392, 287, 189, 392, + /* 22590 */ 191, 192, 193, 194, 195, 196, 197, 392, 392, 392, + /* 22600 */ 392, 392, 392, 392, 392, 392, 207, 392, 209, 392, + /* 22610 */ 392, 311, 392, 392, 392, 392, 392, 392, 318, 319, + /* 22620 */ 320, 321, 392, 392, 392, 392, 392, 228, 392, 392, + /* 22630 */ 392, 392, 392, 392, 334, 392, 336, 337, 239, 392, + /* 22640 */ 241, 242, 342, 392, 392, 392, 392, 392, 392, 392, + /* 22650 */ 392, 252, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22660 */ 392, 392, 392, 392, 392, 392, 392, 367, 368, 392, + /* 22670 */ 392, 272, 392, 392, 392, 392, 392, 392, 279, 392, + /* 22680 */ 392, 381, 283, 284, 392, 392, 287, 189, 392, 191, + /* 22690 */ 192, 193, 194, 195, 196, 197, 392, 392, 392, 392, + /* 22700 */ 392, 392, 392, 392, 392, 207, 392, 209, 39, 392, + /* 22710 */ 311, 392, 392, 392, 392, 392, 392, 318, 319, 320, + /* 22720 */ 321, 392, 392, 392, 392, 56, 228, 392, 392, 60, + /* 22730 */ 61, 62, 392, 334, 335, 336, 337, 239, 240, 241, + /* 22740 */ 242, 342, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22750 */ 252, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22760 */ 392, 392, 392, 392, 392, 392, 367, 368, 392, 392, + /* 22770 */ 272, 392, 392, 392, 392, 39, 40, 279, 109, 110, + /* 22780 */ 381, 283, 284, 114, 115, 287, 50, 392, 392, 392, + /* 22790 */ 392, 392, 56, 124, 58, 392, 60, 61, 62, 392, + /* 22800 */ 392, 392, 392, 392, 392, 136, 392, 138, 392, 311, + /* 22810 */ 392, 392, 392, 392, 145, 392, 318, 319, 320, 321, + /* 22820 */ 392, 392, 392, 392, 392, 156, 392, 392, 392, 392, + /* 22830 */ 161, 392, 334, 392, 336, 337, 392, 392, 392, 392, + /* 22840 */ 342, 189, 392, 191, 192, 193, 194, 195, 196, 197, + /* 22850 */ 114, 115, 116, 117, 392, 392, 392, 392, 392, 207, + /* 22860 */ 124, 209, 392, 392, 392, 367, 368, 392, 392, 392, + /* 22870 */ 392, 392, 136, 392, 138, 392, 392, 392, 392, 381, + /* 22880 */ 228, 145, 392, 392, 392, 392, 392, 392, 392, 392, + /* 22890 */ 238, 239, 392, 241, 242, 392, 392, 161, 392, 39, + /* 22900 */ 40, 392, 392, 392, 252, 392, 392, 392, 392, 392, + /* 22910 */ 50, 392, 392, 392, 392, 392, 56, 392, 58, 392, + /* 22920 */ 60, 61, 62, 392, 272, 392, 392, 392, 392, 178, + /* 22930 */ 392, 279, 392, 392, 392, 283, 284, 392, 392, 287, + /* 22940 */ 189, 392, 191, 192, 193, 194, 195, 196, 197, 392, + /* 22950 */ 392, 392, 392, 392, 392, 392, 392, 392, 207, 392, + /* 22960 */ 209, 392, 392, 311, 392, 392, 392, 392, 392, 392, + /* 22970 */ 318, 319, 320, 321, 114, 115, 116, 117, 392, 228, + /* 22980 */ 392, 392, 392, 392, 124, 392, 334, 392, 336, 337, + /* 22990 */ 392, 392, 241, 242, 342, 392, 136, 392, 138, 392, + /* 23000 */ 392, 392, 392, 252, 392, 145, 392, 392, 392, 392, + /* 23010 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 367, + /* 23020 */ 368, 161, 392, 272, 392, 392, 392, 392, 178, 392, + /* 23030 */ 279, 392, 392, 381, 283, 284, 392, 392, 287, 189, + /* 23040 */ 392, 191, 192, 193, 194, 195, 196, 197, 392, 392, + /* 23050 */ 392, 300, 392, 203, 392, 392, 392, 207, 392, 209, + /* 23060 */ 392, 392, 311, 392, 392, 392, 392, 392, 392, 318, + /* 23070 */ 319, 320, 321, 392, 392, 392, 392, 392, 228, 392, + /* 23080 */ 392, 392, 392, 392, 392, 334, 392, 336, 337, 392, + /* 23090 */ 392, 241, 242, 342, 392, 392, 392, 392, 392, 392, + /* 23100 */ 392, 392, 252, 392, 392, 392, 392, 392, 392, 392, + /* 23110 */ 392, 392, 392, 392, 392, 392, 392, 392, 367, 368, + /* 23120 */ 392, 392, 272, 392, 392, 392, 392, 392, 392, 279, + /* 23130 */ 392, 392, 381, 283, 284, 392, 392, 287, 189, 392, + /* 23140 */ 191, 192, 193, 194, 195, 196, 197, 392, 392, 392, + /* 23150 */ 392, 392, 392, 392, 392, 392, 207, 392, 209, 392, + /* 23160 */ 392, 311, 392, 392, 392, 392, 392, 392, 318, 319, + /* 23170 */ 320, 321, 392, 392, 392, 392, 392, 228, 392, 392, + /* 23180 */ 392, 392, 392, 392, 334, 392, 336, 337, 239, 392, + /* 23190 */ 241, 242, 342, 392, 392, 392, 392, 392, 392, 392, + /* 23200 */ 392, 252, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23210 */ 392, 392, 392, 392, 265, 392, 392, 367, 368, 392, + /* 23220 */ 392, 272, 392, 392, 392, 392, 178, 392, 279, 392, + /* 23230 */ 392, 381, 283, 284, 392, 392, 287, 189, 392, 191, + /* 23240 */ 192, 193, 194, 195, 196, 197, 392, 392, 392, 392, + /* 23250 */ 392, 392, 392, 392, 206, 207, 392, 209, 392, 392, + /* 23260 */ 311, 392, 392, 392, 392, 392, 392, 318, 319, 320, + /* 23270 */ 321, 392, 392, 392, 392, 392, 228, 392, 392, 392, + /* 23280 */ 392, 392, 392, 334, 392, 336, 337, 392, 392, 241, + /* 23290 */ 242, 342, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23300 */ 252, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23310 */ 392, 392, 392, 392, 392, 392, 367, 368, 392, 392, + /* 23320 */ 272, 392, 392, 392, 392, 392, 392, 279, 392, 392, + /* 23330 */ 381, 283, 284, 392, 392, 287, 189, 392, 191, 192, + /* 23340 */ 193, 194, 195, 196, 197, 392, 392, 392, 392, 392, + /* 23350 */ 392, 392, 392, 392, 207, 392, 209, 392, 392, 311, + /* 23360 */ 392, 392, 392, 392, 392, 392, 318, 319, 320, 321, + /* 23370 */ 392, 392, 392, 392, 392, 228, 392, 392, 191, 192, + /* 23380 */ 392, 392, 334, 392, 336, 337, 239, 392, 241, 242, + /* 23390 */ 342, 392, 392, 392, 392, 392, 392, 392, 392, 252, + /* 23400 */ 213, 214, 215, 216, 217, 392, 392, 392, 392, 392, + /* 23410 */ 392, 392, 392, 392, 392, 367, 368, 230, 392, 272, + /* 23420 */ 392, 392, 235, 392, 237, 392, 279, 392, 392, 381, + /* 23430 */ 283, 284, 392, 392, 287, 248, 249, 392, 392, 392, + /* 23440 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23450 */ 392, 392, 392, 392, 392, 392, 392, 392, 311, 392, + /* 23460 */ 392, 392, 392, 392, 392, 318, 319, 320, 321, 392, + /* 23470 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23480 */ 392, 334, 190, 336, 337, 193, 194, 392, 392, 342, + /* 23490 */ 392, 392, 392, 392, 307, 392, 392, 392, 392, 392, + /* 23500 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23510 */ 392, 392, 325, 392, 367, 368, 224, 330, 392, 227, + /* 23520 */ 228, 392, 392, 231, 392, 392, 392, 392, 381, 392, + /* 23530 */ 343, 392, 392, 392, 392, 243, 389, 245, 392, 247, + /* 23540 */ 392, 392, 5, 6, 7, 8, 9, 10, 11, 12, + /* 23550 */ 13, 14, 15, 16, 17, 18, 369, 20, 21, 22, + /* 23560 */ 23, 24, 25, 392, 392, 392, 29, 392, 31, 392, + /* 23570 */ 392, 392, 280, 392, 392, 392, 392, 392, 392, 392, + /* 23580 */ 392, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 23590 */ 392, 299, 5, 6, 7, 8, 9, 10, 11, 12, + /* 23600 */ 13, 14, 15, 16, 17, 18, 392, 20, 21, 22, + /* 23610 */ 23, 24, 25, 392, 392, 392, 29, 392, 31, 392, + /* 23620 */ 392, 329, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23630 */ 338, 392, 392, 392, 392, 48, 49, 392, 51, 52, + /* 23640 */ 392, 392, 392, 392, 352, 392, 354, 392, 392, 392, + /* 23650 */ 392, 392, 392, 392, 392, 392, 119, 392, 392, 122, + /* 23660 */ 123, 392, 370, 126, 392, 392, 392, 392, 392, 392, + /* 23670 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23680 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23690 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23700 */ 392, 392, 392, 392, 392, 168, 119, 392, 171, 122, + /* 23710 */ 123, 392, 392, 126, 392, 392, 392, 392, 392, 392, + /* 23720 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23730 */ 392, 144, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23740 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23750 */ 392, 392, 392, 392, 392, 168, 392, 392, 171, 392, + /* 23760 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 23770 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 23780 */ 24, 25, 392, 392, 392, 29, 392, 31, 392, 392, + /* 23790 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23800 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 23810 */ 392, 5, 6, 7, 8, 9, 10, 11, 12, 13, + /* 23820 */ 14, 15, 16, 17, 18, 392, 20, 21, 22, 23, + /* 23830 */ 24, 25, 392, 392, 392, 29, 392, 31, 392, 392, + /* 23840 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23850 */ 392, 392, 392, 392, 48, 49, 392, 51, 52, 392, + /* 23860 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 23870 */ 39, 40, 392, 392, 392, 119, 392, 392, 122, 123, + /* 23880 */ 392, 50, 126, 392, 392, 392, 392, 56, 178, 58, + /* 23890 */ 392, 60, 61, 62, 392, 392, 392, 392, 392, 189, + /* 23900 */ 144, 191, 192, 193, 194, 195, 196, 197, 392, 392, + /* 23910 */ 392, 392, 392, 392, 392, 392, 392, 207, 392, 209, + /* 23920 */ 392, 392, 392, 392, 168, 119, 392, 171, 122, 123, + /* 23930 */ 392, 392, 126, 392, 392, 392, 392, 392, 228, 392, + /* 23940 */ 392, 392, 392, 392, 392, 114, 115, 116, 117, 392, + /* 23950 */ 144, 241, 242, 392, 392, 124, 392, 392, 392, 392, + /* 23960 */ 392, 392, 252, 392, 392, 392, 392, 136, 392, 138, + /* 23970 */ 392, 392, 392, 392, 168, 392, 145, 171, 392, 392, + /* 23980 */ 392, 392, 272, 392, 392, 392, 392, 178, 392, 279, + /* 23990 */ 392, 392, 161, 283, 284, 392, 392, 287, 189, 392, + /* 24000 */ 191, 192, 193, 194, 195, 196, 197, 392, 392, 392, + /* 24010 */ 392, 392, 392, 392, 392, 392, 207, 392, 209, 392, + /* 24020 */ 392, 311, 392, 392, 392, 392, 392, 392, 318, 319, + /* 24030 */ 320, 321, 392, 392, 392, 392, 392, 228, 392, 392, + /* 24040 */ 392, 392, 392, 392, 334, 392, 336, 337, 392, 392, + /* 24050 */ 241, 242, 342, 392, 392, 392, 392, 392, 392, 392, + /* 24060 */ 392, 252, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24070 */ 392, 392, 392, 392, 392, 392, 392, 367, 368, 392, + /* 24080 */ 392, 272, 392, 392, 392, 392, 178, 392, 279, 392, + /* 24090 */ 392, 381, 283, 284, 392, 392, 287, 189, 392, 191, + /* 24100 */ 192, 193, 194, 195, 196, 197, 392, 392, 392, 392, + /* 24110 */ 392, 392, 392, 392, 392, 207, 392, 209, 392, 392, + /* 24120 */ 311, 392, 392, 392, 392, 392, 392, 318, 319, 320, + /* 24130 */ 321, 392, 392, 392, 392, 392, 228, 392, 392, 392, + /* 24140 */ 392, 392, 392, 334, 392, 336, 337, 392, 392, 241, + /* 24150 */ 242, 342, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24160 */ 252, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24170 */ 392, 392, 392, 392, 392, 392, 367, 368, 392, 392, + /* 24180 */ 272, 392, 392, 392, 392, 178, 392, 279, 392, 392, + /* 24190 */ 381, 283, 284, 392, 392, 287, 189, 392, 191, 192, + /* 24200 */ 193, 194, 195, 196, 197, 392, 392, 392, 392, 392, + /* 24210 */ 392, 392, 392, 392, 207, 392, 209, 392, 392, 311, + /* 24220 */ 392, 392, 392, 392, 392, 392, 318, 319, 320, 321, + /* 24230 */ 392, 392, 392, 392, 392, 228, 392, 392, 392, 392, + /* 24240 */ 392, 392, 334, 392, 336, 337, 392, 392, 241, 242, + /* 24250 */ 342, 392, 392, 392, 392, 392, 392, 392, 392, 252, + /* 24260 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24270 */ 392, 392, 392, 392, 392, 367, 368, 392, 392, 272, + /* 24280 */ 392, 392, 392, 392, 178, 392, 279, 392, 392, 381, + /* 24290 */ 283, 284, 392, 392, 287, 189, 392, 191, 192, 193, + /* 24300 */ 194, 195, 196, 197, 392, 392, 392, 392, 392, 392, + /* 24310 */ 392, 392, 392, 207, 392, 209, 392, 392, 311, 392, + /* 24320 */ 392, 392, 392, 392, 392, 318, 319, 320, 321, 392, + /* 24330 */ 392, 392, 392, 392, 228, 392, 392, 392, 392, 392, + /* 24340 */ 392, 334, 392, 336, 337, 392, 392, 241, 242, 342, + /* 24350 */ 392, 392, 392, 392, 392, 392, 392, 392, 252, 392, + /* 24360 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24370 */ 392, 392, 392, 392, 367, 368, 392, 392, 272, 392, + /* 24380 */ 392, 392, 392, 178, 392, 279, 392, 392, 381, 283, + /* 24390 */ 284, 392, 392, 287, 189, 392, 191, 192, 193, 194, + /* 24400 */ 195, 196, 197, 392, 392, 392, 392, 392, 392, 392, + /* 24410 */ 392, 392, 207, 392, 209, 392, 392, 311, 392, 392, + /* 24420 */ 392, 392, 392, 392, 318, 319, 320, 321, 392, 392, + /* 24430 */ 392, 392, 392, 228, 392, 392, 392, 392, 392, 392, + /* 24440 */ 334, 392, 336, 337, 392, 392, 241, 242, 342, 392, + /* 24450 */ 392, 392, 392, 392, 392, 392, 392, 252, 392, 392, + /* 24460 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24470 */ 392, 392, 392, 367, 368, 392, 392, 272, 392, 392, + /* 24480 */ 392, 392, 178, 392, 279, 392, 392, 381, 283, 284, + /* 24490 */ 392, 392, 287, 189, 392, 191, 192, 193, 194, 195, + /* 24500 */ 196, 197, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24510 */ 392, 207, 392, 209, 392, 392, 311, 392, 392, 392, + /* 24520 */ 392, 392, 392, 318, 319, 320, 321, 392, 392, 392, + /* 24530 */ 392, 392, 228, 392, 392, 392, 392, 392, 392, 334, + /* 24540 */ 392, 336, 337, 392, 392, 241, 242, 342, 392, 392, + /* 24550 */ 392, 392, 392, 392, 392, 392, 252, 392, 392, 392, + /* 24560 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24570 */ 392, 392, 367, 368, 392, 392, 272, 392, 392, 392, + /* 24580 */ 392, 178, 392, 279, 392, 392, 381, 283, 284, 392, + /* 24590 */ 392, 287, 189, 392, 191, 192, 193, 194, 195, 196, + /* 24600 */ 197, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24610 */ 207, 392, 209, 392, 392, 311, 392, 392, 392, 392, + /* 24620 */ 392, 392, 318, 319, 320, 321, 392, 392, 392, 392, + /* 24630 */ 392, 228, 392, 392, 392, 392, 392, 392, 334, 392, + /* 24640 */ 336, 337, 392, 392, 241, 242, 342, 392, 392, 392, + /* 24650 */ 392, 392, 392, 392, 392, 252, 392, 392, 392, 392, + /* 24660 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24670 */ 392, 367, 368, 392, 392, 272, 392, 392, 392, 392, + /* 24680 */ 178, 392, 279, 392, 392, 381, 283, 284, 392, 392, + /* 24690 */ 287, 189, 392, 191, 192, 193, 194, 195, 196, 197, + /* 24700 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 207, + /* 24710 */ 392, 209, 392, 392, 311, 392, 392, 392, 392, 392, + /* 24720 */ 392, 318, 319, 320, 321, 392, 392, 392, 392, 392, + /* 24730 */ 228, 392, 392, 392, 392, 392, 392, 334, 392, 336, + /* 24740 */ 337, 392, 392, 241, 242, 342, 392, 392, 392, 392, + /* 24750 */ 392, 392, 392, 392, 252, 392, 392, 392, 392, 392, + /* 24760 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 24770 */ 367, 368, 392, 392, 272, 392, 392, 392, 392, 178, + /* 24780 */ 392, 279, 392, 392, 381, 283, 284, 392, 392, 287, + /* 24790 */ 189, 392, 191, 192, 193, 194, 195, 196, 197, 392, + /* 24800 */ 392, 392, 392, 392, 392, 392, 392, 392, 207, 392, + /* 24810 */ 209, 392, 392, 311, 392, 392, 392, 392, 392, 392, + /* 24820 */ 318, 319, 320, 321, 392, 392, 392, 392, 392, 228, + /* 24830 */ 392, 392, 392, 392, 392, 392, 334, 392, 336, 337, + /* 24840 */ 392, 392, 241, 242, 342, 392, 392, 392, 392, 392, + /* 24850 */ 392, 392, 392, 252, 392, 392, 392, 392, 392, 392, + /* 24860 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 367, + /* 24870 */ 368, 392, 392, 272, 392, 392, 392, 392, 392, 392, + /* 24880 */ 279, 392, 392, 381, 283, 284, 392, 392, 287, 189, + /* 24890 */ 392, 191, 192, 193, 194, 195, 196, 197, 392, 392, + /* 24900 */ 392, 392, 392, 392, 392, 392, 392, 207, 208, 209, + /* 24910 */ 392, 392, 311, 392, 392, 392, 392, 392, 392, 318, + /* 24920 */ 319, 320, 321, 392, 392, 392, 392, 392, 228, 392, + /* 24930 */ 392, 392, 392, 392, 392, 334, 392, 336, 337, 392, + /* 24940 */ 392, 241, 242, 342, 392, 392, 392, 392, 392, 392, + /* 24950 */ 392, 392, 252, 392, 392, 392, 392, 392, 392, 392, + /* 24960 */ 392, 392, 392, 392, 392, 392, 392, 392, 367, 368, + /* 24970 */ 392, 392, 272, 392, 392, 392, 392, 392, 392, 279, + /* 24980 */ 392, 392, 381, 283, 284, 392, 392, 287, 189, 392, + /* 24990 */ 191, 192, 193, 194, 195, 196, 197, 392, 392, 392, + /* 25000 */ 392, 392, 392, 392, 392, 392, 207, 392, 209, 392, + /* 25010 */ 392, 311, 392, 392, 392, 392, 392, 392, 318, 319, + /* 25020 */ 320, 321, 392, 392, 392, 392, 392, 228, 392, 392, + /* 25030 */ 392, 392, 392, 392, 334, 392, 336, 337, 392, 392, + /* 25040 */ 241, 242, 342, 392, 392, 392, 392, 392, 392, 392, + /* 25050 */ 392, 252, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25060 */ 392, 392, 392, 392, 392, 392, 392, 367, 368, 392, + /* 25070 */ 392, 272, 392, 392, 392, 392, 392, 392, 279, 392, + /* 25080 */ 392, 381, 283, 284, 392, 392, 287, 189, 392, 191, + /* 25090 */ 192, 193, 194, 195, 196, 197, 392, 392, 392, 392, + /* 25100 */ 392, 392, 392, 392, 392, 207, 392, 209, 392, 392, + /* 25110 */ 311, 392, 392, 392, 315, 392, 392, 318, 319, 320, + /* 25120 */ 321, 392, 392, 392, 392, 392, 228, 392, 392, 392, + /* 25130 */ 392, 392, 392, 334, 392, 336, 337, 392, 392, 241, + /* 25140 */ 242, 342, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25150 */ 252, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25160 */ 392, 392, 392, 392, 392, 392, 367, 368, 392, 392, + /* 25170 */ 272, 392, 392, 392, 392, 392, 392, 279, 392, 392, + /* 25180 */ 381, 283, 284, 392, 392, 287, 189, 392, 191, 192, + /* 25190 */ 193, 194, 195, 196, 197, 392, 392, 392, 392, 392, + /* 25200 */ 392, 392, 392, 392, 207, 392, 209, 392, 392, 311, + /* 25210 */ 392, 392, 314, 392, 392, 392, 318, 319, 320, 321, + /* 25220 */ 392, 392, 392, 392, 392, 228, 392, 392, 392, 392, + /* 25230 */ 392, 392, 334, 392, 336, 337, 392, 392, 241, 242, + /* 25240 */ 342, 392, 392, 392, 392, 392, 392, 392, 392, 252, + /* 25250 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25260 */ 392, 392, 392, 392, 392, 367, 368, 392, 392, 272, + /* 25270 */ 392, 392, 392, 392, 178, 392, 279, 392, 392, 381, + /* 25280 */ 283, 284, 392, 392, 287, 189, 392, 191, 192, 193, + /* 25290 */ 194, 195, 196, 197, 392, 392, 392, 392, 392, 392, + /* 25300 */ 392, 392, 392, 207, 392, 209, 392, 392, 311, 312, + /* 25310 */ 392, 392, 392, 392, 392, 318, 319, 320, 321, 392, + /* 25320 */ 392, 392, 392, 392, 228, 392, 392, 392, 392, 392, + /* 25330 */ 392, 334, 392, 336, 337, 392, 392, 241, 242, 342, + /* 25340 */ 392, 392, 392, 392, 392, 392, 392, 392, 252, 39, + /* 25350 */ 40, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25360 */ 50, 392, 392, 392, 367, 368, 56, 392, 272, 392, + /* 25370 */ 60, 61, 62, 392, 392, 279, 392, 392, 381, 283, + /* 25380 */ 284, 392, 392, 287, 189, 392, 191, 192, 193, 194, + /* 25390 */ 195, 196, 197, 392, 392, 392, 392, 392, 392, 392, + /* 25400 */ 392, 392, 207, 392, 209, 392, 392, 311, 392, 392, + /* 25410 */ 392, 392, 392, 392, 318, 319, 320, 321, 392, 392, + /* 25420 */ 392, 392, 392, 228, 114, 115, 116, 117, 392, 392, + /* 25430 */ 334, 392, 336, 337, 124, 392, 241, 242, 342, 392, + /* 25440 */ 392, 392, 392, 392, 392, 392, 136, 252, 138, 392, + /* 25450 */ 392, 392, 392, 392, 392, 145, 392, 392, 392, 392, + /* 25460 */ 392, 392, 392, 367, 368, 392, 392, 272, 392, 392, + /* 25470 */ 392, 161, 392, 392, 279, 392, 392, 381, 283, 284, + /* 25480 */ 392, 392, 287, 189, 392, 191, 192, 193, 194, 195, + /* 25490 */ 196, 197, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25500 */ 392, 207, 392, 392, 392, 392, 311, 392, 392, 392, + /* 25510 */ 392, 392, 392, 318, 319, 320, 321, 392, 392, 392, + /* 25520 */ 392, 392, 228, 392, 392, 392, 392, 392, 392, 334, + /* 25530 */ 392, 336, 337, 392, 392, 241, 242, 342, 392, 392, + /* 25540 */ 392, 392, 392, 392, 392, 392, 252, 392, 392, 392, + /* 25550 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25560 */ 392, 392, 367, 368, 392, 392, 272, 392, 392, 392, + /* 25570 */ 392, 392, 392, 279, 392, 392, 381, 283, 284, 392, + /* 25580 */ 392, 287, 189, 392, 191, 192, 193, 194, 195, 196, + /* 25590 */ 197, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25600 */ 207, 392, 392, 392, 392, 311, 392, 392, 392, 392, + /* 25610 */ 392, 392, 318, 319, 320, 321, 392, 392, 392, 392, + /* 25620 */ 392, 228, 392, 392, 392, 39, 392, 392, 334, 190, + /* 25630 */ 336, 337, 193, 194, 241, 242, 342, 392, 392, 392, + /* 25640 */ 392, 392, 56, 392, 392, 252, 60, 61, 62, 392, + /* 25650 */ 392, 392, 392, 189, 392, 191, 192, 193, 194, 195, + /* 25660 */ 196, 197, 368, 224, 392, 272, 227, 228, 392, 392, + /* 25670 */ 231, 207, 279, 392, 392, 381, 283, 284, 392, 392, + /* 25680 */ 287, 392, 243, 392, 245, 392, 247, 392, 392, 392, + /* 25690 */ 392, 392, 228, 392, 392, 109, 110, 392, 392, 392, + /* 25700 */ 114, 115, 392, 392, 311, 241, 242, 392, 392, 270, + /* 25710 */ 124, 318, 319, 320, 321, 392, 252, 392, 392, 280, + /* 25720 */ 392, 392, 136, 392, 138, 392, 392, 334, 392, 336, + /* 25730 */ 337, 145, 392, 392, 392, 342, 272, 392, 299, 392, + /* 25740 */ 392, 392, 156, 279, 392, 392, 392, 161, 284, 392, + /* 25750 */ 38, 287, 392, 41, 42, 392, 392, 392, 392, 392, + /* 25760 */ 48, 392, 392, 392, 392, 53, 392, 392, 329, 392, + /* 25770 */ 392, 392, 392, 392, 392, 311, 392, 338, 392, 392, + /* 25780 */ 392, 392, 318, 319, 320, 321, 392, 392, 392, 392, + /* 25790 */ 392, 352, 392, 354, 392, 392, 392, 392, 334, 392, + /* 25800 */ 336, 337, 392, 392, 392, 392, 342, 95, 96, 370, + /* 25810 */ 98, 392, 100, 392, 102, 392, 392, 392, 106, 392, + /* 25820 */ 392, 392, 392, 111, 392, 113, 392, 392, 392, 392, + /* 25830 */ 118, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25840 */ 392, 392, 392, 131, 392, 38, 392, 392, 41, 42, + /* 25850 */ 392, 139, 140, 392, 392, 48, 392, 392, 392, 392, + /* 25860 */ 53, 149, 392, 151, 152, 153, 392, 155, 392, 392, + /* 25870 */ 158, 392, 392, 392, 392, 163, 392, 392, 166, 392, + /* 25880 */ 392, 392, 170, 392, 392, 392, 392, 392, 392, 392, + /* 25890 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25900 */ 392, 392, 95, 96, 392, 98, 392, 100, 392, 102, + /* 25910 */ 392, 392, 392, 106, 392, 392, 392, 392, 111, 392, + /* 25920 */ 113, 392, 392, 392, 392, 118, 392, 392, 392, 392, + /* 25930 */ 392, 392, 392, 392, 392, 392, 392, 392, 131, 392, + /* 25940 */ 392, 392, 392, 392, 392, 392, 139, 140, 392, 392, + /* 25950 */ 392, 392, 392, 392, 392, 392, 149, 392, 151, 152, + /* 25960 */ 153, 392, 155, 392, 38, 158, 392, 41, 42, 392, + /* 25970 */ 163, 392, 392, 166, 48, 392, 392, 170, 392, 53, + /* 25980 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 25990 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26000 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26010 */ 191, 192, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26020 */ 392, 95, 96, 392, 98, 392, 100, 392, 102, 210, + /* 26030 */ 211, 392, 106, 392, 392, 392, 392, 111, 392, 113, + /* 26040 */ 392, 392, 392, 392, 118, 392, 392, 392, 392, 392, + /* 26050 */ 392, 392, 392, 392, 235, 392, 237, 131, 392, 392, + /* 26060 */ 392, 392, 392, 392, 392, 139, 140, 392, 249, 392, + /* 26070 */ 392, 392, 392, 392, 392, 149, 392, 151, 152, 153, + /* 26080 */ 392, 155, 392, 38, 158, 392, 41, 42, 392, 163, + /* 26090 */ 392, 392, 166, 48, 392, 392, 170, 392, 53, 392, + /* 26100 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 290, + /* 26110 */ 291, 292, 293, 294, 295, 296, 297, 392, 392, 392, + /* 26120 */ 392, 392, 392, 392, 392, 392, 307, 392, 392, 392, + /* 26130 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26140 */ 95, 96, 392, 98, 325, 100, 327, 102, 392, 330, + /* 26150 */ 392, 106, 392, 392, 392, 392, 111, 392, 113, 392, + /* 26160 */ 392, 392, 343, 118, 392, 392, 392, 392, 392, 392, + /* 26170 */ 392, 392, 392, 392, 392, 392, 131, 392, 392, 392, + /* 26180 */ 392, 392, 392, 392, 139, 140, 392, 392, 369, 392, + /* 26190 */ 392, 392, 392, 392, 149, 392, 151, 152, 153, 392, + /* 26200 */ 155, 392, 38, 158, 392, 41, 42, 392, 163, 392, + /* 26210 */ 392, 166, 48, 392, 392, 170, 392, 53, 392, 392, + /* 26220 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26230 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26240 */ 392, 392, 392, 392, 392, 392, 392, 392, 191, 192, + /* 26250 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 95, + /* 26260 */ 96, 392, 98, 392, 100, 392, 102, 210, 211, 392, + /* 26270 */ 106, 392, 392, 392, 392, 111, 392, 113, 392, 392, + /* 26280 */ 392, 392, 118, 392, 392, 392, 392, 392, 392, 392, + /* 26290 */ 392, 392, 235, 392, 237, 131, 392, 392, 392, 392, + /* 26300 */ 392, 392, 392, 139, 140, 392, 249, 392, 392, 392, + /* 26310 */ 392, 392, 392, 149, 392, 151, 152, 153, 392, 155, + /* 26320 */ 392, 38, 158, 392, 41, 42, 392, 163, 392, 392, + /* 26330 */ 166, 48, 392, 392, 170, 392, 53, 392, 392, 392, + /* 26340 */ 392, 392, 392, 392, 392, 392, 392, 290, 291, 292, + /* 26350 */ 293, 294, 295, 296, 297, 392, 392, 392, 392, 392, + /* 26360 */ 392, 392, 392, 392, 307, 392, 392, 392, 392, 392, + /* 26370 */ 392, 392, 392, 392, 392, 392, 392, 392, 95, 96, + /* 26380 */ 392, 98, 325, 100, 327, 102, 392, 330, 392, 106, + /* 26390 */ 392, 392, 392, 392, 111, 392, 113, 392, 392, 392, + /* 26400 */ 343, 118, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26410 */ 392, 392, 392, 392, 131, 392, 392, 392, 392, 392, + /* 26420 */ 392, 392, 139, 140, 392, 392, 369, 392, 392, 392, + /* 26430 */ 392, 392, 149, 392, 151, 152, 153, 392, 155, 392, + /* 26440 */ 38, 158, 392, 41, 42, 392, 163, 392, 392, 166, + /* 26450 */ 48, 392, 392, 170, 392, 53, 392, 392, 392, 392, + /* 26460 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26470 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26480 */ 392, 392, 392, 392, 392, 392, 191, 192, 392, 392, + /* 26490 */ 392, 392, 392, 392, 392, 392, 392, 95, 96, 392, + /* 26500 */ 98, 392, 100, 392, 102, 210, 211, 392, 106, 392, + /* 26510 */ 392, 392, 392, 111, 392, 113, 392, 392, 392, 392, + /* 26520 */ 118, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26530 */ 235, 392, 237, 131, 392, 392, 392, 392, 392, 392, + /* 26540 */ 392, 139, 140, 392, 249, 392, 392, 392, 392, 392, + /* 26550 */ 392, 149, 392, 151, 152, 153, 392, 155, 392, 38, + /* 26560 */ 158, 392, 41, 42, 392, 163, 392, 392, 166, 48, + /* 26570 */ 392, 392, 170, 392, 53, 392, 392, 392, 392, 392, + /* 26580 */ 392, 392, 392, 392, 392, 290, 291, 292, 293, 294, + /* 26590 */ 295, 296, 297, 392, 392, 392, 392, 392, 392, 392, + /* 26600 */ 392, 392, 307, 392, 392, 392, 392, 392, 392, 392, + /* 26610 */ 392, 392, 392, 392, 392, 392, 95, 96, 392, 98, + /* 26620 */ 325, 100, 327, 102, 392, 330, 392, 106, 392, 392, + /* 26630 */ 392, 392, 111, 392, 113, 392, 392, 392, 343, 118, + /* 26640 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26650 */ 392, 392, 131, 392, 392, 392, 392, 392, 392, 392, + /* 26660 */ 139, 140, 392, 392, 369, 392, 392, 392, 392, 392, + /* 26670 */ 149, 392, 151, 152, 153, 392, 155, 392, 38, 158, + /* 26680 */ 392, 41, 42, 392, 163, 392, 392, 166, 48, 392, + /* 26690 */ 392, 170, 392, 53, 392, 392, 392, 392, 392, 392, + /* 26700 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26710 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26720 */ 392, 392, 392, 392, 191, 192, 392, 392, 392, 392, + /* 26730 */ 392, 392, 392, 392, 392, 95, 96, 392, 98, 392, + /* 26740 */ 100, 392, 102, 210, 211, 392, 106, 392, 392, 392, + /* 26750 */ 392, 111, 392, 113, 392, 392, 392, 392, 118, 392, + /* 26760 */ 392, 392, 392, 392, 392, 392, 392, 392, 235, 392, + /* 26770 */ 237, 131, 392, 392, 392, 392, 392, 392, 392, 139, + /* 26780 */ 140, 392, 249, 392, 392, 392, 392, 392, 392, 149, + /* 26790 */ 392, 151, 152, 153, 392, 155, 392, 38, 158, 392, + /* 26800 */ 41, 42, 392, 163, 392, 392, 166, 48, 392, 392, + /* 26810 */ 170, 392, 53, 392, 392, 392, 392, 392, 392, 392, + /* 26820 */ 392, 392, 392, 290, 291, 292, 293, 294, 295, 296, + /* 26830 */ 297, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26840 */ 307, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26850 */ 392, 392, 392, 392, 95, 96, 392, 98, 325, 100, + /* 26860 */ 327, 392, 392, 330, 392, 106, 392, 392, 392, 392, + /* 26870 */ 111, 392, 113, 392, 392, 392, 343, 118, 392, 38, + /* 26880 */ 392, 392, 41, 42, 392, 392, 392, 392, 392, 48, + /* 26890 */ 131, 392, 392, 392, 53, 392, 392, 392, 139, 140, + /* 26900 */ 392, 392, 369, 392, 392, 392, 392, 392, 149, 392, + /* 26910 */ 151, 152, 153, 392, 155, 392, 38, 158, 392, 41, + /* 26920 */ 42, 392, 163, 392, 392, 166, 48, 392, 392, 170, + /* 26930 */ 392, 53, 392, 392, 392, 392, 95, 96, 392, 98, + /* 26940 */ 392, 100, 392, 102, 392, 392, 392, 106, 392, 392, + /* 26950 */ 392, 392, 111, 392, 113, 392, 392, 392, 392, 118, + /* 26960 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 26970 */ 392, 392, 131, 95, 96, 392, 98, 392, 100, 392, + /* 26980 */ 102, 140, 392, 392, 106, 392, 392, 392, 392, 111, + /* 26990 */ 149, 113, 151, 392, 392, 392, 118, 392, 392, 158, + /* 27000 */ 392, 392, 392, 392, 163, 392, 392, 166, 392, 131, + /* 27010 */ 392, 392, 392, 392, 392, 392, 392, 139, 140, 392, + /* 27020 */ 392, 392, 392, 392, 392, 392, 392, 149, 38, 151, + /* 27030 */ 152, 41, 42, 392, 392, 392, 158, 392, 48, 392, + /* 27040 */ 392, 163, 392, 53, 166, 392, 392, 392, 170, 392, + /* 27050 */ 392, 392, 392, 392, 392, 392, 38, 392, 392, 41, + /* 27060 */ 42, 392, 392, 392, 392, 392, 48, 392, 392, 392, + /* 27070 */ 392, 53, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27080 */ 392, 392, 392, 392, 392, 95, 96, 392, 98, 392, + /* 27090 */ 100, 392, 102, 392, 392, 392, 106, 392, 392, 392, + /* 27100 */ 392, 111, 392, 113, 392, 392, 392, 392, 118, 392, + /* 27110 */ 392, 392, 392, 95, 96, 392, 98, 392, 100, 392, + /* 27120 */ 102, 131, 392, 392, 106, 392, 392, 392, 392, 111, + /* 27130 */ 140, 113, 392, 392, 392, 392, 118, 392, 392, 149, + /* 27140 */ 38, 151, 152, 41, 42, 392, 392, 392, 158, 131, + /* 27150 */ 48, 392, 392, 163, 392, 53, 166, 55, 140, 392, + /* 27160 */ 170, 392, 392, 392, 392, 392, 392, 149, 392, 151, + /* 27170 */ 152, 392, 392, 392, 392, 38, 158, 392, 41, 42, + /* 27180 */ 392, 163, 392, 392, 166, 48, 392, 392, 170, 392, + /* 27190 */ 53, 392, 55, 392, 392, 392, 392, 95, 96, 392, + /* 27200 */ 98, 392, 100, 101, 392, 392, 392, 392, 392, 392, + /* 27210 */ 392, 392, 392, 111, 112, 392, 392, 392, 392, 392, + /* 27220 */ 118, 392, 120, 121, 392, 392, 392, 392, 392, 392, + /* 27230 */ 392, 392, 95, 96, 392, 98, 392, 100, 101, 392, + /* 27240 */ 392, 139, 392, 392, 392, 392, 392, 392, 111, 112, + /* 27250 */ 392, 149, 150, 151, 152, 118, 392, 120, 121, 38, + /* 27260 */ 158, 392, 41, 42, 392, 392, 392, 392, 392, 48, + /* 27270 */ 392, 392, 170, 392, 53, 392, 139, 392, 392, 392, + /* 27280 */ 392, 392, 392, 392, 392, 392, 149, 150, 151, 152, + /* 27290 */ 392, 392, 392, 392, 392, 158, 392, 392, 392, 392, + /* 27300 */ 392, 392, 392, 392, 392, 392, 392, 170, 392, 392, + /* 27310 */ 392, 392, 392, 392, 392, 392, 95, 96, 392, 98, + /* 27320 */ 392, 100, 392, 102, 392, 392, 392, 106, 392, 392, + /* 27330 */ 392, 392, 111, 392, 113, 392, 392, 392, 392, 118, + /* 27340 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27350 */ 392, 392, 131, 392, 392, 392, 392, 392, 392, 392, + /* 27360 */ 139, 140, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27370 */ 149, 38, 151, 392, 41, 42, 392, 392, 392, 158, + /* 27380 */ 392, 48, 392, 392, 163, 392, 53, 166, 392, 392, + /* 27390 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27400 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27410 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27420 */ 392, 392, 392, 392, 392, 392, 392, 392, 95, 96, + /* 27430 */ 392, 98, 392, 100, 392, 102, 392, 392, 392, 106, + /* 27440 */ 392, 392, 392, 392, 111, 392, 113, 392, 392, 392, + /* 27450 */ 392, 118, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27460 */ 392, 392, 392, 392, 131, 392, 392, 392, 392, 392, + /* 27470 */ 392, 392, 139, 140, 392, 392, 392, 392, 392, 392, + /* 27480 */ 392, 392, 149, 38, 151, 392, 41, 42, 392, 392, + /* 27490 */ 392, 158, 392, 48, 392, 392, 163, 392, 53, 166, + /* 27500 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27510 */ 392, 392, 392, 191, 192, 392, 392, 392, 392, 392, + /* 27520 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27530 */ 392, 392, 210, 211, 392, 392, 392, 392, 392, 392, + /* 27540 */ 95, 96, 392, 98, 392, 100, 392, 102, 392, 392, + /* 27550 */ 392, 106, 392, 392, 392, 392, 111, 235, 113, 237, + /* 27560 */ 392, 392, 392, 118, 392, 392, 392, 392, 392, 392, + /* 27570 */ 392, 249, 392, 392, 392, 392, 131, 392, 191, 192, + /* 27580 */ 392, 392, 392, 392, 139, 140, 392, 392, 392, 392, + /* 27590 */ 392, 392, 392, 392, 149, 392, 151, 210, 211, 392, + /* 27600 */ 392, 392, 392, 158, 392, 392, 392, 392, 163, 392, + /* 27610 */ 392, 166, 290, 291, 292, 293, 294, 295, 296, 297, + /* 27620 */ 392, 392, 235, 392, 237, 392, 392, 392, 392, 307, + /* 27630 */ 392, 392, 392, 392, 392, 392, 249, 392, 392, 392, + /* 27640 */ 392, 392, 392, 191, 192, 392, 392, 325, 392, 327, + /* 27650 */ 392, 392, 330, 392, 392, 392, 392, 392, 392, 392, + /* 27660 */ 392, 392, 210, 211, 392, 343, 392, 392, 392, 392, + /* 27670 */ 392, 392, 392, 392, 392, 392, 392, 290, 291, 292, + /* 27680 */ 293, 294, 295, 296, 297, 392, 392, 235, 392, 237, + /* 27690 */ 392, 369, 392, 392, 307, 392, 392, 392, 392, 392, + /* 27700 */ 392, 249, 392, 392, 392, 392, 191, 192, 392, 392, + /* 27710 */ 392, 392, 325, 392, 327, 392, 392, 330, 392, 392, + /* 27720 */ 392, 392, 392, 392, 392, 210, 211, 392, 392, 392, + /* 27730 */ 343, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 27740 */ 392, 392, 290, 291, 292, 293, 294, 295, 296, 297, + /* 27750 */ 235, 392, 237, 392, 392, 392, 369, 392, 392, 307, + /* 27760 */ 392, 392, 392, 392, 249, 392, 392, 392, 392, 392, + /* 27770 */ 191, 192, 392, 392, 392, 392, 392, 325, 392, 327, + /* 27780 */ 392, 392, 330, 392, 392, 392, 392, 392, 392, 210, + /* 27790 */ 211, 392, 392, 392, 392, 343, 392, 392, 392, 392, + /* 27800 */ 392, 392, 392, 392, 392, 290, 291, 292, 293, 294, + /* 27810 */ 295, 296, 297, 392, 235, 392, 237, 392, 392, 392, + /* 27820 */ 392, 369, 307, 392, 392, 392, 392, 392, 249, 392, + /* 27830 */ 392, 392, 392, 392, 392, 191, 192, 392, 392, 392, + /* 27840 */ 325, 392, 327, 392, 392, 330, 392, 392, 392, 392, + /* 27850 */ 392, 392, 392, 392, 210, 211, 392, 392, 343, 392, + /* 27860 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 290, + /* 27870 */ 291, 292, 293, 294, 295, 296, 297, 392, 392, 235, + /* 27880 */ 392, 237, 392, 392, 369, 392, 307, 392, 392, 392, + /* 27890 */ 392, 392, 392, 249, 392, 392, 392, 392, 191, 192, + /* 27900 */ 392, 392, 392, 392, 325, 392, 327, 392, 392, 330, + /* 27910 */ 392, 392, 392, 392, 392, 392, 392, 210, 211, 392, + /* 27920 */ 392, 392, 343, 392, 392, 392, 392, 392, 392, 392, + /* 27930 */ 392, 392, 392, 392, 290, 291, 292, 293, 294, 295, + /* 27940 */ 296, 297, 235, 392, 237, 392, 392, 392, 369, 392, + /* 27950 */ 392, 307, 392, 392, 392, 392, 249, 392, 392, 392, + /* 27960 */ 392, 392, 191, 192, 392, 392, 392, 392, 392, 325, + /* 27970 */ 392, 327, 392, 392, 330, 392, 392, 392, 392, 392, + /* 27980 */ 392, 210, 211, 392, 392, 392, 392, 343, 392, 392, + /* 27990 */ 392, 392, 392, 392, 392, 392, 392, 290, 291, 292, + /* 28000 */ 293, 294, 295, 296, 297, 392, 235, 392, 237, 392, + /* 28010 */ 392, 392, 392, 369, 307, 392, 392, 392, 392, 392, + /* 28020 */ 249, 392, 392, 392, 392, 392, 392, 191, 192, 392, + /* 28030 */ 392, 392, 325, 392, 327, 392, 392, 330, 392, 392, + /* 28040 */ 392, 392, 392, 392, 392, 392, 210, 211, 392, 392, + /* 28050 */ 343, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 28060 */ 392, 290, 291, 292, 293, 294, 295, 296, 297, 392, + /* 28070 */ 392, 235, 392, 237, 392, 392, 369, 392, 307, 392, + /* 28080 */ 392, 392, 392, 392, 392, 249, 392, 392, 392, 392, + /* 28090 */ 191, 192, 392, 392, 392, 392, 325, 392, 327, 392, + /* 28100 */ 392, 330, 392, 392, 392, 392, 392, 392, 392, 210, + /* 28110 */ 211, 392, 392, 392, 343, 392, 392, 392, 392, 392, + /* 28120 */ 392, 392, 392, 392, 392, 392, 290, 291, 292, 293, + /* 28130 */ 294, 295, 296, 297, 235, 392, 237, 392, 392, 392, + /* 28140 */ 369, 392, 392, 307, 392, 392, 392, 392, 249, 392, + /* 28150 */ 392, 392, 392, 392, 191, 192, 392, 392, 392, 392, + /* 28160 */ 392, 325, 392, 327, 392, 392, 330, 392, 392, 392, + /* 28170 */ 392, 392, 392, 210, 211, 392, 392, 392, 392, 343, + /* 28180 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 290, + /* 28190 */ 291, 292, 293, 294, 295, 296, 297, 392, 235, 392, + /* 28200 */ 237, 392, 392, 392, 392, 369, 307, 392, 392, 392, + /* 28210 */ 392, 392, 249, 392, 392, 392, 392, 392, 392, 191, + /* 28220 */ 192, 392, 392, 392, 325, 392, 327, 392, 392, 330, + /* 28230 */ 392, 392, 392, 392, 392, 392, 392, 392, 210, 211, + /* 28240 */ 392, 392, 343, 392, 392, 392, 392, 392, 392, 392, + /* 28250 */ 392, 392, 392, 290, 291, 292, 293, 294, 295, 296, + /* 28260 */ 297, 392, 392, 235, 392, 237, 392, 392, 369, 392, + /* 28270 */ 307, 392, 392, 392, 392, 392, 392, 249, 392, 392, + /* 28280 */ 392, 392, 191, 192, 392, 392, 392, 392, 325, 392, + /* 28290 */ 327, 392, 392, 330, 392, 392, 392, 392, 392, 392, + /* 28300 */ 392, 210, 211, 392, 392, 392, 343, 392, 392, 392, + /* 28310 */ 392, 392, 392, 392, 392, 392, 392, 392, 290, 291, + /* 28320 */ 292, 293, 294, 295, 296, 297, 235, 392, 237, 392, + /* 28330 */ 392, 392, 369, 392, 392, 307, 392, 392, 392, 392, + /* 28340 */ 249, 392, 392, 392, 392, 392, 191, 192, 392, 392, + /* 28350 */ 392, 392, 392, 325, 392, 327, 392, 392, 330, 392, + /* 28360 */ 392, 392, 392, 392, 392, 210, 211, 392, 392, 392, + /* 28370 */ 392, 343, 392, 392, 392, 392, 392, 392, 392, 392, + /* 28380 */ 392, 290, 291, 292, 293, 294, 295, 296, 297, 392, + /* 28390 */ 235, 392, 237, 392, 392, 392, 392, 369, 307, 392, + /* 28400 */ 392, 392, 392, 392, 249, 392, 392, 392, 392, 392, + /* 28410 */ 392, 191, 192, 392, 392, 392, 325, 392, 327, 392, + /* 28420 */ 392, 330, 392, 392, 392, 392, 392, 392, 392, 392, + /* 28430 */ 210, 211, 392, 392, 343, 392, 392, 392, 392, 392, + /* 28440 */ 392, 392, 392, 392, 392, 290, 291, 292, 293, 294, + /* 28450 */ 295, 296, 297, 392, 392, 235, 392, 237, 392, 392, + /* 28460 */ 369, 392, 307, 392, 392, 392, 392, 392, 392, 249, + /* 28470 */ 392, 392, 392, 392, 191, 192, 392, 392, 392, 392, + /* 28480 */ 325, 392, 327, 392, 392, 330, 392, 392, 392, 392, + /* 28490 */ 392, 392, 392, 210, 211, 392, 392, 392, 343, 392, + /* 28500 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 28510 */ 290, 291, 292, 293, 294, 295, 296, 297, 235, 392, + /* 28520 */ 237, 392, 392, 392, 369, 392, 392, 307, 392, 392, + /* 28530 */ 392, 392, 249, 392, 392, 392, 392, 392, 191, 192, + /* 28540 */ 392, 392, 392, 392, 392, 325, 392, 327, 392, 392, + /* 28550 */ 330, 392, 392, 392, 392, 392, 392, 210, 211, 392, + /* 28560 */ 392, 392, 392, 343, 392, 392, 392, 392, 392, 392, + /* 28570 */ 392, 392, 392, 290, 291, 292, 293, 294, 295, 296, + /* 28580 */ 297, 392, 235, 392, 237, 392, 392, 392, 392, 369, + /* 28590 */ 307, 392, 392, 392, 392, 392, 249, 392, 392, 392, + /* 28600 */ 392, 392, 392, 191, 192, 392, 392, 392, 325, 392, + /* 28610 */ 327, 392, 392, 330, 392, 392, 392, 392, 392, 392, + /* 28620 */ 392, 392, 210, 211, 392, 392, 343, 392, 392, 392, + /* 28630 */ 392, 392, 392, 392, 392, 392, 392, 290, 291, 292, + /* 28640 */ 293, 294, 295, 296, 297, 392, 392, 235, 392, 237, + /* 28650 */ 392, 392, 369, 392, 307, 392, 392, 392, 392, 392, + /* 28660 */ 392, 249, 392, 392, 392, 392, 191, 192, 392, 392, + /* 28670 */ 392, 392, 325, 392, 327, 392, 392, 330, 392, 392, + /* 28680 */ 392, 392, 392, 392, 392, 210, 211, 392, 392, 392, + /* 28690 */ 343, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 28700 */ 392, 392, 290, 291, 292, 293, 294, 295, 296, 297, + /* 28710 */ 235, 392, 237, 392, 392, 392, 369, 392, 392, 307, + /* 28720 */ 392, 392, 392, 392, 249, 392, 392, 392, 392, 392, + /* 28730 */ 191, 192, 392, 392, 392, 392, 392, 325, 392, 327, + /* 28740 */ 392, 392, 330, 392, 392, 392, 392, 392, 392, 210, + /* 28750 */ 211, 392, 392, 392, 392, 343, 392, 392, 392, 392, + /* 28760 */ 392, 392, 392, 392, 392, 290, 291, 292, 293, 294, + /* 28770 */ 295, 296, 297, 392, 235, 392, 237, 392, 392, 392, + /* 28780 */ 392, 369, 307, 392, 392, 392, 392, 392, 249, 392, + /* 28790 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 28800 */ 325, 392, 327, 392, 190, 330, 392, 193, 194, 392, + /* 28810 */ 38, 392, 392, 41, 42, 392, 392, 392, 343, 392, + /* 28820 */ 48, 392, 392, 392, 392, 53, 392, 392, 392, 290, + /* 28830 */ 291, 292, 293, 294, 295, 296, 297, 223, 224, 392, + /* 28840 */ 392, 227, 228, 392, 369, 231, 307, 392, 392, 392, + /* 28850 */ 392, 392, 392, 392, 392, 392, 392, 243, 392, 245, + /* 28860 */ 392, 247, 392, 392, 325, 392, 327, 95, 96, 330, + /* 28870 */ 98, 392, 100, 392, 102, 392, 392, 392, 106, 392, + /* 28880 */ 392, 392, 343, 111, 392, 113, 392, 392, 392, 392, + /* 28890 */ 118, 392, 392, 392, 280, 392, 392, 392, 392, 392, + /* 28900 */ 392, 392, 392, 131, 392, 392, 392, 38, 369, 392, + /* 28910 */ 41, 42, 140, 299, 392, 392, 392, 48, 392, 392, + /* 28920 */ 392, 149, 53, 151, 392, 392, 392, 392, 392, 392, + /* 28930 */ 158, 392, 392, 392, 392, 163, 392, 392, 166, 392, + /* 28940 */ 392, 392, 392, 329, 392, 392, 392, 392, 392, 392, + /* 28950 */ 392, 392, 338, 392, 392, 392, 392, 190, 392, 392, + /* 28960 */ 193, 194, 392, 392, 95, 96, 352, 98, 354, 100, + /* 28970 */ 392, 102, 392, 392, 392, 106, 392, 392, 392, 392, + /* 28980 */ 111, 392, 113, 392, 370, 392, 392, 118, 392, 392, + /* 28990 */ 223, 224, 392, 392, 227, 228, 392, 392, 231, 392, + /* 29000 */ 131, 392, 392, 392, 190, 392, 392, 193, 194, 140, + /* 29010 */ 243, 392, 245, 392, 247, 392, 392, 392, 149, 392, + /* 29020 */ 151, 392, 392, 392, 392, 392, 392, 158, 191, 192, + /* 29030 */ 392, 392, 163, 392, 392, 166, 392, 223, 224, 392, + /* 29040 */ 392, 227, 228, 392, 392, 231, 392, 280, 392, 392, + /* 29050 */ 213, 214, 215, 216, 217, 392, 392, 243, 392, 245, + /* 29060 */ 392, 247, 392, 392, 392, 190, 299, 230, 193, 194, + /* 29070 */ 392, 392, 235, 392, 237, 392, 392, 392, 392, 392, + /* 29080 */ 392, 392, 392, 392, 392, 248, 249, 392, 392, 392, + /* 29090 */ 392, 392, 392, 392, 280, 392, 329, 392, 223, 224, + /* 29100 */ 392, 392, 227, 228, 392, 338, 231, 392, 190, 392, + /* 29110 */ 392, 193, 194, 299, 392, 392, 392, 392, 243, 352, + /* 29120 */ 245, 354, 247, 392, 392, 392, 392, 392, 392, 392, + /* 29130 */ 392, 392, 392, 392, 392, 392, 392, 370, 392, 392, + /* 29140 */ 392, 223, 224, 329, 307, 227, 228, 392, 392, 231, + /* 29150 */ 392, 392, 338, 392, 392, 280, 392, 392, 392, 392, + /* 29160 */ 392, 243, 325, 245, 392, 247, 352, 330, 354, 392, + /* 29170 */ 392, 392, 392, 190, 299, 392, 193, 194, 392, 392, + /* 29180 */ 343, 392, 392, 392, 370, 392, 392, 392, 392, 392, + /* 29190 */ 392, 392, 392, 392, 392, 392, 392, 392, 280, 392, + /* 29200 */ 392, 392, 392, 392, 329, 392, 369, 224, 392, 392, + /* 29210 */ 227, 228, 392, 338, 231, 392, 392, 299, 392, 392, + /* 29220 */ 392, 392, 392, 392, 392, 392, 243, 352, 245, 354, + /* 29230 */ 247, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29240 */ 392, 392, 392, 392, 392, 370, 392, 329, 392, 392, + /* 29250 */ 392, 191, 192, 392, 392, 392, 338, 392, 392, 392, + /* 29260 */ 392, 191, 192, 280, 392, 392, 392, 392, 392, 392, + /* 29270 */ 352, 392, 354, 213, 214, 215, 216, 217, 392, 392, + /* 29280 */ 392, 392, 299, 213, 214, 215, 216, 217, 370, 392, + /* 29290 */ 230, 392, 392, 392, 392, 235, 392, 237, 392, 392, + /* 29300 */ 230, 392, 392, 191, 192, 235, 392, 237, 248, 249, + /* 29310 */ 392, 392, 329, 392, 392, 392, 392, 392, 248, 249, + /* 29320 */ 392, 338, 392, 392, 392, 213, 214, 215, 216, 217, + /* 29330 */ 392, 392, 392, 392, 392, 352, 392, 354, 392, 392, + /* 29340 */ 392, 392, 230, 392, 392, 392, 392, 235, 392, 237, + /* 29350 */ 392, 392, 392, 370, 392, 392, 392, 392, 191, 192, + /* 29360 */ 248, 249, 392, 392, 392, 392, 392, 307, 392, 392, + /* 29370 */ 392, 392, 392, 392, 392, 392, 392, 307, 392, 392, + /* 29380 */ 213, 214, 215, 216, 217, 325, 392, 392, 392, 392, + /* 29390 */ 330, 392, 392, 392, 392, 325, 392, 230, 392, 392, + /* 29400 */ 330, 392, 235, 343, 237, 392, 392, 392, 392, 392, + /* 29410 */ 392, 392, 392, 343, 392, 248, 249, 392, 392, 307, + /* 29420 */ 392, 191, 192, 392, 392, 392, 392, 392, 392, 369, + /* 29430 */ 392, 392, 392, 392, 392, 392, 392, 325, 392, 369, + /* 29440 */ 392, 392, 330, 213, 214, 215, 216, 217, 392, 392, + /* 29450 */ 392, 392, 392, 392, 392, 343, 392, 392, 392, 392, + /* 29460 */ 230, 392, 191, 192, 392, 235, 392, 237, 392, 392, + /* 29470 */ 392, 392, 392, 392, 307, 392, 392, 392, 248, 249, + /* 29480 */ 392, 369, 392, 392, 213, 214, 215, 216, 217, 392, + /* 29490 */ 392, 392, 325, 392, 392, 392, 392, 330, 392, 392, + /* 29500 */ 392, 230, 392, 392, 392, 392, 235, 392, 237, 392, + /* 29510 */ 343, 392, 392, 392, 392, 392, 392, 392, 392, 248, + /* 29520 */ 249, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29530 */ 392, 392, 392, 392, 392, 392, 369, 307, 392, 392, + /* 29540 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29550 */ 392, 392, 392, 392, 392, 325, 392, 392, 392, 392, + /* 29560 */ 330, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29570 */ 392, 392, 392, 343, 392, 392, 392, 392, 307, 392, + /* 29580 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29590 */ 392, 392, 392, 392, 392, 392, 325, 392, 392, 369, + /* 29600 */ 392, 330, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29610 */ 392, 392, 392, 392, 343, 392, 392, 392, 392, 392, + /* 29620 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29630 */ 392, 392, 392, 392, 392, 392, 392, 392, 392, 392, + /* 29640 */ 369, }; -#define YY_SHIFT_USE_DFLT (-70) -#define YY_SHIFT_COUNT (402) -#define YY_SHIFT_MIN (-69) -#define YY_SHIFT_MAX (2144) -static const short yy_shift_ofst[] = { - /* 0 */ 606, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, 1265, - /* 10 */ 89, 155, 907, 907, 907, 155, 39, 189, 2144, 2144, - /* 20 */ 907, -11, 189, 139, 139, 139, 139, 139, 139, 139, - /* 30 */ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - /* 40 */ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - /* 50 */ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - /* 60 */ 139, 139, 139, 139, 139, 139, 139, 139, 139, 139, - /* 70 */ 139, 139, 139, 139, 139, 139, 500, 139, 139, 139, - /* 80 */ 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, 1310, - /* 90 */ 246, 294, 294, 294, 294, 294, 294, 294, 294, 294, - /* 100 */ 294, 294, 294, 294, 37, 600, 37, 37, 37, 37, - /* 110 */ 461, 600, 37, 37, 362, 362, 362, 118, 235, 10, - /* 120 */ 10, 10, 1052, 1052, 1191, 123, 15, 603, 629, 599, - /* 130 */ 10, 10, 10, 1124, 1111, 1020, 901, 1255, 1191, 1083, - /* 140 */ 901, 1020, -70, -70, -70, 280, 280, 1090, 1115, 1090, - /* 150 */ 1090, 1090, 249, 865, -6, 96, 96, 96, 96, 317, - /* 160 */ -60, 560, 558, 542, -60, 506, 320, 10, 474, 425, - /* 170 */ 253, 253, 379, 185, 92, -60, 747, 747, 747, 1122, - /* 180 */ 747, 747, 1124, 1122, 747, 747, 1111, 747, 1020, 747, - /* 190 */ 747, 1052, 1088, 747, 747, 1083, 1067, 747, 747, 747, - /* 200 */ 747, 821, 821, 1052, 1048, 747, 747, 747, 747, 892, - /* 210 */ 747, 747, 747, 747, 892, 913, 747, 747, 747, 747, - /* 220 */ 747, 747, 747, 901, 888, 747, 747, 895, 747, 901, - /* 230 */ 901, 901, 901, 854, 847, 747, 890, 821, 821, 815, - /* 240 */ 851, 815, 851, 851, 862, 851, 849, 747, 747, -70, - /* 250 */ -70, -70, -70, -70, -70, 1053, 1033, 1013, 979, 949, - /* 260 */ 918, 889, 860, 840, 719, 668, 809, 1263, 1263, 1263, - /* 270 */ 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 1263, 423, - /* 280 */ 460, -8, 368, 368, 174, 78, 28, 13, 13, 13, - /* 290 */ 13, 13, 13, 13, 13, 13, 13, 554, 497, 455, - /* 300 */ 442, 449, 217, 416, 291, 109, 323, 178, 382, 178, - /* 310 */ 315, 161, 228, -26, 278, 803, 724, 802, 756, 797, - /* 320 */ 752, 796, 737, 793, 773, 766, 695, 739, 798, 771, - /* 330 */ 764, 680, 698, 694, 754, 760, 753, 751, 750, 749, - /* 340 */ 748, 741, 746, 743, 713, 732, 740, 657, 733, 716, - /* 350 */ 731, 656, 649, 715, 675, 696, 704, 714, 706, 705, - /* 360 */ 710, 702, 707, 703, 683, 604, 618, 679, 647, 628, - /* 370 */ 608, 650, 635, 613, 611, 593, 601, 589, 584, 484, - /* 380 */ 399, 489, 475, 419, 373, 287, 336, 285, 276, 130, - /* 390 */ 130, 130, 130, 130, 130, 191, 134, 86, 86, 57, - /* 400 */ 34, 9, -69, +#define YY_SHIFT_COUNT (848) +#define YY_SHIFT_MIN (0) +#define YY_SHIFT_MAX (28869) +static const unsigned short int yy_shift_ofst[] = { + /* 0 */ 9, 4455, 4995, 4050, 5130, 5400, 5400, 5400, 5400, 5400, + /* 10 */ 5400, 5265, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, + /* 20 */ 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, + /* 30 */ 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, 5400, + /* 40 */ 5400, 5400, 5400, 5400, 5400, 5400, 5400, 9983, 14561, 16777, + /* 50 */ 22310, 22736, 22860, 23831, 25310, 25310, 25310, 25310, 25310, 25310, + /* 60 */ 25310, 25310, 25310, 25310, 25310, 25310, 25310, 25310, 25310, 25310, + /* 70 */ 25310, 25310, 10788, 22669, 8631, 8762, 8893, 10788, 11621, 12935, + /* 80 */ 12935, 12935, 12935, 12935, 12935, 10337, 11840, 12059, 21554, 12278, + /* 90 */ 12497, 12716, 12935, 12935, 13179, 13398, 13617, 13836, 14055, 14055, + /* 100 */ 14055, 14055, 14055, 14055, 14055, 14055, 151, 21814, 19, 143, + /* 110 */ 4179, 19, 865, 143, 143, 143, 103, 402, 160, 121, + /* 120 */ 121, 5057, 547, 143, 10, 14864, 4591, 82, 525, 10, + /* 130 */ 10, 68, 121, 282, 147, 294, 277, 143, 10, 519, + /* 140 */ 433, 434, 282, 147, 147, 147, 26990, 27221, 26841, 9957, + /* 150 */ 5131, 5131, 4181, 581, 78, 95, 522, 522, 64, 64, + /* 160 */ 64, 64, 64, 14, 311, 14, 14, 384, 384, 384, + /* 170 */ 467, 4590, 15033, 23537, 9468, 11183, 451, 617, 591, 885, + /* 180 */ 3983, 423, 1015, 392, 603, 838, 992, 964, 995, 356, + /* 190 */ 466, 840, 96, 826, 975, 1003, 1125, 1139, 1146, 1170, + /* 200 */ 703, 1280, 1289, 803, 803, 1294, 1612, 1648, 1735, 1768, + /* 210 */ 1778, 1735, 311, 1735, 1778, 14, 1880, 294, 147, 294, + /* 220 */ 1921, 14, 1934, 1934, 14, 1934, 14, 1934, 14, 1934, + /* 230 */ 14, 2059, 2084, 2093, 2094, 1612, 294, 14, 1934, 2163, + /* 240 */ 2186, 2205, 0, 150, 300, 450, 600, 750, 900, 1050, + /* 250 */ 1200, 1350, 1500, 1650, 1800, 1950, 2100, 2250, 2400, 2550, + /* 260 */ 2700, 2850, 3000, 3150, 3300, 3450, 3600, 3750, 3900, 4185, + /* 270 */ 4320, 4725, 4860, 5535, 5670, 5805, 5940, 6075, 6210, 6345, + /* 280 */ 6480, 6615, 6750, 6885, 7020, 7155, 7290, 7425, 7560, 7695, + /* 290 */ 7830, 7965, 8100, 8235, 8370, 8505, 8983, 9152, 9321, 9381, + /* 300 */ 9550, 9719, 9888, 10057, 10226, 10395, 10564, 10733, 10902, 10962, + /* 310 */ 11131, 11181, 11350, 11400, 11569, 11619, 11788, 11838, 12007, 12057, + /* 320 */ 12226, 12276, 12445, 12495, 12664, 12714, 12883, 12933, 13102, 13152, + /* 330 */ 13321, 13371, 13540, 13590, 13759, 13809, 13978, 14028, 14197, 14247, + /* 340 */ 14416, 14466, 14635, 14804, 15083, 15252, 15302, 15471, 15521, 15690, + /* 350 */ 15740, 15909, 15959, 16128, 16178, 16347, 16397, 16566, 17813, 17863, + /* 360 */ 18032, 18082, 18251, 18301, 18470, 18520, 18689, 18739, 18908, 18958, + /* 370 */ 19127, 19177, 19346, 19396, 19565, 19615, 19784, 19834, 20003, 20053, + /* 380 */ 20222, 20272, 20441, 20491, 20660, 20710, 20879, 20929, 21098, 21148, + /* 390 */ 21317, 21367, 21536, 23587, 23756, 23806, 9637, 9806, 8977, 9096, + /* 400 */ 25712, 25807, 25926, 26045, 26164, 26283, 26402, 26521, 26640, 26759, + /* 410 */ 26878, 27018, 27102, 27137, 27333, 27445, 28772, 28869, 10676, 11402, + /* 420 */ 25586, 5266, 5401, 5536, 5671, 5806, 5941, 6076, 88, 4053, + /* 430 */ 601, 751, 901, 1051, 1201, 4386, 4721, 4991, 5396, 1351, + /* 440 */ 731, 5196, 5601, 5801, 767, 83, 863, 903, 1013, 1053, + /* 450 */ 1163, 1203, 697, 1297, 1596, 1597, 1746, 1747, 1896, 1897, + /* 460 */ 2046, 2047, 2196, 2197, 1446, 1452, 1501, 1651, 75, 538, + /* 470 */ 452, 1043, 753, 148, 407, 696, 448, 688, 2345, 2346, + /* 480 */ 752, 1038, 988, 1138, 737, 546, 914, 1061, 549, 953, + /* 490 */ 529, 1165, 1187, 1188, 1202, 1278, 1279, 1288, 1313, 1315, + /* 500 */ 1337, 1338, 1434, 1488, 1578, 1588, 1637, 1638, 1728, 1738, + /* 510 */ 1787, 1788, 1801, 1802, 1878, 1879, 1888, 1937, 1938, 1951, + /* 520 */ 1952, 1123, 1274, 1424, 1503, 1574, 1575, 1625, 2028, 2029, + /* 530 */ 2038, 2087, 2088, 2101, 2102, 2178, 2179, 2188, 2237, 2238, + /* 540 */ 2251, 269, 2252, 136, 618, 796, 869, 1071, 1128, 1322, + /* 550 */ 1352, 1423, 1428, 1463, 1472, 1482, 1614, 817, 1622, 1723, + /* 560 */ 1724, 1725, 1058, 1772, 246, 379, 1421, 1426, 1429, 1466, + /* 570 */ 1207, 1264, 1355, 1476, 990, 1775, 1783, 1873, 1875, 1357, + /* 580 */ 1876, 1923, 1498, 1579, 1633, 1414, 1473, 1729, 1507, 1565, + /* 590 */ 1804, 1117, 1592, 1594, 1483, 1572, 1256, 1623, 1632, 1300, + /* 600 */ 1331, 1438, 1510, 1765, 1925, 1932, 1629, 2023, 2024, 2025, + /* 610 */ 1631, 1657, 1742, 1773, 1062, 1254, 1659, 1704, 1709, 1809, + /* 620 */ 1810, 1552, 1891, 1892, 1955, 2072, 2075, 2082, 2173, 2174, + /* 630 */ 2176, 2223, 1872, 2022, 2055, 1854, 2004, 2005, 2154, 2225, + /* 640 */ 2304, 2306, 2339, 2347, 1136, 2355, 2363, 2364, 2376, 2377, + /* 650 */ 1174, 1935, 2065, 2214, 1186, 1366, 2105, 2212, 2227, 2324, + /* 660 */ 2325, 2333, 2341, 2398, 2401, 2384, 2402, 2405, 2454, 2455, + /* 670 */ 2456, 2468, 2478, 2484, 2198, 2200, 2089, 2219, 2117, 2226, + /* 680 */ 2240, 2129, 2233, 2274, 2253, 2254, 2258, 2157, 2264, 2201, + /* 690 */ 2309, 2310, 2311, 2312, 2202, 2338, 2340, 2343, 2369, 2370, + /* 700 */ 2371, 2373, 2379, 2404, 2408, 2409, 2290, 2410, 2411, 2412, + /* 710 */ 2413, 2414, 2457, 2444, 2471, 2459, 2327, 2463, 2460, 2348, + /* 720 */ 2461, 2489, 2360, 2475, 2476, 2491, 2483, 2501, 2492, 2493, + /* 730 */ 2494, 2496, 2447, 2448, 2502, 2500, 2505, 2507, 2525, 2513, + /* 740 */ 2514, 2515, 2516, 2445, 2509, 2521, 2523, 2524, 2458, 2526, + /* 750 */ 2527, 2522, 2531, 2533, 2528, 2535, 2536, 2534, 2561, 2537, + /* 760 */ 2549, 2551, 2552, 2571, 2553, 2554, 2558, 2576, 2577, 2579, + /* 770 */ 2580, 2617, 2563, 2548, 2564, 2606, 2607, 2608, 2624, 2604, + /* 780 */ 2611, 2612, 2630, 2610, 2618, 2619, 2632, 2615, 2621, 2625, + /* 790 */ 2626, 2643, 2623, 2633, 2634, 2653, 2636, 2637, 2635, 2645, + /* 800 */ 2639, 2646, 2647, 2648, 2649, 2650, 2651, 2652, 2600, 2658, + /* 810 */ 2654, 2660, 2661, 2663, 2666, 2667, 2669, 2671, 2574, 2675, + /* 820 */ 2676, 2668, 2674, 2698, 2701, 2680, 2682, 2705, 2683, 2715, + /* 830 */ 2716, 2718, 2719, 2720, 2721, 2723, 2592, 2613, 2616, 2726, + /* 840 */ 2729, 2731, 2677, 2678, 2728, 2711, 2751, 2753, 2758, }; -#define YY_REDUCE_USE_DFLT (-179) -#define YY_REDUCE_COUNT (254) -#define YY_REDUCE_MIN (-178) -#define YY_REDUCE_MAX (2443) +#define YY_REDUCE_COUNT (241) +#define YY_REDUCE_MIN (-359) +#define YY_REDUCE_MAX (29271) static const short yy_reduce_ofst[] = { - /* 0 */ -160, 494, 451, 401, 357, 314, 264, 220, 177, 120, - /* 10 */ -102, 257, 557, 530, 510, 257, 1117, 1043, 1036, 1015, - /* 20 */ 920, 1171, 1152, 864, 2050, 2022, 2001, 1982, 1963, 1941, - /* 30 */ 1922, 1894, 1873, 1854, 1835, 1813, 1794, 1766, 1745, 1726, - /* 40 */ 1707, 1685, 1666, 1638, 1617, 1598, 1579, 1557, 1538, 1510, - /* 50 */ 1489, 1470, 1451, 1429, 1401, 1382, 1357, 1338, 1314, 1295, - /* 60 */ 1276, 1257, 2406, 2375, 2346, 2321, 2298, 2278, 2247, 2218, - /* 70 */ 2199, 2178, 2159, 2138, 2119, 2084, 179, 2443, 2426, 999, - /* 80 */ 2435, 2418, 2405, 2379, 2281, 2184, 1123, 417, 358, 140, - /* 90 */ -178, 1009, 982, 863, 758, 726, 692, 612, 488, 400, - /* 100 */ -7, -31, -57, -80, 387, 58, 1270, 1165, 1037, 225, - /* 110 */ -21, -76, 319, 312, 67, 31, 172, -32, -1, 114, - /* 120 */ 56, -30, -46, -96, -97, 133, 524, 480, 93, 299, - /* 130 */ 204, 297, 402, 361, 258, 413, 445, 331, -139, 2, - /* 140 */ 421, 390, 388, -101, 219, 1100, 1093, 1049, 1127, 1044, - /* 150 */ 1041, 1026, 981, 1016, 1060, 1057, 1057, 1057, 1057, 992, - /* 160 */ 1021, 1001, 1000, 980, 1017, 975, 967, 1071, 966, 965, - /* 170 */ 954, 947, 963, 962, 951, 989, 943, 925, 924, 912, - /* 180 */ 923, 922, 900, 891, 911, 910, 916, 903, 958, 899, - /* 190 */ 894, 957, 941, 875, 874, 940, 830, 870, 869, 868, - /* 200 */ 850, 898, 896, 915, 829, 842, 834, 831, 828, 917, - /* 210 */ 816, 814, 813, 811, 902, 882, 808, 807, 794, 792, - /* 220 */ 791, 788, 776, 799, 790, 767, 757, 770, 729, 765, - /* 230 */ 762, 755, 734, 761, 763, 699, 781, 742, 738, 723, - /* 240 */ 774, 712, 769, 759, 727, 744, 645, 623, 620, 617, - /* 250 */ 718, 700, 581, 569, 614, + /* 0 */ -359, 16432, 16584, 16738, 16837, 16936, 17035, 17134, 17233, 17332, + /* 10 */ 17431, 21327, 21490, 21561, 21695, 21849, 21948, 22102, 22201, 22300, + /* 20 */ 22399, 22498, 22652, 22751, 22850, 22949, 23048, 23147, 23710, 23809, + /* 30 */ 23908, 24007, 24106, 24205, 24304, 24403, 24502, 24601, 24700, 24799, + /* 40 */ 24898, 24997, 25096, 25195, 25294, 25393, 25464, 9975, 25819, 26057, + /* 50 */ 26295, 26533, 27322, 27387, 27452, 27515, 27579, 27644, 27707, 27771, + /* 60 */ 27836, 27899, 27963, 28028, 28091, 28155, 28220, 28283, 28347, 28412, + /* 70 */ 28475, 28539, 21981, 9613, 16767, 17654, 17823, 25439, 10303, 16305, + /* 80 */ 28614, 28767, 28814, 28875, 28918, 16418, 16418, 16418, 16418, 16418, + /* 90 */ 16418, 16418, 23292, 28983, 10120, 10445, 17471, 21601, 23187, 28837, + /* 100 */ 29060, 29070, 29112, 29167, 29230, 29271, 4351, 4621, -184, -178, + /* 110 */ 4096, -172, -45, -28, -20, 84, 100, 249, 585, 90, + /* 120 */ 1272, 20, 240, 395, 81, 56, -43, 56, 56, -182, + /* 130 */ 532, 137, 390, 669, 223, 80, 554, 101, -156, 373, + /* 140 */ -181, 380, 72, 523, 587, 673, -218, -197, -194, 132, + /* 150 */ -325, -307, -206, 550, 267, -317, 488, 571, -70, 139, + /* 160 */ 406, 666, 757, 524, 298, 589, 755, 836, 895, 969, + /* 170 */ 765, -174, -198, -297, -91, 37, 205, 195, 421, 483, + /* 180 */ 454, 517, 654, 655, 684, 667, 830, 904, 835, 801, + /* 190 */ 961, 911, 882, 1095, 1114, 1107, 1152, 1179, 1183, 1224, + /* 200 */ 1240, 1269, 1298, 1210, 1241, 1333, 1420, 1583, 1513, 1458, + /* 210 */ 1636, 1577, 1644, 1626, 1717, 1722, 1764, 1763, 1766, 1784, + /* 220 */ 1776, 1781, 1811, 1812, 1814, 1815, 1866, 1868, 1899, 1898, + /* 230 */ 1901, 1914, 1889, 1824, 1806, 1968, 1976, 1970, 2006, 2012, + /* 240 */ 1986, 2064, }; static const YYACTIONTYPE yy_default[] = { - /* 0 */ 977, 913, 913, 913, 913, 913, 913, 913, 913, 913, - /* 10 */ 700, 894, 649, 649, 649, 893, 977, 977, 977, 977, - /* 20 */ 649, 977, 972, 977, 977, 977, 977, 977, 977, 977, - /* 30 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 40 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 50 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 60 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 70 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 80 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 90 */ 686, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 100 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 110 */ 714, 965, 977, 977, 707, 707, 977, 916, 977, 977, - /* 120 */ 977, 977, 839, 839, 760, 943, 977, 977, 975, 977, - /* 130 */ 825, 977, 715, 977, 977, 973, 977, 977, 760, 763, - /* 140 */ 977, 973, 695, 675, 813, 977, 977, 977, 691, 977, - /* 150 */ 977, 977, 977, 734, 977, 954, 953, 952, 749, 977, - /* 160 */ 849, 977, 977, 977, 849, 977, 977, 977, 977, 977, - /* 170 */ 977, 977, 977, 977, 977, 849, 977, 977, 977, 977, - /* 180 */ 810, 977, 977, 977, 807, 977, 977, 977, 977, 977, - /* 190 */ 977, 977, 977, 977, 977, 763, 977, 977, 977, 977, - /* 200 */ 977, 955, 955, 977, 977, 977, 977, 977, 977, 966, - /* 210 */ 977, 977, 977, 977, 966, 975, 977, 977, 977, 977, - /* 220 */ 977, 977, 977, 977, 917, 977, 977, 728, 977, 977, - /* 230 */ 977, 977, 977, 964, 824, 977, 977, 955, 955, 854, - /* 240 */ 856, 854, 856, 856, 977, 856, 977, 977, 977, 686, - /* 250 */ 892, 863, 843, 842, 667, 977, 977, 977, 977, 977, - /* 260 */ 977, 977, 977, 977, 977, 977, 977, 836, 698, 699, - /* 270 */ 976, 967, 692, 799, 657, 659, 758, 759, 655, 977, - /* 280 */ 977, 748, 757, 756, 977, 977, 977, 747, 746, 745, - /* 290 */ 744, 743, 742, 741, 740, 739, 738, 977, 977, 977, - /* 300 */ 977, 977, 977, 977, 977, 794, 977, 928, 977, 927, - /* 310 */ 977, 977, 794, 977, 977, 977, 977, 977, 977, 977, - /* 320 */ 800, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 330 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 340 */ 977, 977, 977, 788, 977, 977, 977, 868, 977, 977, - /* 350 */ 977, 977, 977, 977, 977, 977, 977, 977, 977, 977, - /* 360 */ 977, 977, 977, 977, 921, 977, 977, 977, 977, 977, - /* 370 */ 977, 977, 977, 977, 724, 977, 977, 977, 977, 851, - /* 380 */ 850, 977, 977, 656, 658, 977, 977, 977, 794, 755, - /* 390 */ 754, 753, 752, 751, 750, 977, 977, 737, 736, 977, - /* 400 */ 977, 977, 977, 732, 897, 896, 895, 814, 812, 811, - /* 410 */ 809, 808, 806, 804, 803, 802, 801, 805, 891, 890, - /* 420 */ 889, 888, 887, 886, 772, 941, 939, 938, 937, 936, - /* 430 */ 935, 934, 933, 932, 898, 847, 722, 940, 862, 861, - /* 440 */ 860, 841, 840, 838, 837, 774, 775, 776, 773, 765, - /* 450 */ 766, 764, 790, 791, 762, 661, 781, 783, 785, 787, - /* 460 */ 789, 786, 784, 782, 780, 779, 770, 769, 768, 767, - /* 470 */ 660, 761, 709, 708, 706, 650, 648, 647, 646, 942, - /* 480 */ 702, 701, 697, 696, 882, 915, 914, 912, 911, 910, - /* 490 */ 909, 908, 907, 906, 905, 904, 903, 902, 884, 883, - /* 500 */ 881, 798, 865, 859, 858, 796, 795, 723, 703, 694, - /* 510 */ 670, 671, 669, 666, 645, 721, 922, 930, 931, 926, - /* 520 */ 924, 929, 925, 923, 848, 794, 918, 920, 846, 845, - /* 530 */ 919, 720, 730, 729, 727, 726, 823, 820, 819, 818, - /* 540 */ 817, 816, 822, 821, 963, 962, 960, 961, 959, 958, - /* 550 */ 957, 974, 971, 970, 969, 968, 719, 717, 725, 724, - /* 560 */ 718, 716, 853, 852, 678, 828, 956, 901, 900, 844, - /* 570 */ 827, 826, 685, 855, 684, 683, 682, 681, 857, 735, - /* 580 */ 870, 869, 771, 652, 880, 879, 878, 877, 876, 875, - /* 590 */ 874, 873, 945, 951, 950, 949, 948, 947, 946, 944, - /* 600 */ 872, 871, 835, 834, 833, 832, 831, 830, 829, 885, - /* 610 */ 815, 793, 792, 778, 651, 868, 867, 693, 705, 704, - /* 620 */ 654, 653, 680, 679, 677, 674, 673, 672, 668, 665, - /* 630 */ 664, 663, 662, 676, 713, 712, 711, 710, 690, 689, - /* 640 */ 688, 687, 899, 797, 733, + /* 0 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 10 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 20 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 30 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 40 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 50 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 60 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 70 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 80 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 90 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 100 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 110 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 120 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 130 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 140 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 150 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 160 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 170 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 180 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 190 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 200 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 210 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 220 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 230 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 240 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 250 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 260 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 270 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 280 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 290 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 300 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 310 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 320 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 330 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 340 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 350 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 360 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 370 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 380 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 390 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 400 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 410 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 420 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 430 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 440 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 450 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 460 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 470 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 480 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 490 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 500 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 510 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 520 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 530 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 540 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 550 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 560 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 570 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 580 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 590 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 600 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 610 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 620 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 630 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 640 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 650 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 660 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 670 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 680 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 690 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 700 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 710 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 720 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 730 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 740 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 750 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 760 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 770 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 780 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 790 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 800 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 810 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 820 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 830 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, + /* 840 */ 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, 1325, }; +/********** End of lemon-generated parsing tables *****************************/ -/* The next table maps tokens into fallback tokens. If a construct -** like the following: +/* The next table maps tokens (terminal symbols) into fallback tokens. +** If a construct like the following: ** ** %fallback ID X Y Z. ** @@ -969,6 +6345,10 @@ static const YYACTIONTYPE yy_default[] = { ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser ** but it does not parse, the type of the token is changed to ID and ** the parse is retried before an error is thrown. +** +** This feature can be used, for example, to cause some keywords in a language +** to revert to identifiers if they keyword does not apply in the context where +** it appears. */ #ifdef YYFALLBACK static const YYCODETYPE yyFallback[] = { @@ -986,9 +6366,13 @@ static const YYCODETYPE yyFallback[] = { ** + The semantic value stored at this level of the stack. This is ** the information used by the action routines in the grammar. ** It is sometimes called the "minor" token. +** +** After the "shift" half of a SHIFTREDUCE action, the stateno field +** actually contains the reduce action for the second half of the +** SHIFTREDUCE. */ struct yyStackEntry { - YYACTIONTYPE stateno; /* The state-number */ + YYACTIONTYPE stateno; /* The state-number, or reduce action in SHIFTREDUCE */ YYCODETYPE major; /* The major token value. This is the code ** number for the token at this stack level */ YYMINORTYPE minor; /* The user-supplied minor token value. This @@ -999,17 +6383,21 @@ typedef struct yyStackEntry yyStackEntry; /* The state of the parser is completely contained in an instance of ** the following structure */ struct yyParser { - int yyidx; /* Index of top element in stack */ + yyStackEntry *yytos; /* Pointer to top element of the stack */ #ifdef YYTRACKMAXSTACKDEPTH - int yyidxMax; /* Maximum value of yyidx */ + int yyhwm; /* High-water mark of the stack */ #endif +#ifndef YYNOERRORRECOVERY int yyerrcnt; /* Shifts left before out of the error */ - ParseARG_SDECL /* A place to hold %extra_argument */ +#endif + yyparseARG_SDECL /* A place to hold %extra_argument */ #if YYSTACKDEPTH<=0 int yystksz; /* Current side of the stack */ yyStackEntry *yystack; /* The parser's stack */ + yyStackEntry yystk0; /* First stack entry */ #else yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */ + yyStackEntry *yystackEnd; /* Last entry in the stack */ #endif }; typedef struct yyParser yyParser; @@ -1038,7 +6426,7 @@ static char *yyTracePrompt = 0; ** Outputs: ** None. */ -void ParseTrace(FILE *TraceFILE, char *zTracePrompt){ +void yyparseTrace(FILE *TraceFILE, char *zTracePrompt){ yyTraceFILE = TraceFILE; yyTracePrompt = zTracePrompt; if( yyTraceFILE==0 ) yyTracePrompt = 0; @@ -1046,446 +6434,959 @@ void ParseTrace(FILE *TraceFILE, char *zTracePrompt){ } #endif /* NDEBUG */ -#ifndef NDEBUG +#if defined(YYCOVERAGE) || !defined(NDEBUG) /* For tracing shifts, the names of all terminals and nonterminals ** are required. The following table supplies these names */ static const char *const yyTokenName[] = { - "$", "TOK_EQUAL", "TOK_GREATER_EQUAL", "TOK_GREATER_THAN", - "TOK_IN", "TOK_INST_EQUAL", "TOK_INST_NOT_EQUAL", "TOK_LESS_EQUAL", - "TOK_LESS_THAN", "TOK_LIKE", "TOK_NOT_EQUAL", "TOK_MINUS", - "TOK_PLUS", "TOK_OR", "TOK_XOR", "TOK_DIV", - "TOK_MOD", "TOK_REAL_DIV", "TOK_TIMES", "TOK_AND", - "TOK_ANDOR", "TOK_CONCAT_OP", "TOK_EXP", "TOK_NOT", - "TOK_DOT", "TOK_BACKSLASH", "TOK_LEFT_BRACKET", "TOK_LEFT_PAREN", - "TOK_RIGHT_PAREN", "TOK_RIGHT_BRACKET", "TOK_COLON", "TOK_COMMA", - "TOK_AGGREGATE", "TOK_OF", "TOK_IDENTIFIER", "TOK_ALIAS", - "TOK_FOR", "TOK_END_ALIAS", "TOK_ARRAY", "TOK_ASSIGNMENT", - "TOK_BAG", "TOK_BOOLEAN", "TOK_INTEGER", "TOK_REAL", - "TOK_NUMBER", "TOK_LOGICAL", "TOK_BINARY", "TOK_STRING", - "TOK_BY", "TOK_LEFT_CURL", "TOK_RIGHT_CURL", "TOK_OTHERWISE", - "TOK_CASE", "TOK_END_CASE", "TOK_BEGIN", "TOK_END", - "TOK_PI", "TOK_E", "TOK_CONSTANT", "TOK_END_CONSTANT", - "TOK_DERIVE", "TOK_END_ENTITY", "TOK_ENTITY", "TOK_ENUMERATION", - "TOK_ESCAPE", "TOK_SELF", "TOK_OPTIONAL", "TOK_VAR", - "TOK_END_FUNCTION", "TOK_FUNCTION", "TOK_BUILTIN_FUNCTION", "TOK_LIST", - "TOK_SET", "TOK_GENERIC", "TOK_QUESTION_MARK", "TOK_IF", - "TOK_THEN", "TOK_END_IF", "TOK_ELSE", "TOK_INCLUDE", - "TOK_STRING_LITERAL", "TOK_TO", "TOK_AS", "TOK_REFERENCE", - "TOK_FROM", "TOK_USE", "TOK_INVERSE", "TOK_INTEGER_LITERAL", - "TOK_REAL_LITERAL", "TOK_STRING_LITERAL_ENCODED", "TOK_LOGICAL_LITERAL", "TOK_BINARY_LITERAL", - "TOK_LOCAL", "TOK_END_LOCAL", "TOK_ONEOF", "TOK_UNIQUE", - "TOK_FIXED", "TOK_END_PROCEDURE", "TOK_PROCEDURE", "TOK_BUILTIN_PROCEDURE", - "TOK_QUERY", "TOK_ALL_IN", "TOK_SUCH_THAT", "TOK_REPEAT", - "TOK_END_REPEAT", "TOK_RETURN", "TOK_END_RULE", "TOK_RULE", - "TOK_END_SCHEMA", "TOK_SCHEMA", "TOK_SELECT", "TOK_SEMICOLON", - "TOK_SKIP", "TOK_SUBTYPE", "TOK_ABSTRACT", "TOK_SUPERTYPE", - "TOK_END_TYPE", "TOK_TYPE", "TOK_UNTIL", "TOK_WHERE", - "TOK_WHILE", "error", "statement_list", "case_action", - "case_otherwise", "entity_body", "aggregate_init_element", "aggregate_initializer", - "assignable", "attribute_decl", "by_expression", "constant", - "expression", "function_call", "general_ref", "group_ref", - "identifier", "initializer", "interval", "literal", - "local_initializer", "precision_spec", "query_expression", "query_start", - "simple_expression", "unary_expression", "supertype_expression", "until_control", - "while_control", "function_header", "fh_lineno", "rule_header", - "rh_start", "rh_get_line", "procedure_header", "ph_get_line", - "action_body", "actual_parameters", "aggregate_init_body", "explicit_attr_list", - "case_action_list", "case_block", "case_labels", "where_clause_list", - "derive_decl", "explicit_attribute", "expression_list", "formal_parameter", - "formal_parameter_list", "formal_parameter_rep", "id_list", "defined_type_list", - "nested_id_list", "statement_rep", "subtype_decl", "where_rule", - "where_rule_OPT", "supertype_expression_list", "labelled_attrib_list_list", "labelled_attrib_list", - "inverse_attr_list", "inverse_clause", "attribute_decl_list", "derived_attribute_rep", - "unique_clause", "rule_formal_parameter_list", "qualified_attr_list", "rel_op", - "optional_or_unique", "optional_fixed", "optional", "var", - "unique", "qualified_attr", "qualifier", "alias_statement", - "assignment_statement", "case_statement", "compound_statement", "escape_statement", - "if_statement", "proc_call_statement", "repeat_statement", "return_statement", - "skip_statement", "statement", "subsuper_decl", "supertype_decl", - "supertype_factor", "function_id", "procedure_id", "attribute_type", - "defined_type", "parameter_type", "generic_type", "basic_type", - "select_type", "aggregate_type", "aggregation_type", "array_type", - "bag_type", "conformant_aggregation", "list_type", "set_type", - "set_or_bag_of_entity", "type", "cardinality_op", "bound_spec", - "inverse_attr", "derived_attribute", "rule_formal_parameter", "where_clause", - "action_body_item_rep", "action_body_item", "declaration", "constant_decl", - "local_decl", "semicolon", "alias_push_scope", "block_list", - "block_member", "include_directive", "rule_decl", "constant_body", - "constant_body_list", "entity_decl", "function_decl", "procedure_decl", - "type_decl", "entity_header", "enumeration_type", "express_file", - "schema_decl_list", "schema_decl", "fh_push_scope", "fh_plist", - "increment_control", "rename", "rename_list", "parened_rename_list", - "reference_clause", "reference_head", "use_clause", "use_head", - "interface_specification", "interface_specification_list", "right_curl", "local_variable", - "local_body", "local_decl_rules_on", "local_decl_rules_off", "oneof_op", - "ph_push_scope", "schema_body", "schema_header", "type_item_body", - "type_item", "ti_start", "td_start", + /* 0 */ "$", + /* 1 */ "T_INVALID", + /* 2 */ "T_DOCROOT", + /* 3 */ "T_RULE_REF", + /* 4 */ "T_RULE_LABEL_REF", + /* 5 */ "T_EQ", + /* 6 */ "T_NEQ", + /* 7 */ "T_LTEQ", + /* 8 */ "T_GTEQ", + /* 9 */ "T_LT", + /* 10 */ "T_GT", + /* 11 */ "T_INST_EQ", + /* 12 */ "T_INST_NEQ", + /* 13 */ "T_IN", + /* 14 */ "T_LIKE", + /* 15 */ "T_PLUS", + /* 16 */ "T_MINUS", + /* 17 */ "T_OR", + /* 18 */ "T_XOR", + /* 19 */ "T_ANDOR", + /* 20 */ "T_TIMES", + /* 21 */ "T_RDIV", + /* 22 */ "T_IDIV", + /* 23 */ "T_MOD", + /* 24 */ "T_AND", + /* 25 */ "T_CONCAT", + /* 26 */ "T_EXP", + /* 27 */ "UNARY_OP", + /* 28 */ "T_LBRKT", + /* 29 */ "T_RBRKT", + /* 30 */ "T_LPAREN", + /* 31 */ "T_RPAREN", + /* 32 */ "T_ONEOF", + /* 33 */ "T_DOT", + /* 34 */ "T_BACKSLASH", + /* 35 */ "T_SIMPLE_ID", + /* 36 */ "T_SCHEMA_REF", + /* 37 */ "T_FUNCTION_REF", + /* 38 */ "T_PROCEDURE_REF", + /* 39 */ "T_TYPE_REF", + /* 40 */ "T_ENTITY_REF", + /* 41 */ "T_PARAMETER_REF", + /* 42 */ "T_VARIABLE_REF", + /* 43 */ "T_CONSTANT_REF", + /* 44 */ "T_ENUMERATION_REF", + /* 45 */ "T_SIMPLE_REF", + /* 46 */ "T_ABSTRACT", + /* 47 */ "T_SUPERTYPE", + /* 48 */ "T_SEMICOLON", + /* 49 */ "T_COMMA", + /* 50 */ "T_AGGREGATE", + /* 51 */ "T_OF", + /* 52 */ "T_COLON", + /* 53 */ "T_ALIAS", + /* 54 */ "T_FOR", + /* 55 */ "T_END_ALIAS", + /* 56 */ "T_ARRAY", + /* 57 */ "T_OPTIONAL", + /* 58 */ "T_UNIQUE", + /* 59 */ "T_ASSIGN", + /* 60 */ "T_BAG", + /* 61 */ "T_BINARY", + /* 62 */ "T_BOOLEAN", + /* 63 */ "T_CONST_E", + /* 64 */ "T_PI", + /* 65 */ "T_SELF", + /* 66 */ "T_QMARK", + /* 67 */ "T_ABS", + /* 68 */ "T_ACOS", + /* 69 */ "T_ASIN", + /* 70 */ "T_ATAN", + /* 71 */ "T_BLENGTH", + /* 72 */ "T_COS", + /* 73 */ "T_EXISTS", + /* 74 */ "T_FORMAT", + /* 75 */ "T_HIBOUND", + /* 76 */ "T_HIINDEX", + /* 77 */ "T_LENGTH", + /* 78 */ "T_LOBOUND", + /* 79 */ "T_LOINDEX", + /* 80 */ "T_LOG", + /* 81 */ "T_LOG2", + /* 82 */ "T_LOG10", + /* 83 */ "T_NVL", + /* 84 */ "T_ODD", + /* 85 */ "T_ROLESOF", + /* 86 */ "T_SIN", + /* 87 */ "T_SIZEOF", + /* 88 */ "T_SQRT", + /* 89 */ "T_TAN", + /* 90 */ "T_TYPEOF", + /* 91 */ "T_USEDIN", + /* 92 */ "T_VALUE", + /* 93 */ "T_VALUE_IN", + /* 94 */ "T_VALUE_UNIQUE", + /* 95 */ "T_INSERT", + /* 96 */ "T_REMOVE", + /* 97 */ "T_OTHERWISE", + /* 98 */ "T_CASE", + /* 99 */ "T_END_CASE", + /* 100 */ "T_BEGIN", + /* 101 */ "T_END", + /* 102 */ "T_CONSTANT", + /* 103 */ "T_END_CONSTANT", + /* 104 */ "T_DERIVE", + /* 105 */ "T_END_ENTITY", + /* 106 */ "T_ENTITY", + /* 107 */ "T_BASED_ON", + /* 108 */ "T_WITH", + /* 109 */ "T_EXTENSIBLE", + /* 110 */ "T_ENUMERATION", + /* 111 */ "T_ESCAPE", + /* 112 */ "T_END_FUNCTION", + /* 113 */ "T_FUNCTION", + /* 114 */ "T_LIST", + /* 115 */ "T_SET", + /* 116 */ "T_GENERIC_ENTITY", + /* 117 */ "T_GENERIC", + /* 118 */ "T_IF", + /* 119 */ "T_THEN", + /* 120 */ "T_ELSE", + /* 121 */ "T_END_IF", + /* 122 */ "T_TO", + /* 123 */ "T_BY", + /* 124 */ "T_INTEGER", + /* 125 */ "T_LCURL", + /* 126 */ "T_RCURL", + /* 127 */ "T_INVERSE", + /* 128 */ "T_BINARY_LITERAL", + /* 129 */ "T_INTEGER_LITERAL", + /* 130 */ "T_REAL_LITERAL", + /* 131 */ "T_LOCAL", + /* 132 */ "T_END_LOCAL", + /* 133 */ "T_FALSE", + /* 134 */ "T_TRUE", + /* 135 */ "T_UNKNOWN", + /* 136 */ "T_LOGICAL", + /* 137 */ "T_AS", + /* 138 */ "T_NUMBER", + /* 139 */ "T_END_PROCEDURE", + /* 140 */ "T_PROCEDURE", + /* 141 */ "T_VAR", + /* 142 */ "T_QUERY", + /* 143 */ "T_ALL_IN", + /* 144 */ "T_PIPE", + /* 145 */ "T_REAL", + /* 146 */ "T_RENAMED", + /* 147 */ "T_REFERENCE", + /* 148 */ "T_FROM", + /* 149 */ "T_REPEAT", + /* 150 */ "T_END_REPEAT", + /* 151 */ "T_RETURN", + /* 152 */ "T_END_RULE", + /* 153 */ "T_RULE", + /* 154 */ "T_SCHEMA", + /* 155 */ "T_END_SCHEMA", + /* 156 */ "T_SELECT", + /* 157 */ "T_NOT", + /* 158 */ "T_SKIP", + /* 159 */ "T_STRING_LITERAL", + /* 160 */ "T_ENCODED_STRING_LITERAL", + /* 161 */ "T_STRING", + /* 162 */ "T_END_SUBTYPE_CONSTRAINT", + /* 163 */ "T_SUBTYPE_CONSTRAINT", + /* 164 */ "T_SUBTYPE", + /* 165 */ "T_TOTAL_OVER", + /* 166 */ "T_TYPE", + /* 167 */ "T_END_TYPE", + /* 168 */ "T_UNTIL", + /* 169 */ "T_USE", + /* 170 */ "T_WHERE", + /* 171 */ "T_WHILE", + /* 172 */ "T_FIXED", + /* 173 */ "error", + /* 174 */ "case_action", + /* 175 */ "case_otherwise", + /* 176 */ "case_action_list", + /* 177 */ "case_label_list", + /* 178 */ "expression", + /* 179 */ "schema_id", + /* 180 */ "rule_id", + /* 181 */ "subtype_constraint_id", + /* 182 */ "parameter_id", + /* 183 */ "variable_id", + /* 184 */ "attribute_id", + /* 185 */ "enumeration_id", + /* 186 */ "type_label_id", + /* 187 */ "rule_label_id", + /* 188 */ "schema_ref", + /* 189 */ "function_ref", + /* 190 */ "procedure_ref", + /* 191 */ "type_ref", + /* 192 */ "entity_ref", + /* 193 */ "parameter_ref", + /* 194 */ "variable_ref", + /* 195 */ "constant_ref", + /* 196 */ "enumeration_ref", + /* 197 */ "attribute_ref", + /* 198 */ "abstract_supertype", + /* 199 */ "abstract_entity_declaration", + /* 200 */ "abstract_supertype_declaration", + /* 201 */ "subtype_constraint", + /* 202 */ "actual_parameter_list", + /* 203 */ "parameter", + /* 204 */ "add_like_op", + /* 205 */ "element_list", + /* 206 */ "element", + /* 207 */ "aggregate_initializer", + /* 208 */ "aggregate_source", + /* 209 */ "simple_expression", + /* 210 */ "aggregate_type", + /* 211 */ "parameter_type", + /* 212 */ "type_label", + /* 213 */ "aggregation_types", + /* 214 */ "array_type", + /* 215 */ "bag_type", + /* 216 */ "list_type", + /* 217 */ "set_type", + /* 218 */ "algorithm_head", + /* 219 */ "declaration_list", + /* 220 */ "constant_decl", + /* 221 */ "local_decl", + /* 222 */ "declaration", + /* 223 */ "stmt_list", + /* 224 */ "stmt", + /* 225 */ "qualifier_list", + /* 226 */ "qualifier", + /* 227 */ "alias_stmt", + /* 228 */ "general_ref", + /* 229 */ "bound_spec", + /* 230 */ "instantiable_type", + /* 231 */ "assignment_stmt", + /* 232 */ "attribute_decl", + /* 233 */ "redeclared_attribute", + /* 234 */ "attribute_qualifier", + /* 235 */ "binary_type", + /* 236 */ "width_spec", + /* 237 */ "boolean_type", + /* 238 */ "bound_1", + /* 239 */ "numeric_expression", + /* 240 */ "bound_2", + /* 241 */ "built_in_constant", + /* 242 */ "built_in_function", + /* 243 */ "built_in_procedure", + /* 244 */ "case_label", + /* 245 */ "case_stmt", + /* 246 */ "selector", + /* 247 */ "compound_stmt", + /* 248 */ "concrete_types", + /* 249 */ "simple_types", + /* 250 */ "constant_body", + /* 251 */ "constant_body_list", + /* 252 */ "constant_factor", + /* 253 */ "constructed_types", + /* 254 */ "enumeration_type", + /* 255 */ "select_type", + /* 256 */ "entity_decl", + /* 257 */ "function_decl", + /* 258 */ "procedure_decl", + /* 259 */ "subtype_constraint_decl", + /* 260 */ "type_decl", + /* 261 */ "derived_attr", + /* 262 */ "derive_clause", + /* 263 */ "derived_attr_list", + /* 264 */ "domain_rule", + /* 265 */ "repetition", + /* 266 */ "entity_body", + /* 267 */ "explicit_attr_list", + /* 268 */ "inverse_clause", + /* 269 */ "unique_clause", + /* 270 */ "where_clause", + /* 271 */ "explicit_attr", + /* 272 */ "entity_constructor", + /* 273 */ "expression_list", + /* 274 */ "entity_head", + /* 275 */ "subsuper", + /* 276 */ "enumeration_extension", + /* 277 */ "enumeration_items", + /* 278 */ "enumeration_id_list", + /* 279 */ "enumeration_reference", + /* 280 */ "escape_stmt", + /* 281 */ "attribute_decl_list", + /* 282 */ "rel_op_extended", + /* 283 */ "factor", + /* 284 */ "simple_factor", + /* 285 */ "formal_parameter", + /* 286 */ "parameter_id_list", + /* 287 */ "function_call", + /* 288 */ "function_head", + /* 289 */ "formal_parameter_list", + /* 290 */ "generalized_types", + /* 291 */ "general_aggregation_types", + /* 292 */ "generic_entity_type", + /* 293 */ "generic_type", + /* 294 */ "general_array_type", + /* 295 */ "general_bag_type", + /* 296 */ "general_list_type", + /* 297 */ "general_set_type", + /* 298 */ "group_qualifier", + /* 299 */ "if_stmt", + /* 300 */ "logical_expression", + /* 301 */ "increment", + /* 302 */ "increment_control", + /* 303 */ "index", + /* 304 */ "index_1", + /* 305 */ "index_2", + /* 306 */ "index_qualifier", + /* 307 */ "integer_type", + /* 308 */ "interface_specification", + /* 309 */ "reference_clause", + /* 310 */ "use_clause", + /* 311 */ "interval", + /* 312 */ "interval_low", + /* 313 */ "interval_op", + /* 314 */ "interval_item", + /* 315 */ "interval_high", + /* 316 */ "inverse_attr", + /* 317 */ "inverse_attr_list", + /* 318 */ "literal", + /* 319 */ "logical_literal", + /* 320 */ "real_literal", + /* 321 */ "string_literal", + /* 322 */ "local_variable_list", + /* 323 */ "local_variable", + /* 324 */ "variable_id_list", + /* 325 */ "logical_type", + /* 326 */ "multiplication_like_op", + /* 327 */ "named_types", + /* 328 */ "named_type_or_rename", + /* 329 */ "null_stmt", + /* 330 */ "number_type", + /* 331 */ "one_of", + /* 332 */ "supertype_expression_list", + /* 333 */ "supertype_expression", + /* 334 */ "population", + /* 335 */ "precision_spec", + /* 336 */ "primary", + /* 337 */ "qualifiable_factor", + /* 338 */ "procedure_call_stmt", + /* 339 */ "procedure_head", + /* 340 */ "varopt_formal_parameter_list", + /* 341 */ "qualified_attribute", + /* 342 */ "query_expression", + /* 343 */ "real_type", + /* 344 */ "referenced_attribute", + /* 345 */ "resource_or_rename_list", + /* 346 */ "resource_or_rename", + /* 347 */ "rel_op", + /* 348 */ "rename_id", + /* 349 */ "repeat_control", + /* 350 */ "while_control", + /* 351 */ "until_control", + /* 352 */ "repeat_stmt", + /* 353 */ "resource_ref", + /* 354 */ "return_stmt", + /* 355 */ "rule_decl", + /* 356 */ "rule_head", + /* 357 */ "entity_ref_list", + /* 358 */ "schema_body", + /* 359 */ "interface_specification_list", + /* 360 */ "declaration_or_rule_decl_list", + /* 361 */ "declaration_or_rule_decl", + /* 362 */ "schema_decl", + /* 363 */ "schema_version_id", + /* 364 */ "select_extension", + /* 365 */ "select_list", + /* 366 */ "named_types_list", + /* 367 */ "term_list", + /* 368 */ "term", + /* 369 */ "string_type", + /* 370 */ "skip_stmt", + /* 371 */ "supertype_constraint", + /* 372 */ "subtype_declaration", + /* 373 */ "subtype_constraint_body", + /* 374 */ "total_over", + /* 375 */ "subtype_constraint_head", + /* 376 */ "supertype_rule", + /* 377 */ "supertype_factor_list", + /* 378 */ "supertype_factor", + /* 379 */ "supertype_term_list", + /* 380 */ "supertype_term", + /* 381 */ "factor_list", + /* 382 */ "type_head", + /* 383 */ "underlying_type", + /* 384 */ "unique_rule_list", + /* 385 */ "unique_rule", + /* 386 */ "referenced_attribute_list", + /* 387 */ "named_type_or_rename_list", + /* 388 */ "domain_rule_list", + /* 389 */ "width", + /* 390 */ "express_file", + /* 391 */ "schema_decl_list", }; -#endif /* NDEBUG */ +#endif /* defined(YYCOVERAGE) || !defined(NDEBUG) */ #ifndef NDEBUG /* For tracing reduce actions, the names of all rules are required. */ static const char *const yyRuleName[] = { - /* 0 */ "action_body ::= action_body_item_rep statement_rep", - /* 1 */ "action_body_item ::= declaration", - /* 2 */ "action_body_item ::= constant_decl", - /* 3 */ "action_body_item ::= local_decl", - /* 4 */ "action_body_item_rep ::=", - /* 5 */ "action_body_item_rep ::= action_body_item action_body_item_rep", - /* 6 */ "actual_parameters ::= TOK_LEFT_PAREN expression_list TOK_RIGHT_PAREN", - /* 7 */ "actual_parameters ::= TOK_LEFT_PAREN TOK_RIGHT_PAREN", - /* 8 */ "aggregate_initializer ::= TOK_LEFT_BRACKET TOK_RIGHT_BRACKET", - /* 9 */ "aggregate_initializer ::= TOK_LEFT_BRACKET aggregate_init_body TOK_RIGHT_BRACKET", - /* 10 */ "aggregate_init_element ::= expression", - /* 11 */ "aggregate_init_body ::= aggregate_init_element", - /* 12 */ "aggregate_init_body ::= aggregate_init_element TOK_COLON expression", - /* 13 */ "aggregate_init_body ::= aggregate_init_body TOK_COMMA aggregate_init_element", - /* 14 */ "aggregate_init_body ::= aggregate_init_body TOK_COMMA aggregate_init_element TOK_COLON expression", - /* 15 */ "aggregate_type ::= TOK_AGGREGATE TOK_OF parameter_type", - /* 16 */ "aggregate_type ::= TOK_AGGREGATE TOK_COLON TOK_IDENTIFIER TOK_OF parameter_type", - /* 17 */ "aggregation_type ::= array_type", - /* 18 */ "aggregation_type ::= bag_type", - /* 19 */ "aggregation_type ::= list_type", - /* 20 */ "aggregation_type ::= set_type", - /* 21 */ "alias_statement ::= TOK_ALIAS TOK_IDENTIFIER TOK_FOR general_ref semicolon alias_push_scope statement_rep TOK_END_ALIAS semicolon", - /* 22 */ "alias_push_scope ::=", - /* 23 */ "array_type ::= TOK_ARRAY bound_spec TOK_OF optional_or_unique attribute_type", - /* 24 */ "assignable ::= assignable qualifier", - /* 25 */ "assignable ::= identifier", - /* 26 */ "assignment_statement ::= assignable TOK_ASSIGNMENT expression semicolon", - /* 27 */ "attribute_type ::= aggregation_type", - /* 28 */ "attribute_type ::= basic_type", - /* 29 */ "attribute_type ::= defined_type", - /* 30 */ "explicit_attr_list ::=", - /* 31 */ "explicit_attr_list ::= explicit_attr_list explicit_attribute", - /* 32 */ "bag_type ::= TOK_BAG bound_spec TOK_OF attribute_type", - /* 33 */ "bag_type ::= TOK_BAG TOK_OF attribute_type", - /* 34 */ "basic_type ::= TOK_BOOLEAN", - /* 35 */ "basic_type ::= TOK_INTEGER precision_spec", - /* 36 */ "basic_type ::= TOK_REAL precision_spec", - /* 37 */ "basic_type ::= TOK_NUMBER", - /* 38 */ "basic_type ::= TOK_LOGICAL", - /* 39 */ "basic_type ::= TOK_BINARY precision_spec optional_fixed", - /* 40 */ "basic_type ::= TOK_STRING precision_spec optional_fixed", - /* 41 */ "block_list ::=", - /* 42 */ "block_list ::= block_list block_member", - /* 43 */ "block_member ::= declaration", - /* 44 */ "block_member ::= include_directive", - /* 45 */ "block_member ::= rule_decl", - /* 46 */ "by_expression ::=", - /* 47 */ "by_expression ::= TOK_BY expression", - /* 48 */ "cardinality_op ::= TOK_LEFT_CURL expression TOK_COLON expression TOK_RIGHT_CURL", - /* 49 */ "case_action ::= case_labels TOK_COLON statement", - /* 50 */ "case_action_list ::=", - /* 51 */ "case_action_list ::= case_action_list case_action", - /* 52 */ "case_block ::= case_action_list case_otherwise", - /* 53 */ "case_labels ::= expression", - /* 54 */ "case_labels ::= case_labels TOK_COMMA expression", - /* 55 */ "case_otherwise ::=", - /* 56 */ "case_otherwise ::= TOK_OTHERWISE TOK_COLON statement", - /* 57 */ "case_statement ::= TOK_CASE expression TOK_OF case_block TOK_END_CASE semicolon", - /* 58 */ "compound_statement ::= TOK_BEGIN statement_rep TOK_END semicolon", - /* 59 */ "constant ::= TOK_PI", - /* 60 */ "constant ::= TOK_E", - /* 61 */ "constant_body ::= identifier TOK_COLON attribute_type TOK_ASSIGNMENT expression semicolon", - /* 62 */ "constant_body_list ::=", - /* 63 */ "constant_body_list ::= constant_body constant_body_list", - /* 64 */ "constant_decl ::= TOK_CONSTANT constant_body_list TOK_END_CONSTANT semicolon", - /* 65 */ "declaration ::= entity_decl", - /* 66 */ "declaration ::= function_decl", - /* 67 */ "declaration ::= procedure_decl", - /* 68 */ "declaration ::= type_decl", - /* 69 */ "derive_decl ::=", - /* 70 */ "derive_decl ::= TOK_DERIVE derived_attribute_rep", - /* 71 */ "derived_attribute ::= attribute_decl TOK_COLON attribute_type initializer semicolon", - /* 72 */ "derived_attribute_rep ::= derived_attribute", - /* 73 */ "derived_attribute_rep ::= derived_attribute_rep derived_attribute", - /* 74 */ "entity_body ::= explicit_attr_list derive_decl inverse_clause unique_clause where_rule_OPT", - /* 75 */ "entity_decl ::= entity_header subsuper_decl semicolon entity_body TOK_END_ENTITY semicolon", - /* 76 */ "entity_header ::= TOK_ENTITY TOK_IDENTIFIER", - /* 77 */ "enumeration_type ::= TOK_ENUMERATION TOK_OF nested_id_list", - /* 78 */ "escape_statement ::= TOK_ESCAPE semicolon", - /* 79 */ "attribute_decl ::= TOK_IDENTIFIER", - /* 80 */ "attribute_decl ::= TOK_SELF TOK_BACKSLASH TOK_IDENTIFIER TOK_DOT TOK_IDENTIFIER", - /* 81 */ "attribute_decl_list ::= attribute_decl", - /* 82 */ "attribute_decl_list ::= attribute_decl_list TOK_COMMA attribute_decl", - /* 83 */ "optional ::=", - /* 84 */ "optional ::= TOK_OPTIONAL", - /* 85 */ "explicit_attribute ::= attribute_decl_list TOK_COLON optional attribute_type semicolon", - /* 86 */ "express_file ::= schema_decl_list", - /* 87 */ "schema_decl_list ::= schema_decl", - /* 88 */ "schema_decl_list ::= schema_decl_list schema_decl", - /* 89 */ "expression ::= simple_expression", - /* 90 */ "expression ::= expression TOK_AND expression", - /* 91 */ "expression ::= expression TOK_OR expression", - /* 92 */ "expression ::= expression TOK_XOR expression", - /* 93 */ "expression ::= expression TOK_LESS_THAN expression", - /* 94 */ "expression ::= expression TOK_GREATER_THAN expression", - /* 95 */ "expression ::= expression TOK_EQUAL expression", - /* 96 */ "expression ::= expression TOK_LESS_EQUAL expression", - /* 97 */ "expression ::= expression TOK_GREATER_EQUAL expression", - /* 98 */ "expression ::= expression TOK_NOT_EQUAL expression", - /* 99 */ "expression ::= expression TOK_INST_EQUAL expression", - /* 100 */ "expression ::= expression TOK_INST_NOT_EQUAL expression", - /* 101 */ "expression ::= expression TOK_IN expression", - /* 102 */ "expression ::= expression TOK_LIKE expression", - /* 103 */ "expression ::= simple_expression cardinality_op simple_expression", - /* 104 */ "simple_expression ::= unary_expression", - /* 105 */ "simple_expression ::= simple_expression TOK_CONCAT_OP simple_expression", - /* 106 */ "simple_expression ::= simple_expression TOK_EXP simple_expression", - /* 107 */ "simple_expression ::= simple_expression TOK_TIMES simple_expression", - /* 108 */ "simple_expression ::= simple_expression TOK_DIV simple_expression", - /* 109 */ "simple_expression ::= simple_expression TOK_REAL_DIV simple_expression", - /* 110 */ "simple_expression ::= simple_expression TOK_MOD simple_expression", - /* 111 */ "simple_expression ::= simple_expression TOK_PLUS simple_expression", - /* 112 */ "simple_expression ::= simple_expression TOK_MINUS simple_expression", - /* 113 */ "expression_list ::= expression", - /* 114 */ "expression_list ::= expression_list TOK_COMMA expression", - /* 115 */ "var ::=", - /* 116 */ "var ::= TOK_VAR", - /* 117 */ "formal_parameter ::= var id_list TOK_COLON parameter_type", - /* 118 */ "formal_parameter_list ::=", - /* 119 */ "formal_parameter_list ::= TOK_LEFT_PAREN formal_parameter_rep TOK_RIGHT_PAREN", - /* 120 */ "formal_parameter_rep ::= formal_parameter", - /* 121 */ "formal_parameter_rep ::= formal_parameter_rep semicolon formal_parameter", - /* 122 */ "parameter_type ::= basic_type", - /* 123 */ "parameter_type ::= conformant_aggregation", - /* 124 */ "parameter_type ::= defined_type", - /* 125 */ "parameter_type ::= generic_type", - /* 126 */ "function_call ::= function_id actual_parameters", - /* 127 */ "function_decl ::= function_header action_body TOK_END_FUNCTION semicolon", - /* 128 */ "function_header ::= fh_lineno fh_push_scope fh_plist TOK_COLON parameter_type semicolon", - /* 129 */ "fh_lineno ::= TOK_FUNCTION", - /* 130 */ "fh_push_scope ::= TOK_IDENTIFIER", - /* 131 */ "fh_plist ::= formal_parameter_list", - /* 132 */ "function_id ::= TOK_IDENTIFIER", - /* 133 */ "function_id ::= TOK_BUILTIN_FUNCTION", - /* 134 */ "conformant_aggregation ::= aggregate_type", - /* 135 */ "conformant_aggregation ::= TOK_ARRAY TOK_OF optional_or_unique parameter_type", - /* 136 */ "conformant_aggregation ::= TOK_ARRAY bound_spec TOK_OF optional_or_unique parameter_type", - /* 137 */ "conformant_aggregation ::= TOK_BAG TOK_OF parameter_type", - /* 138 */ "conformant_aggregation ::= TOK_BAG bound_spec TOK_OF parameter_type", - /* 139 */ "conformant_aggregation ::= TOK_LIST TOK_OF unique parameter_type", - /* 140 */ "conformant_aggregation ::= TOK_LIST bound_spec TOK_OF unique parameter_type", - /* 141 */ "conformant_aggregation ::= TOK_SET TOK_OF parameter_type", - /* 142 */ "conformant_aggregation ::= TOK_SET bound_spec TOK_OF parameter_type", - /* 143 */ "generic_type ::= TOK_GENERIC", - /* 144 */ "generic_type ::= TOK_GENERIC TOK_COLON TOK_IDENTIFIER", - /* 145 */ "id_list ::= TOK_IDENTIFIER", - /* 146 */ "id_list ::= id_list TOK_COMMA TOK_IDENTIFIER", - /* 147 */ "identifier ::= TOK_SELF", - /* 148 */ "identifier ::= TOK_QUESTION_MARK", - /* 149 */ "identifier ::= TOK_IDENTIFIER", - /* 150 */ "if_statement ::= TOK_IF expression TOK_THEN statement_rep TOK_END_IF semicolon", - /* 151 */ "if_statement ::= TOK_IF expression TOK_THEN statement_rep TOK_ELSE statement_rep TOK_END_IF semicolon", - /* 152 */ "include_directive ::= TOK_INCLUDE TOK_STRING_LITERAL semicolon", - /* 153 */ "increment_control ::= TOK_IDENTIFIER TOK_ASSIGNMENT expression TOK_TO expression by_expression", - /* 154 */ "initializer ::= TOK_ASSIGNMENT expression", - /* 155 */ "rename ::= TOK_IDENTIFIER", - /* 156 */ "rename ::= TOK_IDENTIFIER TOK_AS TOK_IDENTIFIER", - /* 157 */ "rename_list ::= rename", - /* 158 */ "rename_list ::= rename_list TOK_COMMA rename", - /* 159 */ "parened_rename_list ::= TOK_LEFT_PAREN rename_list TOK_RIGHT_PAREN", - /* 160 */ "reference_clause ::= TOK_REFERENCE TOK_FROM TOK_IDENTIFIER semicolon", - /* 161 */ "reference_clause ::= reference_head parened_rename_list semicolon", - /* 162 */ "reference_head ::= TOK_REFERENCE TOK_FROM TOK_IDENTIFIER", - /* 163 */ "use_clause ::= TOK_USE TOK_FROM TOK_IDENTIFIER semicolon", - /* 164 */ "use_clause ::= use_head parened_rename_list semicolon", - /* 165 */ "use_head ::= TOK_USE TOK_FROM TOK_IDENTIFIER", - /* 166 */ "interface_specification ::= use_clause", - /* 167 */ "interface_specification ::= reference_clause", - /* 168 */ "interface_specification_list ::=", - /* 169 */ "interface_specification_list ::= interface_specification_list interface_specification", - /* 170 */ "interval ::= TOK_LEFT_CURL simple_expression rel_op simple_expression rel_op simple_expression right_curl", - /* 171 */ "set_or_bag_of_entity ::= defined_type", - /* 172 */ "set_or_bag_of_entity ::= TOK_SET TOK_OF defined_type", - /* 173 */ "set_or_bag_of_entity ::= TOK_SET bound_spec TOK_OF defined_type", - /* 174 */ "set_or_bag_of_entity ::= TOK_BAG bound_spec TOK_OF defined_type", - /* 175 */ "set_or_bag_of_entity ::= TOK_BAG TOK_OF defined_type", - /* 176 */ "inverse_attr_list ::= inverse_attr", - /* 177 */ "inverse_attr_list ::= inverse_attr_list inverse_attr", - /* 178 */ "inverse_attr ::= attribute_decl TOK_COLON set_or_bag_of_entity TOK_FOR TOK_IDENTIFIER semicolon", - /* 179 */ "inverse_clause ::=", - /* 180 */ "inverse_clause ::= TOK_INVERSE inverse_attr_list", - /* 181 */ "bound_spec ::= TOK_LEFT_BRACKET expression TOK_COLON expression TOK_RIGHT_BRACKET", - /* 182 */ "list_type ::= TOK_LIST bound_spec TOK_OF unique attribute_type", - /* 183 */ "list_type ::= TOK_LIST TOK_OF unique attribute_type", - /* 184 */ "literal ::= TOK_INTEGER_LITERAL", - /* 185 */ "literal ::= TOK_REAL_LITERAL", - /* 186 */ "literal ::= TOK_STRING_LITERAL", - /* 187 */ "literal ::= TOK_STRING_LITERAL_ENCODED", - /* 188 */ "literal ::= TOK_LOGICAL_LITERAL", - /* 189 */ "literal ::= TOK_BINARY_LITERAL", - /* 190 */ "literal ::= constant", - /* 191 */ "local_initializer ::= TOK_ASSIGNMENT expression", - /* 192 */ "local_variable ::= id_list TOK_COLON parameter_type semicolon", - /* 193 */ "local_variable ::= id_list TOK_COLON parameter_type local_initializer semicolon", - /* 194 */ "local_body ::=", - /* 195 */ "local_body ::= local_variable local_body", - /* 196 */ "local_decl ::= TOK_LOCAL local_decl_rules_on local_body TOK_END_LOCAL semicolon local_decl_rules_off", - /* 197 */ "local_decl_rules_on ::=", - /* 198 */ "local_decl_rules_off ::=", - /* 199 */ "defined_type ::= TOK_IDENTIFIER", - /* 200 */ "defined_type_list ::= defined_type", - /* 201 */ "defined_type_list ::= defined_type_list TOK_COMMA defined_type", - /* 202 */ "nested_id_list ::= TOK_LEFT_PAREN id_list TOK_RIGHT_PAREN", - /* 203 */ "oneof_op ::= TOK_ONEOF", - /* 204 */ "optional_or_unique ::=", - /* 205 */ "optional_or_unique ::= TOK_OPTIONAL", - /* 206 */ "optional_or_unique ::= TOK_UNIQUE", - /* 207 */ "optional_or_unique ::= TOK_OPTIONAL TOK_UNIQUE", - /* 208 */ "optional_or_unique ::= TOK_UNIQUE TOK_OPTIONAL", - /* 209 */ "optional_fixed ::=", - /* 210 */ "optional_fixed ::= TOK_FIXED", - /* 211 */ "precision_spec ::=", - /* 212 */ "precision_spec ::= TOK_LEFT_PAREN expression TOK_RIGHT_PAREN", - /* 213 */ "proc_call_statement ::= procedure_id actual_parameters semicolon", - /* 214 */ "proc_call_statement ::= procedure_id semicolon", - /* 215 */ "procedure_decl ::= procedure_header action_body TOK_END_PROCEDURE semicolon", - /* 216 */ "procedure_header ::= TOK_PROCEDURE ph_get_line ph_push_scope formal_parameter_list semicolon", - /* 217 */ "ph_push_scope ::= TOK_IDENTIFIER", - /* 218 */ "ph_get_line ::=", - /* 219 */ "procedure_id ::= TOK_IDENTIFIER", - /* 220 */ "procedure_id ::= TOK_BUILTIN_PROCEDURE", - /* 221 */ "group_ref ::= TOK_BACKSLASH TOK_IDENTIFIER", - /* 222 */ "qualifier ::= TOK_DOT TOK_IDENTIFIER", - /* 223 */ "qualifier ::= TOK_BACKSLASH TOK_IDENTIFIER", - /* 224 */ "qualifier ::= TOK_LEFT_BRACKET simple_expression TOK_RIGHT_BRACKET", - /* 225 */ "qualifier ::= TOK_LEFT_BRACKET simple_expression TOK_COLON simple_expression TOK_RIGHT_BRACKET", - /* 226 */ "query_expression ::= query_start expression TOK_RIGHT_PAREN", - /* 227 */ "query_start ::= TOK_QUERY TOK_LEFT_PAREN TOK_IDENTIFIER TOK_ALL_IN expression TOK_SUCH_THAT", - /* 228 */ "rel_op ::= TOK_LESS_THAN", - /* 229 */ "rel_op ::= TOK_GREATER_THAN", - /* 230 */ "rel_op ::= TOK_EQUAL", - /* 231 */ "rel_op ::= TOK_LESS_EQUAL", - /* 232 */ "rel_op ::= TOK_GREATER_EQUAL", - /* 233 */ "rel_op ::= TOK_NOT_EQUAL", - /* 234 */ "rel_op ::= TOK_INST_EQUAL", - /* 235 */ "rel_op ::= TOK_INST_NOT_EQUAL", - /* 236 */ "repeat_statement ::= TOK_REPEAT increment_control while_control until_control semicolon statement_rep TOK_END_REPEAT semicolon", - /* 237 */ "repeat_statement ::= TOK_REPEAT while_control until_control semicolon statement_rep TOK_END_REPEAT semicolon", - /* 238 */ "return_statement ::= TOK_RETURN semicolon", - /* 239 */ "return_statement ::= TOK_RETURN TOK_LEFT_PAREN expression TOK_RIGHT_PAREN semicolon", - /* 240 */ "right_curl ::= TOK_RIGHT_CURL", - /* 241 */ "rule_decl ::= rule_header action_body where_rule TOK_END_RULE semicolon", - /* 242 */ "rule_formal_parameter ::= TOK_IDENTIFIER", - /* 243 */ "rule_formal_parameter_list ::= rule_formal_parameter", - /* 244 */ "rule_formal_parameter_list ::= rule_formal_parameter_list TOK_COMMA rule_formal_parameter", - /* 245 */ "rule_header ::= rh_start rule_formal_parameter_list TOK_RIGHT_PAREN semicolon", - /* 246 */ "rh_start ::= TOK_RULE rh_get_line TOK_IDENTIFIER TOK_FOR TOK_LEFT_PAREN", - /* 247 */ "rh_get_line ::=", - /* 248 */ "schema_body ::= interface_specification_list block_list", - /* 249 */ "schema_body ::= interface_specification_list constant_decl block_list", - /* 250 */ "schema_decl ::= schema_header schema_body TOK_END_SCHEMA semicolon", - /* 251 */ "schema_decl ::= include_directive", - /* 252 */ "schema_header ::= TOK_SCHEMA TOK_IDENTIFIER semicolon", - /* 253 */ "select_type ::= TOK_SELECT TOK_LEFT_PAREN defined_type_list TOK_RIGHT_PAREN", - /* 254 */ "semicolon ::= TOK_SEMICOLON", - /* 255 */ "set_type ::= TOK_SET bound_spec TOK_OF attribute_type", - /* 256 */ "set_type ::= TOK_SET TOK_OF attribute_type", - /* 257 */ "skip_statement ::= TOK_SKIP semicolon", - /* 258 */ "statement ::= alias_statement", - /* 259 */ "statement ::= assignment_statement", - /* 260 */ "statement ::= case_statement", - /* 261 */ "statement ::= compound_statement", - /* 262 */ "statement ::= escape_statement", - /* 263 */ "statement ::= if_statement", - /* 264 */ "statement ::= proc_call_statement", - /* 265 */ "statement ::= repeat_statement", - /* 266 */ "statement ::= return_statement", - /* 267 */ "statement ::= skip_statement", - /* 268 */ "statement_rep ::=", - /* 269 */ "statement_rep ::= semicolon statement_rep", - /* 270 */ "statement_rep ::= statement statement_rep", - /* 271 */ "subsuper_decl ::=", - /* 272 */ "subsuper_decl ::= supertype_decl", - /* 273 */ "subsuper_decl ::= subtype_decl", - /* 274 */ "subsuper_decl ::= supertype_decl subtype_decl", - /* 275 */ "subtype_decl ::= TOK_SUBTYPE TOK_OF TOK_LEFT_PAREN defined_type_list TOK_RIGHT_PAREN", - /* 276 */ "supertype_decl ::= TOK_ABSTRACT TOK_SUPERTYPE", - /* 277 */ "supertype_decl ::= TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN", - /* 278 */ "supertype_decl ::= TOK_ABSTRACT TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN", - /* 279 */ "supertype_expression ::= supertype_factor", - /* 280 */ "supertype_expression ::= supertype_expression TOK_AND supertype_factor", - /* 281 */ "supertype_expression ::= supertype_expression TOK_ANDOR supertype_factor", - /* 282 */ "supertype_expression_list ::= supertype_expression", - /* 283 */ "supertype_expression_list ::= supertype_expression_list TOK_COMMA supertype_expression", - /* 284 */ "supertype_factor ::= identifier", - /* 285 */ "supertype_factor ::= oneof_op TOK_LEFT_PAREN supertype_expression_list TOK_RIGHT_PAREN", - /* 286 */ "supertype_factor ::= TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN", - /* 287 */ "type ::= aggregation_type", - /* 288 */ "type ::= basic_type", - /* 289 */ "type ::= defined_type", - /* 290 */ "type ::= select_type", - /* 291 */ "type_item_body ::= enumeration_type", - /* 292 */ "type_item_body ::= type", - /* 293 */ "type_item ::= ti_start type_item_body semicolon", - /* 294 */ "ti_start ::= TOK_IDENTIFIER TOK_EQUAL", - /* 295 */ "type_decl ::= td_start TOK_END_TYPE semicolon", - /* 296 */ "td_start ::= TOK_TYPE type_item where_rule_OPT", - /* 297 */ "general_ref ::= assignable group_ref", - /* 298 */ "general_ref ::= assignable", - /* 299 */ "unary_expression ::= aggregate_initializer", - /* 300 */ "unary_expression ::= unary_expression qualifier", - /* 301 */ "unary_expression ::= literal", - /* 302 */ "unary_expression ::= function_call", - /* 303 */ "unary_expression ::= identifier", - /* 304 */ "unary_expression ::= TOK_LEFT_PAREN expression TOK_RIGHT_PAREN", - /* 305 */ "unary_expression ::= interval", - /* 306 */ "unary_expression ::= query_expression", - /* 307 */ "unary_expression ::= TOK_NOT unary_expression", - /* 308 */ "unary_expression ::= TOK_PLUS unary_expression", - /* 309 */ "unary_expression ::= TOK_MINUS unary_expression", - /* 310 */ "unique ::=", - /* 311 */ "unique ::= TOK_UNIQUE", - /* 312 */ "qualified_attr ::= attribute_decl", - /* 313 */ "qualified_attr_list ::= qualified_attr", - /* 314 */ "qualified_attr_list ::= qualified_attr_list TOK_COMMA qualified_attr", - /* 315 */ "labelled_attrib_list ::= qualified_attr_list semicolon", - /* 316 */ "labelled_attrib_list ::= TOK_IDENTIFIER TOK_COLON qualified_attr_list semicolon", - /* 317 */ "labelled_attrib_list_list ::= labelled_attrib_list", - /* 318 */ "labelled_attrib_list_list ::= labelled_attrib_list_list labelled_attrib_list", - /* 319 */ "unique_clause ::=", - /* 320 */ "unique_clause ::= TOK_UNIQUE labelled_attrib_list_list", - /* 321 */ "until_control ::=", - /* 322 */ "until_control ::= TOK_UNTIL expression", - /* 323 */ "where_clause ::= expression semicolon", - /* 324 */ "where_clause ::= TOK_IDENTIFIER TOK_COLON expression semicolon", - /* 325 */ "where_clause_list ::= where_clause", - /* 326 */ "where_clause_list ::= where_clause_list where_clause", - /* 327 */ "where_rule ::= TOK_WHERE where_clause_list", - /* 328 */ "where_rule_OPT ::=", - /* 329 */ "where_rule_OPT ::= where_rule", - /* 330 */ "while_control ::=", - /* 331 */ "while_control ::= TOK_WHILE expression", + /* 0 */ "schema_id ::= T_SIMPLE_ID", + /* 1 */ "rule_id ::= T_SIMPLE_ID", + /* 2 */ "subtype_constraint_id ::= T_SIMPLE_ID", + /* 3 */ "parameter_id ::= T_SIMPLE_ID", + /* 4 */ "variable_id ::= T_SIMPLE_ID", + /* 5 */ "attribute_id ::= T_SIMPLE_ID", + /* 6 */ "enumeration_id ::= T_SIMPLE_ID", + /* 7 */ "type_label_id ::= T_SIMPLE_ID", + /* 8 */ "rule_label_id ::= T_SIMPLE_ID", + /* 9 */ "schema_ref ::= T_SCHEMA_REF", + /* 10 */ "function_ref ::= T_FUNCTION_REF", + /* 11 */ "procedure_ref ::= T_PROCEDURE_REF", + /* 12 */ "type_ref ::= T_TYPE_REF", + /* 13 */ "entity_ref ::= T_ENTITY_REF", + /* 14 */ "parameter_ref ::= T_PARAMETER_REF", + /* 15 */ "variable_ref ::= T_VARIABLE_REF", + /* 16 */ "constant_ref ::= T_CONSTANT_REF", + /* 17 */ "enumeration_ref ::= T_ENUMERATION_REF", + /* 18 */ "attribute_ref ::= T_SIMPLE_REF", + /* 19 */ "abstract_supertype ::= T_ABSTRACT T_SUPERTYPE T_SEMICOLON", + /* 20 */ "abstract_supertype ::=", + /* 21 */ "abstract_entity_declaration ::= T_ABSTRACT", + /* 22 */ "abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE", + /* 23 */ "abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE subtype_constraint", + /* 24 */ "actual_parameter_list ::= actual_parameter_list T_COMMA parameter", + /* 25 */ "actual_parameter_list ::= parameter", + /* 26 */ "add_like_op ::= T_PLUS", + /* 27 */ "add_like_op ::= T_MINUS", + /* 28 */ "add_like_op ::= T_OR", + /* 29 */ "add_like_op ::= T_XOR", + /* 30 */ "element_list ::= element_list T_COMMA element", + /* 31 */ "element_list ::= element", + /* 32 */ "aggregate_initializer ::= T_LBRKT element_list T_RBRKT", + /* 33 */ "aggregate_initializer ::= T_LBRKT T_RBRKT", + /* 34 */ "aggregate_source ::= simple_expression", + /* 35 */ "aggregate_type ::= T_AGGREGATE T_OF parameter_type", + /* 36 */ "aggregate_type ::= T_AGGREGATE T_COLON type_label T_OF parameter_type", + /* 37 */ "aggregation_types ::= array_type", + /* 38 */ "aggregation_types ::= bag_type", + /* 39 */ "aggregation_types ::= list_type", + /* 40 */ "aggregation_types ::= set_type", + /* 41 */ "algorithm_head ::= declaration_list constant_decl local_decl", + /* 42 */ "declaration_list ::= declaration_list declaration", + /* 43 */ "declaration_list ::=", + /* 44 */ "stmt_list ::= stmt_list stmt", + /* 45 */ "stmt_list ::= stmt", + /* 46 */ "qualifier_list ::= qualifier_list qualifier", + /* 47 */ "qualifier_list ::=", + /* 48 */ "alias_stmt ::= T_ALIAS variable_id T_FOR general_ref qualifier_list T_SEMICOLON stmt_list T_END_ALIAS T_SEMICOLON", + /* 49 */ "array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE instantiable_type", + /* 50 */ "array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL instantiable_type", + /* 51 */ "array_type ::= T_ARRAY bound_spec T_OF instantiable_type", + /* 52 */ "assignment_stmt ::= general_ref qualifier_list T_ASSIGN expression T_SEMICOLON", + /* 53 */ "attribute_decl ::= attribute_id", + /* 54 */ "attribute_decl ::= redeclared_attribute", + /* 55 */ "attribute_qualifier ::= T_DOT attribute_ref", + /* 56 */ "bag_type ::= T_BAG bound_spec T_OF instantiable_type", + /* 57 */ "bag_type ::= T_BAG T_OF instantiable_type", + /* 58 */ "binary_type ::= T_BINARY width_spec", + /* 59 */ "binary_type ::= T_BINARY", + /* 60 */ "boolean_type ::= T_BOOLEAN", + /* 61 */ "bound_1 ::= numeric_expression", + /* 62 */ "bound_2 ::= numeric_expression", + /* 63 */ "bound_spec ::= T_LBRKT bound_1 T_COLON bound_2 T_RBRKT", + /* 64 */ "built_in_constant ::= T_CONST_E", + /* 65 */ "built_in_constant ::= T_PI", + /* 66 */ "built_in_constant ::= T_SELF", + /* 67 */ "built_in_constant ::= T_QMARK", + /* 68 */ "built_in_function ::= T_ABS", + /* 69 */ "built_in_function ::= T_ACOS", + /* 70 */ "built_in_function ::= T_ASIN", + /* 71 */ "built_in_function ::= T_ATAN", + /* 72 */ "built_in_function ::= T_BLENGTH", + /* 73 */ "built_in_function ::= T_COS", + /* 74 */ "built_in_function ::= T_EXISTS", + /* 75 */ "built_in_function ::= T_EXP", + /* 76 */ "built_in_function ::= T_FORMAT", + /* 77 */ "built_in_function ::= T_HIBOUND", + /* 78 */ "built_in_function ::= T_HIINDEX", + /* 79 */ "built_in_function ::= T_LENGTH", + /* 80 */ "built_in_function ::= T_LOBOUND", + /* 81 */ "built_in_function ::= T_LOINDEX", + /* 82 */ "built_in_function ::= T_LOG", + /* 83 */ "built_in_function ::= T_LOG2", + /* 84 */ "built_in_function ::= T_LOG10", + /* 85 */ "built_in_function ::= T_NVL", + /* 86 */ "built_in_function ::= T_ODD", + /* 87 */ "built_in_function ::= T_ROLESOF", + /* 88 */ "built_in_function ::= T_SIN", + /* 89 */ "built_in_function ::= T_SIZEOF", + /* 90 */ "built_in_function ::= T_SQRT", + /* 91 */ "built_in_function ::= T_TAN", + /* 92 */ "built_in_function ::= T_TYPEOF", + /* 93 */ "built_in_function ::= T_USEDIN", + /* 94 */ "built_in_function ::= T_VALUE", + /* 95 */ "built_in_function ::= T_VALUE_IN", + /* 96 */ "built_in_function ::= T_VALUE_UNIQUE", + /* 97 */ "built_in_procedure ::= T_INSERT", + /* 98 */ "built_in_procedure ::= T_REMOVE", + /* 99 */ "case_action ::= case_label_list T_COLON stmt", + /* 100 */ "case_otherwise ::= T_OTHERWISE T_COLON stmt", + /* 101 */ "case_otherwise ::=", + /* 102 */ "case_label_list ::= case_label_list T_COMMA case_label", + /* 103 */ "case_label_list ::= case_label", + /* 104 */ "case_label ::= expression", + /* 105 */ "case_action_list ::= case_action_list case_action", + /* 106 */ "case_action_list ::=", + /* 107 */ "case_stmt ::= T_CASE selector T_OF case_action_list case_otherwise T_END_CASE T_SEMICOLON", + /* 108 */ "compound_stmt ::= T_BEGIN stmt_list T_END T_SEMICOLON", + /* 109 */ "concrete_types ::= aggregation_types", + /* 110 */ "concrete_types ::= simple_types", + /* 111 */ "concrete_types ::= type_ref", + /* 112 */ "constant_body ::= T_SIMPLE_ID T_COLON instantiable_type T_ASSIGN expression T_SEMICOLON", + /* 113 */ "constant_decl ::= T_CONSTANT constant_body_list T_END_CONSTANT T_SEMICOLON", + /* 114 */ "constant_decl ::=", + /* 115 */ "constant_body_list ::= constant_body_list constant_body", + /* 116 */ "constant_body_list ::= constant_body", + /* 117 */ "constant_factor ::= built_in_constant", + /* 118 */ "constant_factor ::= constant_ref", + /* 119 */ "constructed_types ::= enumeration_type", + /* 120 */ "constructed_types ::= select_type", + /* 121 */ "declaration ::= entity_decl", + /* 122 */ "declaration ::= function_decl", + /* 123 */ "declaration ::= procedure_decl", + /* 124 */ "declaration ::= subtype_constraint_decl", + /* 125 */ "declaration ::= type_decl", + /* 126 */ "derived_attr ::= attribute_decl T_COLON parameter_type T_ASSIGN expression T_SEMICOLON", + /* 127 */ "derive_clause ::= T_DERIVE derived_attr_list", + /* 128 */ "derive_clause ::=", + /* 129 */ "derived_attr_list ::= derived_attr_list derived_attr", + /* 130 */ "derived_attr_list ::= derived_attr", + /* 131 */ "domain_rule ::= rule_label_id T_COLON expression", + /* 132 */ "domain_rule ::= expression", + /* 133 */ "element ::= expression T_COLON repetition", + /* 134 */ "element ::= expression", + /* 135 */ "entity_body ::= explicit_attr_list derive_clause inverse_clause unique_clause where_clause", + /* 136 */ "explicit_attr_list ::= explicit_attr_list explicit_attr", + /* 137 */ "explicit_attr_list ::=", + /* 138 */ "entity_constructor ::= entity_ref T_LPAREN expression_list T_RPAREN", + /* 139 */ "entity_constructor ::= entity_ref T_LPAREN T_RPAREN", + /* 140 */ "expression_list ::= expression_list T_COMMA expression", + /* 141 */ "expression_list ::= expression", + /* 142 */ "entity_decl ::= entity_head entity_body T_END_ENTITY T_SEMICOLON", + /* 143 */ "entity_head ::= T_ENTITY T_SIMPLE_ID subsuper T_SEMICOLON", + /* 144 */ "enumeration_extension ::= T_BASED_ON type_ref T_WITH enumeration_items", + /* 145 */ "enumeration_extension ::= T_BASED_ON type_ref", + /* 146 */ "enumeration_items ::= T_LPAREN enumeration_id_list T_RPAREN", + /* 147 */ "enumeration_id_list ::= enumeration_id_list T_COMMA enumeration_id", + /* 148 */ "enumeration_id_list ::= enumeration_id", + /* 149 */ "enumeration_reference ::= type_ref T_DOT enumeration_ref", + /* 150 */ "enumeration_reference ::= enumeration_ref", + /* 151 */ "enumeration_type ::= T_EXTENSIBLE T_ENUMERATION T_OF enumeration_items", + /* 152 */ "enumeration_type ::= T_EXTENSIBLE T_ENUMERATION enumeration_extension", + /* 153 */ "enumeration_type ::= T_EXTENSIBLE T_ENUMERATION", + /* 154 */ "enumeration_type ::= T_ENUMERATION T_OF enumeration_items", + /* 155 */ "enumeration_type ::= T_ENUMERATION enumeration_extension", + /* 156 */ "enumeration_type ::= T_ENUMERATION", + /* 157 */ "escape_stmt ::= T_ESCAPE T_SEMICOLON", + /* 158 */ "explicit_attr ::= attribute_decl_list T_COLON T_OPTIONAL parameter_type T_SEMICOLON", + /* 159 */ "explicit_attr ::= attribute_decl_list T_COLON parameter_type T_SEMICOLON", + /* 160 */ "attribute_decl_list ::= attribute_decl_list T_COMMA attribute_decl", + /* 161 */ "attribute_decl_list ::= attribute_decl", + /* 162 */ "expression ::= simple_expression rel_op_extended simple_expression", + /* 163 */ "expression ::= simple_expression", + /* 164 */ "factor ::= simple_factor T_EXP simple_factor", + /* 165 */ "factor ::= simple_factor", + /* 166 */ "formal_parameter ::= parameter_id_list T_COLON parameter_type", + /* 167 */ "parameter_id_list ::= parameter_id_list T_COMMA parameter_id", + /* 168 */ "parameter_id_list ::= parameter_id", + /* 169 */ "function_call ::= built_in_function T_LPAREN actual_parameter_list T_RPAREN", + /* 170 */ "function_call ::= built_in_function", + /* 171 */ "function_call ::= function_ref T_LPAREN actual_parameter_list T_RPAREN", + /* 172 */ "function_call ::= function_ref", + /* 173 */ "function_decl ::= function_head algorithm_head stmt_list T_END_FUNCTION T_SEMICOLON", + /* 174 */ "function_head ::= T_FUNCTION T_SIMPLE_ID T_LPAREN formal_parameter_list T_RPAREN T_COLON parameter_type T_SEMICOLON", + /* 175 */ "function_head ::= T_FUNCTION T_SIMPLE_ID T_COLON parameter_type T_SEMICOLON", + /* 176 */ "formal_parameter_list ::= formal_parameter_list T_SEMICOLON formal_parameter", + /* 177 */ "formal_parameter_list ::= formal_parameter", + /* 178 */ "generalized_types ::= aggregate_type", + /* 179 */ "generalized_types ::= general_aggregation_types", + /* 180 */ "generalized_types ::= generic_entity_type", + /* 181 */ "generalized_types ::= generic_type", + /* 182 */ "general_aggregation_types ::= general_array_type", + /* 183 */ "general_aggregation_types ::= general_bag_type", + /* 184 */ "general_aggregation_types ::= general_list_type", + /* 185 */ "general_aggregation_types ::= general_set_type", + /* 186 */ "general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE parameter_type", + /* 187 */ "general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL parameter_type", + /* 188 */ "general_array_type ::= T_ARRAY bound_spec T_OF T_UNIQUE parameter_type", + /* 189 */ "general_array_type ::= T_ARRAY bound_spec T_OF parameter_type", + /* 190 */ "general_array_type ::= T_ARRAY T_OF T_OPTIONAL T_UNIQUE parameter_type", + /* 191 */ "general_array_type ::= T_ARRAY T_OF T_OPTIONAL parameter_type", + /* 192 */ "general_array_type ::= T_ARRAY T_OF T_UNIQUE parameter_type", + /* 193 */ "general_array_type ::= T_ARRAY T_OF parameter_type", + /* 194 */ "general_bag_type ::= T_BAG bound_spec T_OF parameter_type", + /* 195 */ "general_bag_type ::= T_BAG T_OF parameter_type", + /* 196 */ "general_list_type ::= T_LIST bound_spec T_OF T_UNIQUE parameter_type", + /* 197 */ "general_list_type ::= T_LIST bound_spec T_OF parameter_type", + /* 198 */ "general_list_type ::= T_LIST T_OF T_UNIQUE parameter_type", + /* 199 */ "general_list_type ::= T_LIST T_OF parameter_type", + /* 200 */ "general_ref ::= parameter_ref", + /* 201 */ "general_ref ::= variable_ref", + /* 202 */ "general_set_type ::= T_SET bound_spec T_OF parameter_type", + /* 203 */ "general_set_type ::= T_SET T_OF parameter_type", + /* 204 */ "generic_entity_type ::= T_GENERIC_ENTITY T_COLON type_label", + /* 205 */ "generic_entity_type ::= T_GENERIC_ENTITY", + /* 206 */ "generic_type ::= T_GENERIC T_COLON type_label", + /* 207 */ "generic_type ::= T_GENERIC", + /* 208 */ "group_qualifier ::= T_BACKSLASH entity_ref", + /* 209 */ "if_stmt ::= T_IF logical_expression T_THEN stmt_list T_ELSE stmt_list T_END_IF T_SEMICOLON", + /* 210 */ "if_stmt ::= T_IF logical_expression T_THEN stmt_list T_END_IF T_SEMICOLON", + /* 211 */ "increment ::= numeric_expression", + /* 212 */ "increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2 T_BY increment", + /* 213 */ "increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2", + /* 214 */ "increment_control ::=", + /* 215 */ "index ::= numeric_expression", + /* 216 */ "index_1 ::= index", + /* 217 */ "index_2 ::= index", + /* 218 */ "index_qualifier ::= T_LBRKT index_1 T_COLON index_2 T_RBRKT", + /* 219 */ "index_qualifier ::= T_LBRKT index_1 T_RBRKT", + /* 220 */ "instantiable_type ::= concrete_types", + /* 221 */ "instantiable_type ::= entity_ref", + /* 222 */ "integer_type ::= T_INTEGER", + /* 223 */ "interface_specification ::= reference_clause", + /* 224 */ "interface_specification ::= use_clause", + /* 225 */ "interval ::= T_LCURL interval_low interval_op interval_item interval_op interval_high T_RCURL", + /* 226 */ "interval_high ::= simple_expression", + /* 227 */ "interval_item ::= simple_expression", + /* 228 */ "interval_low ::= simple_expression", + /* 229 */ "interval_op ::= T_LT", + /* 230 */ "interval_op ::= T_LTEQ", + /* 231 */ "inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON", + /* 232 */ "inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON", + /* 233 */ "inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON", + /* 234 */ "inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON", + /* 235 */ "inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON", + /* 236 */ "inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON", + /* 237 */ "inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR attribute_ref T_SEMICOLON", + /* 238 */ "inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON", + /* 239 */ "inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR attribute_ref T_SEMICOLON", + /* 240 */ "inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR attribute_ref T_SEMICOLON", + /* 241 */ "inverse_clause ::= T_INVERSE inverse_attr_list", + /* 242 */ "inverse_clause ::=", + /* 243 */ "inverse_attr_list ::= inverse_attr_list inverse_attr", + /* 244 */ "inverse_attr_list ::= inverse_attr", + /* 245 */ "list_type ::= T_LIST bound_spec T_OF T_UNIQUE instantiable_type", + /* 246 */ "list_type ::= T_LIST bound_spec T_OF instantiable_type", + /* 247 */ "list_type ::= T_LIST T_OF T_UNIQUE instantiable_type", + /* 248 */ "list_type ::= T_LIST T_OF instantiable_type", + /* 249 */ "literal ::= T_BINARY_LITERAL", + /* 250 */ "literal ::= logical_literal", + /* 251 */ "literal ::= real_literal", + /* 252 */ "literal ::= string_literal", + /* 253 */ "real_literal ::= T_INTEGER_LITERAL", + /* 254 */ "real_literal ::= T_REAL_LITERAL", + /* 255 */ "local_decl ::= T_LOCAL local_variable_list T_END_LOCAL T_SEMICOLON", + /* 256 */ "local_decl ::=", + /* 257 */ "local_variable_list ::= local_variable_list local_variable", + /* 258 */ "local_variable_list ::= local_variable", + /* 259 */ "local_variable ::= variable_id_list T_COLON parameter_type T_ASSIGN expression T_SEMICOLON", + /* 260 */ "local_variable ::= variable_id_list T_COLON parameter_type T_SEMICOLON", + /* 261 */ "variable_id_list ::= variable_id_list T_COMMA variable_id", + /* 262 */ "variable_id_list ::= variable_id", + /* 263 */ "logical_expression ::= expression", + /* 264 */ "logical_literal ::= T_FALSE", + /* 265 */ "logical_literal ::= T_TRUE", + /* 266 */ "logical_literal ::= T_UNKNOWN", + /* 267 */ "logical_type ::= T_LOGICAL", + /* 268 */ "multiplication_like_op ::= T_TIMES", + /* 269 */ "multiplication_like_op ::= T_RDIV", + /* 270 */ "multiplication_like_op ::= T_IDIV", + /* 271 */ "multiplication_like_op ::= T_MOD", + /* 272 */ "multiplication_like_op ::= T_AND", + /* 273 */ "multiplication_like_op ::= T_CONCAT", + /* 274 */ "named_types ::= entity_ref", + /* 275 */ "named_types ::= type_ref", + /* 276 */ "named_type_or_rename ::= named_types T_AS T_SIMPLE_ID", + /* 277 */ "named_type_or_rename ::= named_types", + /* 278 */ "null_stmt ::= T_SEMICOLON", + /* 279 */ "number_type ::= T_NUMBER", + /* 280 */ "numeric_expression ::= simple_expression", + /* 281 */ "one_of ::= T_ONEOF T_LPAREN supertype_expression_list T_RPAREN", + /* 282 */ "supertype_expression_list ::= supertype_expression_list T_COMMA supertype_expression", + /* 283 */ "supertype_expression_list ::= supertype_expression", + /* 284 */ "parameter ::= expression", + /* 285 */ "parameter_type ::= generalized_types", + /* 286 */ "parameter_type ::= named_types", + /* 287 */ "parameter_type ::= simple_types", + /* 288 */ "population ::= entity_ref", + /* 289 */ "precision_spec ::= numeric_expression", + /* 290 */ "primary ::= literal", + /* 291 */ "primary ::= qualifiable_factor qualifier_list", + /* 292 */ "procedure_call_stmt ::= built_in_procedure T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON", + /* 293 */ "procedure_call_stmt ::= built_in_procedure T_SEMICOLON", + /* 294 */ "procedure_call_stmt ::= procedure_ref T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON", + /* 295 */ "procedure_call_stmt ::= procedure_ref T_SEMICOLON", + /* 296 */ "procedure_decl ::= procedure_head algorithm_head stmt_list T_END_PROCEDURE T_SEMICOLON", + /* 297 */ "procedure_decl ::= procedure_head algorithm_head T_END_PROCEDURE T_SEMICOLON", + /* 298 */ "procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_LPAREN varopt_formal_parameter_list T_RPAREN T_SEMICOLON", + /* 299 */ "procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_SEMICOLON", + /* 300 */ "varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON T_VAR formal_parameter", + /* 301 */ "varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON formal_parameter", + /* 302 */ "varopt_formal_parameter_list ::= T_VAR formal_parameter", + /* 303 */ "varopt_formal_parameter_list ::= formal_parameter", + /* 304 */ "qualifiable_factor ::= attribute_ref", + /* 305 */ "qualifiable_factor ::= constant_factor", + /* 306 */ "qualifiable_factor ::= function_call", + /* 307 */ "qualifiable_factor ::= general_ref", + /* 308 */ "qualifiable_factor ::= population", + /* 309 */ "qualified_attribute ::= T_SELF group_qualifier attribute_qualifier", + /* 310 */ "qualifier ::= attribute_qualifier", + /* 311 */ "qualifier ::= group_qualifier", + /* 312 */ "qualifier ::= index_qualifier", + /* 313 */ "query_expression ::= T_QUERY T_LPAREN variable_id T_ALL_IN aggregate_source T_PIPE logical_expression T_RPAREN", + /* 314 */ "real_type ::= T_REAL T_LPAREN precision_spec T_RPAREN", + /* 315 */ "real_type ::= T_REAL", + /* 316 */ "redeclared_attribute ::= qualified_attribute T_RENAMED attribute_id", + /* 317 */ "redeclared_attribute ::= qualified_attribute", + /* 318 */ "referenced_attribute ::= attribute_ref", + /* 319 */ "referenced_attribute ::= qualified_attribute", + /* 320 */ "reference_clause ::= T_REFERENCE T_FROM schema_ref T_LPAREN resource_or_rename_list T_RPAREN T_SEMICOLON", + /* 321 */ "reference_clause ::= T_REFERENCE T_FROM schema_ref T_SEMICOLON", + /* 322 */ "resource_or_rename_list ::= resource_or_rename_list T_COMMA resource_or_rename", + /* 323 */ "resource_or_rename_list ::= resource_or_rename", + /* 324 */ "rel_op ::= T_LT", + /* 325 */ "rel_op ::= T_GT", + /* 326 */ "rel_op ::= T_LTEQ", + /* 327 */ "rel_op ::= T_GTEQ", + /* 328 */ "rel_op ::= T_NEQ", + /* 329 */ "rel_op ::= T_EQ", + /* 330 */ "rel_op ::= T_INST_NEQ", + /* 331 */ "rel_op ::= T_INST_EQ", + /* 332 */ "rel_op_extended ::= rel_op", + /* 333 */ "rel_op_extended ::= T_IN", + /* 334 */ "rel_op_extended ::= T_LIKE", + /* 335 */ "rename_id ::= T_SIMPLE_ID", + /* 336 */ "repeat_control ::= increment_control while_control until_control", + /* 337 */ "repeat_stmt ::= T_REPEAT repeat_control T_SEMICOLON stmt_list T_END_REPEAT T_SEMICOLON", + /* 338 */ "repetition ::= numeric_expression", + /* 339 */ "resource_or_rename ::= resource_ref T_AS rename_id", + /* 340 */ "resource_or_rename ::= resource_ref", + /* 341 */ "resource_ref ::= constant_ref", + /* 342 */ "resource_ref ::= entity_ref", + /* 343 */ "resource_ref ::= function_ref", + /* 344 */ "resource_ref ::= procedure_ref", + /* 345 */ "resource_ref ::= type_ref", + /* 346 */ "return_stmt ::= T_RETURN T_LPAREN expression T_RPAREN T_SEMICOLON", + /* 347 */ "return_stmt ::= T_RETURN T_SEMICOLON", + /* 348 */ "rule_decl ::= rule_head algorithm_head stmt_list where_clause T_END_RULE T_SEMICOLON", + /* 349 */ "rule_decl ::= rule_head algorithm_head where_clause T_END_RULE T_SEMICOLON", + /* 350 */ "rule_head ::= T_RULE rule_id T_FOR T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON", + /* 351 */ "entity_ref_list ::= entity_ref_list T_COMMA entity_ref", + /* 352 */ "entity_ref_list ::= entity_ref", + /* 353 */ "schema_body ::= interface_specification_list constant_decl declaration_or_rule_decl_list", + /* 354 */ "interface_specification_list ::= interface_specification_list interface_specification", + /* 355 */ "interface_specification_list ::=", + /* 356 */ "declaration_or_rule_decl ::= declaration", + /* 357 */ "declaration_or_rule_decl ::= rule_decl", + /* 358 */ "declaration_or_rule_decl_list ::= declaration_or_rule_decl_list declaration_or_rule_decl", + /* 359 */ "declaration_or_rule_decl_list ::=", + /* 360 */ "schema_decl ::= T_SCHEMA schema_id schema_version_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON", + /* 361 */ "schema_decl ::= T_SCHEMA schema_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON", + /* 362 */ "schema_version_id ::= string_literal", + /* 363 */ "selector ::= expression", + /* 364 */ "select_extension ::= T_BASED_ON type_ref T_WITH select_list", + /* 365 */ "select_extension ::= T_BASED_ON type_ref", + /* 366 */ "select_list ::= T_LPAREN named_types_list T_RPAREN", + /* 367 */ "named_types_list ::= named_types_list T_COMMA named_types", + /* 368 */ "named_types_list ::= named_types", + /* 369 */ "select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_list", + /* 370 */ "select_type ::= T_EXTENSIBLE T_SELECT select_list", + /* 371 */ "select_type ::= T_SELECT select_list", + /* 372 */ "select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_extension", + /* 373 */ "select_type ::= T_EXTENSIBLE T_SELECT select_extension", + /* 374 */ "select_type ::= T_SELECT select_extension", + /* 375 */ "select_type ::= T_SELECT", + /* 376 */ "set_type ::= T_SET bound_spec T_OF instantiable_type", + /* 377 */ "set_type ::= T_SET T_OF instantiable_type", + /* 378 */ "simple_expression ::= term_list", + /* 379 */ "term_list ::= term_list add_like_op term", + /* 380 */ "term_list ::= term", + /* 381 */ "simple_factor ::= aggregate_initializer", + /* 382 */ "simple_factor ::= entity_constructor", + /* 383 */ "simple_factor ::= enumeration_reference", + /* 384 */ "simple_factor ::= interval", + /* 385 */ "simple_factor ::= query_expression", + /* 386 */ "simple_factor ::= T_LPAREN expression T_RPAREN", + /* 387 */ "simple_factor ::= primary", + /* 388 */ "simple_factor ::= T_PLUS T_LPAREN expression T_RPAREN", + /* 389 */ "simple_factor ::= T_PLUS primary", + /* 390 */ "simple_factor ::= T_MINUS T_LPAREN expression T_RPAREN", + /* 391 */ "simple_factor ::= T_MINUS primary", + /* 392 */ "simple_factor ::= T_NOT T_LPAREN expression T_RPAREN", + /* 393 */ "simple_factor ::= T_NOT primary", + /* 394 */ "simple_types ::= binary_type", + /* 395 */ "simple_types ::= boolean_type", + /* 396 */ "simple_types ::= integer_type", + /* 397 */ "simple_types ::= logical_type", + /* 398 */ "simple_types ::= number_type", + /* 399 */ "simple_types ::= real_type", + /* 400 */ "simple_types ::= string_type", + /* 401 */ "skip_stmt ::= T_SKIP T_SEMICOLON", + /* 402 */ "stmt ::= alias_stmt", + /* 403 */ "stmt ::= assignment_stmt", + /* 404 */ "stmt ::= case_stmt", + /* 405 */ "stmt ::= compound_stmt", + /* 406 */ "stmt ::= escape_stmt", + /* 407 */ "stmt ::= if_stmt", + /* 408 */ "stmt ::= null_stmt", + /* 409 */ "stmt ::= procedure_call_stmt", + /* 410 */ "stmt ::= repeat_stmt", + /* 411 */ "stmt ::= return_stmt", + /* 412 */ "stmt ::= skip_stmt", + /* 413 */ "string_literal ::= T_STRING_LITERAL", + /* 414 */ "string_literal ::= T_ENCODED_STRING_LITERAL", + /* 415 */ "string_type ::= T_STRING width_spec", + /* 416 */ "string_type ::= T_STRING", + /* 417 */ "subsuper ::= supertype_constraint subtype_declaration", + /* 418 */ "subsuper ::= supertype_constraint", + /* 419 */ "subsuper ::= subtype_declaration", + /* 420 */ "subsuper ::=", + /* 421 */ "subtype_constraint ::= T_OF T_LPAREN supertype_expression T_RPAREN", + /* 422 */ "subtype_constraint_body ::= abstract_supertype total_over supertype_expression T_SEMICOLON", + /* 423 */ "subtype_constraint_body ::= abstract_supertype total_over", + /* 424 */ "subtype_constraint_decl ::= subtype_constraint_head subtype_constraint_body T_END_SUBTYPE_CONSTRAINT T_SEMICOLON", + /* 425 */ "subtype_constraint_head ::= T_SUBTYPE_CONSTRAINT subtype_constraint_id T_FOR entity_ref T_SEMICOLON", + /* 426 */ "subtype_declaration ::= T_SUBTYPE T_OF T_LPAREN entity_ref_list T_RPAREN", + /* 427 */ "supertype_constraint ::= abstract_entity_declaration", + /* 428 */ "supertype_constraint ::= abstract_supertype_declaration", + /* 429 */ "supertype_constraint ::= supertype_rule", + /* 430 */ "supertype_expression ::= supertype_factor_list", + /* 431 */ "supertype_factor_list ::= supertype_factor_list T_ANDOR supertype_factor", + /* 432 */ "supertype_factor_list ::= supertype_factor", + /* 433 */ "supertype_factor ::= supertype_term_list", + /* 434 */ "supertype_term_list ::= supertype_term_list T_AND supertype_term", + /* 435 */ "supertype_term_list ::= supertype_term", + /* 436 */ "supertype_rule ::= T_SUPERTYPE subtype_constraint", + /* 437 */ "supertype_term ::= entity_ref", + /* 438 */ "supertype_term ::= one_of", + /* 439 */ "supertype_term ::= T_LPAREN supertype_expression T_RPAREN", + /* 440 */ "term ::= factor_list", + /* 441 */ "factor_list ::= factor_list multiplication_like_op factor", + /* 442 */ "factor_list ::= factor", + /* 443 */ "total_over ::= T_TOTAL_OVER T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON", + /* 444 */ "total_over ::=", + /* 445 */ "type_head ::= T_TYPE T_SIMPLE_ID T_EQ", + /* 446 */ "type_decl ::= type_head underlying_type T_SEMICOLON where_clause T_END_TYPE T_SEMICOLON", + /* 447 */ "type_label ::= type_label_id", + /* 448 */ "underlying_type ::= concrete_types", + /* 449 */ "underlying_type ::= constructed_types", + /* 450 */ "unique_clause ::= T_UNIQUE unique_rule_list", + /* 451 */ "unique_clause ::=", + /* 452 */ "unique_rule_list ::= unique_rule_list unique_rule T_SEMICOLON", + /* 453 */ "unique_rule_list ::= unique_rule T_SEMICOLON", + /* 454 */ "unique_rule ::= rule_label_id T_COLON referenced_attribute_list", + /* 455 */ "unique_rule ::= referenced_attribute_list", + /* 456 */ "referenced_attribute_list ::= referenced_attribute_list T_COMMA referenced_attribute", + /* 457 */ "referenced_attribute_list ::= referenced_attribute", + /* 458 */ "until_control ::= T_UNTIL logical_expression", + /* 459 */ "until_control ::=", + /* 460 */ "use_clause ::= T_USE T_FROM schema_ref T_LPAREN named_type_or_rename_list T_RPAREN T_SEMICOLON", + /* 461 */ "use_clause ::= T_USE T_FROM schema_ref T_SEMICOLON", + /* 462 */ "named_type_or_rename_list ::= named_type_or_rename_list T_COMMA named_type_or_rename", + /* 463 */ "named_type_or_rename_list ::= named_type_or_rename", + /* 464 */ "where_clause ::= T_WHERE domain_rule_list", + /* 465 */ "where_clause ::=", + /* 466 */ "domain_rule_list ::= domain_rule T_SEMICOLON", + /* 467 */ "domain_rule_list ::= domain_rule_list domain_rule T_SEMICOLON", + /* 468 */ "while_control ::= T_WHILE logical_expression", + /* 469 */ "while_control ::=", + /* 470 */ "width ::= numeric_expression", + /* 471 */ "width_spec ::= T_LPAREN width T_RPAREN T_FIXED", + /* 472 */ "width_spec ::= T_LPAREN width T_RPAREN", + /* 473 */ "express_file ::= schema_decl_list", + /* 474 */ "schema_decl_list ::= schema_decl_list schema_decl", + /* 475 */ "schema_decl_list ::= schema_decl", }; #endif /* NDEBUG */ #if YYSTACKDEPTH<=0 /* -** Try to increase the size of the parser stack. +** Try to increase the size of the parser stack. Return the number +** of errors. Return 0 on success. */ -static void yyGrowStack(yyParser *p){ +static int yyGrowStack(yyParser *p){ int newSize; + int idx; yyStackEntry *pNew; - newSize = p->yystksz*2 + 256; - pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); + newSize = p->yystksz*2 + 100; + idx = p->yytos ? (int)(p->yytos - p->yystack) : 0; + if( p->yystack==&p->yystk0 ){ + pNew = malloc(newSize*sizeof(pNew[0])); + if( pNew ) pNew[0] = p->yystk0; + }else{ + pNew = realloc(p->yystack, newSize*sizeof(pNew[0])); + } if( pNew ){ p->yystack = pNew; - p->yystksz = newSize; + p->yytos = &p->yystack[idx]; #ifndef NDEBUG if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sStack grows to %d entries!\n", - yyTracePrompt, p->yystksz); + fprintf(yyTraceFILE,"%sStack grows from %d to %d entries.\n", + yyTracePrompt, p->yystksz, newSize); } #endif + p->yystksz = newSize; } + return pNew==0; } #endif +/* Datatype of the argument to the memory allocated passed as the +** second argument to yyparseAlloc() below. This can be changed by +** putting an appropriate #define in the %include section of the input +** grammar. +*/ +#ifndef YYMALLOCARGTYPE +# define YYMALLOCARGTYPE size_t +#endif + +/* Initialize a new parser that has already been allocated. +*/ +void yyparseInit(void *yypParser){ + yyParser *pParser = (yyParser*)yypParser; +#ifdef YYTRACKMAXSTACKDEPTH + pParser->yyhwm = 0; +#endif +#if YYSTACKDEPTH<=0 + pParser->yytos = NULL; + pParser->yystack = NULL; + pParser->yystksz = 0; + if( yyGrowStack(pParser) ){ + pParser->yystack = &pParser->yystk0; + pParser->yystksz = 1; + } +#endif +#ifndef YYNOERRORRECOVERY + pParser->yyerrcnt = -1; +#endif + pParser->yytos = pParser->yystack; + pParser->yystack[0].stateno = 0; + pParser->yystack[0].major = 0; +#if YYSTACKDEPTH>0 + pParser->yystackEnd = &pParser->yystack[YYSTACKDEPTH-1]; +#endif +} + +#ifndef yyparse_ENGINEALWAYSONSTACK /* ** This function allocates a new parser. ** The only argument is a pointer to a function which works like @@ -1496,36 +7397,30 @@ static void yyGrowStack(yyParser *p){ ** ** Outputs: ** A pointer to a parser. This pointer is used in subsequent calls -** to Parse and ParseFree. +** to yyparse and yyparseFree. */ -void *ParseAlloc(void *(*mallocProc)(size_t)){ +void *yyparseAlloc(void *(*mallocProc)(YYMALLOCARGTYPE)){ yyParser *pParser; - pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) ); - if( pParser ){ - pParser->yyidx = -1; -#ifdef YYTRACKMAXSTACKDEPTH - pParser->yyidxMax = 0; -#endif -#if YYSTACKDEPTH<=0 - pParser->yystack = NULL; - pParser->yystksz = 0; - yyGrowStack(pParser); -#endif - } + pParser = (yyParser*)(*mallocProc)( (YYMALLOCARGTYPE)sizeof(yyParser) ); + if( pParser ) yyparseInit(pParser); return pParser; } +#endif /* yyparse_ENGINEALWAYSONSTACK */ -/* The following function deletes the value associated with a -** symbol. The symbol can be either a terminal or nonterminal. -** "yymajor" is the symbol code, and "yypminor" is a pointer to -** the value. + +/* The following function deletes the "minor type" or semantic value +** associated with a symbol. The symbol can be either a terminal +** or nonterminal. "yymajor" is the symbol code, and "yypminor" is +** a pointer to the value to be deleted. The code used to do the +** deletions is derived from the %destructor and/or %token_destructor +** directives of the input grammar. */ static void yy_destructor( yyParser *yypParser, /* The parser */ YYCODETYPE yymajor, /* Type code for object to destroy */ YYMINORTYPE *yypminor /* The object to be destroyed */ ){ - ParseARG_FETCH; + yyparseARG_FETCH; switch( yymajor ){ /* Here is inserted the actions which take place when a ** terminal or non-terminal is destroyed. This can happen @@ -1534,20 +7429,11 @@ static void yy_destructor( ** being destroyed before it is finished parsing. ** ** Note: during a reduce, the only symbols destroyed are those - ** which appear on the RHS of the rule, but which are not used + ** which appear on the RHS of the rule, but which are *not* used ** inside the C code. */ - case 122: /* statement_list */ -{ -#line 124 "expparse.y" - - if (parseData.scanner == NULL) { - (yypminor->yy0).string = (char*)NULL; - } - -#line 1549 "expparse.c" -} - break; +/********* Begin destructor definitions ***************************************/ +/********* End destructor definitions *****************************************/ default: break; /* If no destructor action specified: do nothing */ } } @@ -1557,88 +7443,125 @@ static void yy_destructor( ** ** If there is a destructor routine associated with the token which ** is popped from the stack, then call it. -** -** Return the major token number for the symbol popped. */ -static int yy_pop_parser_stack(yyParser *pParser){ - YYCODETYPE yymajor; +static void yy_pop_parser_stack(yyParser *pParser){ yyStackEntry *yytos; - - if( pParser->yyidx<0 ) return 0; - - yytos = &pParser->yystack[pParser->yyidx]; - + assert( pParser->yytos!=0 ); + assert( pParser->yytos > pParser->yystack ); + yytos = pParser->yytos--; #ifndef NDEBUG - if( yyTraceFILE && pParser->yyidx>=0 ){ + if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sPopping %s\n", yyTracePrompt, yyTokenName[yytos->major]); } #endif - yymajor = yytos->major; - yy_destructor(pParser, yymajor, &yytos->minor); - pParser->yyidx--; - return yymajor; + yy_destructor(pParser, yytos->major, &yytos->minor); +} + +/* +** Clear all secondary memory allocations from the parser +*/ +void yyparseFinalize(void *p){ + yyParser *pParser = (yyParser*)p; + while( pParser->yytos>pParser->yystack ) yy_pop_parser_stack(pParser); +#if YYSTACKDEPTH<=0 + if( pParser->yystack!=&pParser->yystk0 ) free(pParser->yystack); +#endif } +#ifndef yyparse_ENGINEALWAYSONSTACK /* -** Deallocate and destroy a parser. Destructors are all called for +** Deallocate and destroy a parser. Destructors are called for ** all stack elements before shutting the parser down. ** -** Inputs: -**
    -**
  • A pointer to the parser. This should be a pointer -** obtained from ParseAlloc. -**
  • A pointer to a function used to reclaim memory obtained -** from malloc. -**
+** If the YYPARSEFREENEVERNULL macro exists (for example because it +** is defined in a %include section of the input grammar) then it is +** assumed that the input pointer is never NULL. */ -void ParseFree( +void yyparseFree( void *p, /* The parser to be deleted */ void (*freeProc)(void*) /* Function used to reclaim memory */ ){ - yyParser *pParser = (yyParser*)p; - if( pParser==0 ) return; - while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser); -#if YYSTACKDEPTH<=0 - free(pParser->yystack); +#ifndef YYPARSEFREENEVERNULL + if( p==0 ) return; #endif - (*freeProc)((void*)pParser); + yyparseFinalize(p); + (*freeProc)(p); } +#endif /* yyparse_ENGINEALWAYSONSTACK */ /* ** Return the peak depth of the stack for a parser. */ #ifdef YYTRACKMAXSTACKDEPTH -int ParseStackPeak(void *p){ +int yyparseStackPeak(void *p){ yyParser *pParser = (yyParser*)p; - return pParser->yyidxMax; + return pParser->yyhwm; +} +#endif + +/* This array of booleans keeps track of the parser statement +** coverage. The element yycoverage[X][Y] is set when the parser +** is in state X and has a lookahead token Y. In a well-tested +** systems, every element of this matrix should end up being set. +*/ +#if defined(YYCOVERAGE) +static unsigned char yycoverage[YYNSTATE][YYNTOKEN]; +#endif + +/* +** Write into out a description of every state/lookahead combination that +** +** (1) has not been used by the parser, and +** (2) is not a syntax error. +** +** Return the number of missed state/lookahead combinations. +*/ +#if defined(YYCOVERAGE) +int yyparseCoverage(FILE *out){ + int stateno, iLookAhead, i; + int nMissed = 0; + for(stateno=0; statenoyystack[pParser->yyidx].stateno; + int stateno = pParser->yytos->stateno; - if( stateno>YY_SHIFT_COUNT - || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){ - return yy_default[stateno]; - } - assert( iLookAhead!=YYNOCODE ); - i += iLookAhead; - if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){ - if( iLookAhead>0 ){ + if( stateno>YY_MAX_SHIFT ) return stateno; + assert( stateno <= YY_SHIFT_COUNT ); +#if defined(YYCOVERAGE) + yycoverage[stateno][iLookAhead] = 1; +#endif + do{ + i = yy_shift_ofst[stateno]; + assert( i>=0 ); + assert( i+YYNTOKEN<=(int)sizeof(yy_lookahead)/sizeof(yy_lookahead[0]) ); + assert( iLookAhead!=YYNOCODE ); + assert( iLookAhead < YYNTOKEN ); + i += iLookAhead; + if( yy_lookahead[i]!=iLookAhead ){ #ifdef YYFALLBACK YYCODETYPE iFallback; /* Fallback token */ if( iLookAhead=YY_ACTTAB_COUNT j0 ){ #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n", - yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]); + yyTracePrompt, yyTokenName[iLookAhead], + yyTokenName[YYWILDCARD]); } #endif /* NDEBUG */ return yy_action[j]; } } #endif /* YYWILDCARD */ + return yy_default[stateno]; + }else{ + return yy_action[i]; } - return yy_default[stateno]; - }else{ - return yy_action[i]; - } + }while(1); } /* ** Find the appropriate action for a parser given the non-terminal ** look-ahead token iLookAhead. -** -** If the look-ahead token is YYNOCODE, then check to see if the action is -** independent of the look-ahead. If it is, return the action, otherwise -** return YY_NO_ACTION. */ static int yy_find_reduce_action( int stateno, /* Current state number */ @@ -1702,7 +7624,6 @@ static int yy_find_reduce_action( assert( stateno<=YY_REDUCE_COUNT ); #endif i = yy_reduce_ofst[stateno]; - assert( i!=YY_REDUCE_USE_DFLT ); assert( iLookAhead!=YYNOCODE ); i += iLookAhead; #ifdef YYERRORSYMBOL @@ -1719,24 +7640,41 @@ static int yy_find_reduce_action( /* ** The following routine is called if the stack overflows. */ -static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){ - ParseARG_FETCH; - yypParser->yyidx--; +static void yyStackOverflow(yyParser *yypParser){ + yyparseARG_FETCH; #ifndef NDEBUG if( yyTraceFILE ){ fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt); } #endif - while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); + while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); /* Here code is inserted which will execute if the parser ** stack every overflows */ -#line 2440 "expparse.y" +/******** Begin %stack_overflow code ******************************************/ +/******** End %stack_overflow code ********************************************/ + yyparseARG_STORE; /* Suppress warning about unused %extra_argument var */ +} - fprintf(stderr, "Express parser experienced stack overflow.\n"); - fprintf(stderr, "Last token had value %x\n", yypMinor->yy0.val); -#line 1738 "expparse.c" - ParseARG_STORE; /* Suppress warning about unused %extra_argument var */ +/* +** Print tracing information for a SHIFT action +*/ +#ifndef NDEBUG +static void yyTraceShift(yyParser *yypParser, int yyNewState, const char *zTag){ + if( yyTraceFILE ){ + if( yyNewStateyytos->major], + yyNewState); + }else{ + fprintf(yyTraceFILE,"%s%s '%s', pending reduce %d\n", + yyTracePrompt, zTag, yyTokenName[yypParser->yytos->major], + yyNewState - YY_MIN_REDUCE); + } + } } +#else +# define yyTraceShift(X,Y,Z) +#endif /* ** Perform a shift action. @@ -1745,384 +7683,524 @@ static void yy_shift( yyParser *yypParser, /* The parser to be shifted */ int yyNewState, /* The new state to shift in */ int yyMajor, /* The major token to shift in */ - YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */ + yyparseTOKENTYPE yyMinor /* The minor token to shift in */ ){ yyStackEntry *yytos; - yypParser->yyidx++; + yypParser->yytos++; #ifdef YYTRACKMAXSTACKDEPTH - if( yypParser->yyidx>yypParser->yyidxMax ){ - yypParser->yyidxMax = yypParser->yyidx; + if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ + yypParser->yyhwm++; + assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack) ); } #endif #if YYSTACKDEPTH>0 - if( yypParser->yyidx>=YYSTACKDEPTH ){ - yyStackOverflow(yypParser, yypMinor); + if( yypParser->yytos>yypParser->yystackEnd ){ + yypParser->yytos--; + yyStackOverflow(yypParser); return; } #else - if( yypParser->yyidx>=yypParser->yystksz ){ - yyGrowStack(yypParser); - if( yypParser->yyidx>=yypParser->yystksz ){ - yyStackOverflow(yypParser, yypMinor); + if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz] ){ + if( yyGrowStack(yypParser) ){ + yypParser->yytos--; + yyStackOverflow(yypParser); return; } } #endif - yytos = &yypParser->yystack[yypParser->yyidx]; + if( yyNewState > YY_MAX_SHIFT ){ + yyNewState += YY_MIN_REDUCE - YY_MIN_SHIFTREDUCE; + } + yytos = yypParser->yytos; yytos->stateno = (YYACTIONTYPE)yyNewState; yytos->major = (YYCODETYPE)yyMajor; - yytos->minor = *yypMinor; -#ifndef NDEBUG - if( yyTraceFILE && yypParser->yyidx>0 ){ - int i; - fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState); - fprintf(yyTraceFILE,"%sStack:",yyTracePrompt); - for(i=1; i<=yypParser->yyidx; i++) - fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]); - fprintf(yyTraceFILE,"\n"); - } -#endif + yytos->minor.yy0 = yyMinor; + yyTraceShift(yypParser, yyNewState, "Shift"); } /* The following table contains information about every rule that ** is used during the reduce. */ static const struct { - YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ - unsigned char nrhs; /* Number of right-hand side symbols in the rule */ + YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */ + signed char nrhs; /* Negative of the number of RHS symbols in the rule */ } yyRuleInfo[] = { - { 156, 2 }, - { 233, 1 }, - { 233, 1 }, - { 233, 1 }, - { 232, 0 }, - { 232, 2 }, - { 157, 3 }, - { 157, 2 }, - { 127, 2 }, - { 127, 3 }, - { 126, 1 }, - { 158, 1 }, - { 158, 3 }, - { 158, 3 }, - { 158, 5 }, - { 217, 3 }, - { 217, 5 }, - { 218, 1 }, - { 218, 1 }, - { 218, 1 }, - { 218, 1 }, - { 195, 9 }, - { 238, 0 }, - { 219, 5 }, - { 128, 2 }, - { 128, 1 }, - { 196, 4 }, - { 211, 1 }, - { 211, 1 }, - { 211, 1 }, - { 159, 0 }, - { 159, 2 }, - { 220, 4 }, - { 220, 3 }, - { 215, 1 }, - { 215, 2 }, - { 215, 2 }, - { 215, 1 }, - { 215, 1 }, - { 215, 3 }, - { 215, 3 }, - { 239, 0 }, - { 239, 2 }, - { 240, 1 }, - { 240, 1 }, - { 240, 1 }, - { 130, 0 }, - { 130, 2 }, - { 226, 5 }, - { 123, 3 }, - { 160, 0 }, - { 160, 2 }, - { 161, 2 }, - { 162, 1 }, - { 162, 3 }, - { 124, 0 }, - { 124, 3 }, - { 197, 6 }, - { 198, 4 }, - { 131, 1 }, - { 131, 1 }, - { 243, 6 }, - { 244, 0 }, - { 244, 2 }, - { 235, 4 }, - { 234, 1 }, - { 234, 1 }, - { 234, 1 }, - { 234, 1 }, - { 164, 0 }, - { 164, 2 }, - { 229, 5 }, - { 183, 1 }, - { 183, 2 }, - { 125, 5 }, - { 245, 6 }, - { 249, 2 }, - { 250, 3 }, - { 199, 2 }, - { 129, 1 }, - { 129, 5 }, - { 182, 1 }, - { 182, 3 }, - { 190, 0 }, - { 190, 1 }, - { 165, 5 }, - { 251, 1 }, - { 252, 1 }, - { 252, 2 }, - { 132, 1 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 132, 3 }, - { 144, 1 }, - { 144, 3 }, - { 144, 3 }, - { 144, 3 }, - { 144, 3 }, - { 144, 3 }, - { 144, 3 }, - { 144, 3 }, - { 144, 3 }, - { 166, 1 }, - { 166, 3 }, - { 191, 0 }, - { 191, 1 }, - { 167, 4 }, - { 168, 0 }, - { 168, 3 }, - { 169, 1 }, - { 169, 3 }, - { 213, 1 }, - { 213, 1 }, - { 213, 1 }, - { 213, 1 }, - { 133, 2 }, - { 246, 4 }, - { 149, 6 }, - { 150, 1 }, - { 254, 1 }, - { 255, 1 }, - { 209, 1 }, - { 209, 1 }, - { 221, 1 }, - { 221, 4 }, - { 221, 5 }, - { 221, 3 }, - { 221, 4 }, - { 221, 4 }, - { 221, 5 }, - { 221, 3 }, - { 221, 4 }, - { 214, 1 }, - { 214, 3 }, - { 170, 1 }, - { 170, 3 }, - { 136, 1 }, - { 136, 1 }, - { 136, 1 }, - { 200, 6 }, - { 200, 8 }, - { 241, 3 }, - { 256, 6 }, - { 137, 2 }, - { 257, 1 }, - { 257, 3 }, - { 258, 1 }, - { 258, 3 }, - { 259, 3 }, - { 260, 4 }, - { 260, 3 }, - { 261, 3 }, - { 262, 4 }, - { 262, 3 }, - { 263, 3 }, - { 264, 1 }, - { 264, 1 }, - { 265, 0 }, - { 265, 2 }, - { 138, 7 }, - { 224, 1 }, - { 224, 3 }, - { 224, 4 }, - { 224, 4 }, - { 224, 3 }, - { 180, 1 }, - { 180, 2 }, - { 228, 6 }, - { 181, 0 }, - { 181, 2 }, - { 227, 5 }, - { 222, 5 }, - { 222, 4 }, - { 139, 1 }, - { 139, 1 }, - { 139, 1 }, - { 139, 1 }, - { 139, 1 }, - { 139, 1 }, - { 139, 1 }, - { 140, 2 }, - { 267, 4 }, - { 267, 5 }, - { 268, 0 }, - { 268, 2 }, - { 236, 6 }, - { 269, 0 }, - { 270, 0 }, - { 212, 1 }, - { 171, 1 }, - { 171, 3 }, - { 172, 3 }, - { 271, 1 }, - { 188, 0 }, - { 188, 1 }, - { 188, 1 }, - { 188, 2 }, - { 188, 2 }, - { 189, 0 }, - { 189, 1 }, - { 141, 0 }, - { 141, 3 }, - { 201, 3 }, - { 201, 2 }, - { 247, 4 }, - { 154, 5 }, - { 272, 1 }, - { 155, 0 }, - { 210, 1 }, - { 210, 1 }, - { 135, 2 }, - { 194, 2 }, - { 194, 2 }, - { 194, 3 }, - { 194, 5 }, - { 142, 3 }, - { 143, 6 }, - { 187, 1 }, - { 187, 1 }, - { 187, 1 }, - { 187, 1 }, - { 187, 1 }, - { 187, 1 }, - { 187, 1 }, - { 187, 1 }, - { 202, 8 }, - { 202, 7 }, - { 203, 2 }, - { 203, 5 }, - { 266, 1 }, - { 242, 5 }, - { 230, 1 }, - { 185, 1 }, - { 185, 3 }, - { 151, 4 }, - { 152, 5 }, - { 153, 0 }, - { 273, 2 }, - { 273, 3 }, - { 253, 4 }, - { 253, 1 }, - { 274, 3 }, - { 216, 4 }, - { 237, 1 }, - { 223, 4 }, - { 223, 3 }, - { 204, 2 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 205, 1 }, - { 173, 0 }, - { 173, 2 }, - { 173, 2 }, - { 206, 0 }, - { 206, 1 }, - { 206, 1 }, - { 206, 2 }, - { 174, 5 }, - { 207, 2 }, - { 207, 5 }, - { 207, 6 }, - { 146, 1 }, - { 146, 3 }, - { 146, 3 }, - { 177, 1 }, - { 177, 3 }, - { 208, 1 }, - { 208, 4 }, - { 208, 3 }, - { 225, 1 }, - { 225, 1 }, - { 225, 1 }, - { 225, 1 }, - { 275, 1 }, - { 275, 1 }, - { 276, 3 }, - { 277, 2 }, - { 248, 3 }, - { 278, 3 }, - { 134, 2 }, - { 134, 1 }, - { 145, 1 }, - { 145, 2 }, - { 145, 1 }, - { 145, 1 }, - { 145, 1 }, - { 145, 3 }, - { 145, 1 }, - { 145, 1 }, - { 145, 2 }, - { 145, 2 }, - { 145, 2 }, - { 192, 0 }, - { 192, 1 }, - { 193, 1 }, - { 186, 1 }, - { 186, 3 }, - { 179, 2 }, - { 179, 4 }, - { 178, 1 }, - { 178, 2 }, - { 184, 0 }, - { 184, 2 }, - { 147, 0 }, - { 147, 2 }, - { 231, 2 }, - { 231, 4 }, - { 163, 1 }, - { 163, 2 }, - { 175, 2 }, - { 176, 0 }, - { 176, 1 }, - { 148, 0 }, - { 148, 2 }, + { 179, -1 }, /* (0) schema_id ::= T_SIMPLE_ID */ + { 180, -1 }, /* (1) rule_id ::= T_SIMPLE_ID */ + { 181, -1 }, /* (2) subtype_constraint_id ::= T_SIMPLE_ID */ + { 182, -1 }, /* (3) parameter_id ::= T_SIMPLE_ID */ + { 183, -1 }, /* (4) variable_id ::= T_SIMPLE_ID */ + { 184, -1 }, /* (5) attribute_id ::= T_SIMPLE_ID */ + { 185, -1 }, /* (6) enumeration_id ::= T_SIMPLE_ID */ + { 186, -1 }, /* (7) type_label_id ::= T_SIMPLE_ID */ + { 187, -1 }, /* (8) rule_label_id ::= T_SIMPLE_ID */ + { 188, -1 }, /* (9) schema_ref ::= T_SCHEMA_REF */ + { 189, -1 }, /* (10) function_ref ::= T_FUNCTION_REF */ + { 190, -1 }, /* (11) procedure_ref ::= T_PROCEDURE_REF */ + { 191, -1 }, /* (12) type_ref ::= T_TYPE_REF */ + { 192, -1 }, /* (13) entity_ref ::= T_ENTITY_REF */ + { 193, -1 }, /* (14) parameter_ref ::= T_PARAMETER_REF */ + { 194, -1 }, /* (15) variable_ref ::= T_VARIABLE_REF */ + { 195, -1 }, /* (16) constant_ref ::= T_CONSTANT_REF */ + { 196, -1 }, /* (17) enumeration_ref ::= T_ENUMERATION_REF */ + { 197, -1 }, /* (18) attribute_ref ::= T_SIMPLE_REF */ + { 198, -3 }, /* (19) abstract_supertype ::= T_ABSTRACT T_SUPERTYPE T_SEMICOLON */ + { 198, 0 }, /* (20) abstract_supertype ::= */ + { 199, -1 }, /* (21) abstract_entity_declaration ::= T_ABSTRACT */ + { 200, -2 }, /* (22) abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE */ + { 200, -3 }, /* (23) abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE subtype_constraint */ + { 202, -3 }, /* (24) actual_parameter_list ::= actual_parameter_list T_COMMA parameter */ + { 202, -1 }, /* (25) actual_parameter_list ::= parameter */ + { 204, -1 }, /* (26) add_like_op ::= T_PLUS */ + { 204, -1 }, /* (27) add_like_op ::= T_MINUS */ + { 204, -1 }, /* (28) add_like_op ::= T_OR */ + { 204, -1 }, /* (29) add_like_op ::= T_XOR */ + { 205, -3 }, /* (30) element_list ::= element_list T_COMMA element */ + { 205, -1 }, /* (31) element_list ::= element */ + { 207, -3 }, /* (32) aggregate_initializer ::= T_LBRKT element_list T_RBRKT */ + { 207, -2 }, /* (33) aggregate_initializer ::= T_LBRKT T_RBRKT */ + { 208, -1 }, /* (34) aggregate_source ::= simple_expression */ + { 210, -3 }, /* (35) aggregate_type ::= T_AGGREGATE T_OF parameter_type */ + { 210, -5 }, /* (36) aggregate_type ::= T_AGGREGATE T_COLON type_label T_OF parameter_type */ + { 213, -1 }, /* (37) aggregation_types ::= array_type */ + { 213, -1 }, /* (38) aggregation_types ::= bag_type */ + { 213, -1 }, /* (39) aggregation_types ::= list_type */ + { 213, -1 }, /* (40) aggregation_types ::= set_type */ + { 218, -3 }, /* (41) algorithm_head ::= declaration_list constant_decl local_decl */ + { 219, -2 }, /* (42) declaration_list ::= declaration_list declaration */ + { 219, 0 }, /* (43) declaration_list ::= */ + { 223, -2 }, /* (44) stmt_list ::= stmt_list stmt */ + { 223, -1 }, /* (45) stmt_list ::= stmt */ + { 225, -2 }, /* (46) qualifier_list ::= qualifier_list qualifier */ + { 225, 0 }, /* (47) qualifier_list ::= */ + { 227, -9 }, /* (48) alias_stmt ::= T_ALIAS variable_id T_FOR general_ref qualifier_list T_SEMICOLON stmt_list T_END_ALIAS T_SEMICOLON */ + { 214, -6 }, /* (49) array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE instantiable_type */ + { 214, -5 }, /* (50) array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL instantiable_type */ + { 214, -4 }, /* (51) array_type ::= T_ARRAY bound_spec T_OF instantiable_type */ + { 231, -5 }, /* (52) assignment_stmt ::= general_ref qualifier_list T_ASSIGN expression T_SEMICOLON */ + { 232, -1 }, /* (53) attribute_decl ::= attribute_id */ + { 232, -1 }, /* (54) attribute_decl ::= redeclared_attribute */ + { 234, -2 }, /* (55) attribute_qualifier ::= T_DOT attribute_ref */ + { 215, -4 }, /* (56) bag_type ::= T_BAG bound_spec T_OF instantiable_type */ + { 215, -3 }, /* (57) bag_type ::= T_BAG T_OF instantiable_type */ + { 235, -2 }, /* (58) binary_type ::= T_BINARY width_spec */ + { 235, -1 }, /* (59) binary_type ::= T_BINARY */ + { 237, -1 }, /* (60) boolean_type ::= T_BOOLEAN */ + { 238, -1 }, /* (61) bound_1 ::= numeric_expression */ + { 240, -1 }, /* (62) bound_2 ::= numeric_expression */ + { 229, -5 }, /* (63) bound_spec ::= T_LBRKT bound_1 T_COLON bound_2 T_RBRKT */ + { 241, -1 }, /* (64) built_in_constant ::= T_CONST_E */ + { 241, -1 }, /* (65) built_in_constant ::= T_PI */ + { 241, -1 }, /* (66) built_in_constant ::= T_SELF */ + { 241, -1 }, /* (67) built_in_constant ::= T_QMARK */ + { 242, -1 }, /* (68) built_in_function ::= T_ABS */ + { 242, -1 }, /* (69) built_in_function ::= T_ACOS */ + { 242, -1 }, /* (70) built_in_function ::= T_ASIN */ + { 242, -1 }, /* (71) built_in_function ::= T_ATAN */ + { 242, -1 }, /* (72) built_in_function ::= T_BLENGTH */ + { 242, -1 }, /* (73) built_in_function ::= T_COS */ + { 242, -1 }, /* (74) built_in_function ::= T_EXISTS */ + { 242, -1 }, /* (75) built_in_function ::= T_EXP */ + { 242, -1 }, /* (76) built_in_function ::= T_FORMAT */ + { 242, -1 }, /* (77) built_in_function ::= T_HIBOUND */ + { 242, -1 }, /* (78) built_in_function ::= T_HIINDEX */ + { 242, -1 }, /* (79) built_in_function ::= T_LENGTH */ + { 242, -1 }, /* (80) built_in_function ::= T_LOBOUND */ + { 242, -1 }, /* (81) built_in_function ::= T_LOINDEX */ + { 242, -1 }, /* (82) built_in_function ::= T_LOG */ + { 242, -1 }, /* (83) built_in_function ::= T_LOG2 */ + { 242, -1 }, /* (84) built_in_function ::= T_LOG10 */ + { 242, -1 }, /* (85) built_in_function ::= T_NVL */ + { 242, -1 }, /* (86) built_in_function ::= T_ODD */ + { 242, -1 }, /* (87) built_in_function ::= T_ROLESOF */ + { 242, -1 }, /* (88) built_in_function ::= T_SIN */ + { 242, -1 }, /* (89) built_in_function ::= T_SIZEOF */ + { 242, -1 }, /* (90) built_in_function ::= T_SQRT */ + { 242, -1 }, /* (91) built_in_function ::= T_TAN */ + { 242, -1 }, /* (92) built_in_function ::= T_TYPEOF */ + { 242, -1 }, /* (93) built_in_function ::= T_USEDIN */ + { 242, -1 }, /* (94) built_in_function ::= T_VALUE */ + { 242, -1 }, /* (95) built_in_function ::= T_VALUE_IN */ + { 242, -1 }, /* (96) built_in_function ::= T_VALUE_UNIQUE */ + { 243, -1 }, /* (97) built_in_procedure ::= T_INSERT */ + { 243, -1 }, /* (98) built_in_procedure ::= T_REMOVE */ + { 174, -3 }, /* (99) case_action ::= case_label_list T_COLON stmt */ + { 175, -3 }, /* (100) case_otherwise ::= T_OTHERWISE T_COLON stmt */ + { 175, 0 }, /* (101) case_otherwise ::= */ + { 177, -3 }, /* (102) case_label_list ::= case_label_list T_COMMA case_label */ + { 177, -1 }, /* (103) case_label_list ::= case_label */ + { 244, -1 }, /* (104) case_label ::= expression */ + { 176, -2 }, /* (105) case_action_list ::= case_action_list case_action */ + { 176, 0 }, /* (106) case_action_list ::= */ + { 245, -7 }, /* (107) case_stmt ::= T_CASE selector T_OF case_action_list case_otherwise T_END_CASE T_SEMICOLON */ + { 247, -4 }, /* (108) compound_stmt ::= T_BEGIN stmt_list T_END T_SEMICOLON */ + { 248, -1 }, /* (109) concrete_types ::= aggregation_types */ + { 248, -1 }, /* (110) concrete_types ::= simple_types */ + { 248, -1 }, /* (111) concrete_types ::= type_ref */ + { 250, -6 }, /* (112) constant_body ::= T_SIMPLE_ID T_COLON instantiable_type T_ASSIGN expression T_SEMICOLON */ + { 220, -4 }, /* (113) constant_decl ::= T_CONSTANT constant_body_list T_END_CONSTANT T_SEMICOLON */ + { 220, 0 }, /* (114) constant_decl ::= */ + { 251, -2 }, /* (115) constant_body_list ::= constant_body_list constant_body */ + { 251, -1 }, /* (116) constant_body_list ::= constant_body */ + { 252, -1 }, /* (117) constant_factor ::= built_in_constant */ + { 252, -1 }, /* (118) constant_factor ::= constant_ref */ + { 253, -1 }, /* (119) constructed_types ::= enumeration_type */ + { 253, -1 }, /* (120) constructed_types ::= select_type */ + { 222, -1 }, /* (121) declaration ::= entity_decl */ + { 222, -1 }, /* (122) declaration ::= function_decl */ + { 222, -1 }, /* (123) declaration ::= procedure_decl */ + { 222, -1 }, /* (124) declaration ::= subtype_constraint_decl */ + { 222, -1 }, /* (125) declaration ::= type_decl */ + { 261, -6 }, /* (126) derived_attr ::= attribute_decl T_COLON parameter_type T_ASSIGN expression T_SEMICOLON */ + { 262, -2 }, /* (127) derive_clause ::= T_DERIVE derived_attr_list */ + { 262, 0 }, /* (128) derive_clause ::= */ + { 263, -2 }, /* (129) derived_attr_list ::= derived_attr_list derived_attr */ + { 263, -1 }, /* (130) derived_attr_list ::= derived_attr */ + { 264, -3 }, /* (131) domain_rule ::= rule_label_id T_COLON expression */ + { 264, -1 }, /* (132) domain_rule ::= expression */ + { 206, -3 }, /* (133) element ::= expression T_COLON repetition */ + { 206, -1 }, /* (134) element ::= expression */ + { 266, -5 }, /* (135) entity_body ::= explicit_attr_list derive_clause inverse_clause unique_clause where_clause */ + { 267, -2 }, /* (136) explicit_attr_list ::= explicit_attr_list explicit_attr */ + { 267, 0 }, /* (137) explicit_attr_list ::= */ + { 272, -4 }, /* (138) entity_constructor ::= entity_ref T_LPAREN expression_list T_RPAREN */ + { 272, -3 }, /* (139) entity_constructor ::= entity_ref T_LPAREN T_RPAREN */ + { 273, -3 }, /* (140) expression_list ::= expression_list T_COMMA expression */ + { 273, -1 }, /* (141) expression_list ::= expression */ + { 256, -4 }, /* (142) entity_decl ::= entity_head entity_body T_END_ENTITY T_SEMICOLON */ + { 274, -4 }, /* (143) entity_head ::= T_ENTITY T_SIMPLE_ID subsuper T_SEMICOLON */ + { 276, -4 }, /* (144) enumeration_extension ::= T_BASED_ON type_ref T_WITH enumeration_items */ + { 276, -2 }, /* (145) enumeration_extension ::= T_BASED_ON type_ref */ + { 277, -3 }, /* (146) enumeration_items ::= T_LPAREN enumeration_id_list T_RPAREN */ + { 278, -3 }, /* (147) enumeration_id_list ::= enumeration_id_list T_COMMA enumeration_id */ + { 278, -1 }, /* (148) enumeration_id_list ::= enumeration_id */ + { 279, -3 }, /* (149) enumeration_reference ::= type_ref T_DOT enumeration_ref */ + { 279, -1 }, /* (150) enumeration_reference ::= enumeration_ref */ + { 254, -4 }, /* (151) enumeration_type ::= T_EXTENSIBLE T_ENUMERATION T_OF enumeration_items */ + { 254, -3 }, /* (152) enumeration_type ::= T_EXTENSIBLE T_ENUMERATION enumeration_extension */ + { 254, -2 }, /* (153) enumeration_type ::= T_EXTENSIBLE T_ENUMERATION */ + { 254, -3 }, /* (154) enumeration_type ::= T_ENUMERATION T_OF enumeration_items */ + { 254, -2 }, /* (155) enumeration_type ::= T_ENUMERATION enumeration_extension */ + { 254, -1 }, /* (156) enumeration_type ::= T_ENUMERATION */ + { 280, -2 }, /* (157) escape_stmt ::= T_ESCAPE T_SEMICOLON */ + { 271, -5 }, /* (158) explicit_attr ::= attribute_decl_list T_COLON T_OPTIONAL parameter_type T_SEMICOLON */ + { 271, -4 }, /* (159) explicit_attr ::= attribute_decl_list T_COLON parameter_type T_SEMICOLON */ + { 281, -3 }, /* (160) attribute_decl_list ::= attribute_decl_list T_COMMA attribute_decl */ + { 281, -1 }, /* (161) attribute_decl_list ::= attribute_decl */ + { 178, -3 }, /* (162) expression ::= simple_expression rel_op_extended simple_expression */ + { 178, -1 }, /* (163) expression ::= simple_expression */ + { 283, -3 }, /* (164) factor ::= simple_factor T_EXP simple_factor */ + { 283, -1 }, /* (165) factor ::= simple_factor */ + { 285, -3 }, /* (166) formal_parameter ::= parameter_id_list T_COLON parameter_type */ + { 286, -3 }, /* (167) parameter_id_list ::= parameter_id_list T_COMMA parameter_id */ + { 286, -1 }, /* (168) parameter_id_list ::= parameter_id */ + { 287, -4 }, /* (169) function_call ::= built_in_function T_LPAREN actual_parameter_list T_RPAREN */ + { 287, -1 }, /* (170) function_call ::= built_in_function */ + { 287, -4 }, /* (171) function_call ::= function_ref T_LPAREN actual_parameter_list T_RPAREN */ + { 287, -1 }, /* (172) function_call ::= function_ref */ + { 257, -5 }, /* (173) function_decl ::= function_head algorithm_head stmt_list T_END_FUNCTION T_SEMICOLON */ + { 288, -8 }, /* (174) function_head ::= T_FUNCTION T_SIMPLE_ID T_LPAREN formal_parameter_list T_RPAREN T_COLON parameter_type T_SEMICOLON */ + { 288, -5 }, /* (175) function_head ::= T_FUNCTION T_SIMPLE_ID T_COLON parameter_type T_SEMICOLON */ + { 289, -3 }, /* (176) formal_parameter_list ::= formal_parameter_list T_SEMICOLON formal_parameter */ + { 289, -1 }, /* (177) formal_parameter_list ::= formal_parameter */ + { 290, -1 }, /* (178) generalized_types ::= aggregate_type */ + { 290, -1 }, /* (179) generalized_types ::= general_aggregation_types */ + { 290, -1 }, /* (180) generalized_types ::= generic_entity_type */ + { 290, -1 }, /* (181) generalized_types ::= generic_type */ + { 291, -1 }, /* (182) general_aggregation_types ::= general_array_type */ + { 291, -1 }, /* (183) general_aggregation_types ::= general_bag_type */ + { 291, -1 }, /* (184) general_aggregation_types ::= general_list_type */ + { 291, -1 }, /* (185) general_aggregation_types ::= general_set_type */ + { 294, -6 }, /* (186) general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE parameter_type */ + { 294, -5 }, /* (187) general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL parameter_type */ + { 294, -5 }, /* (188) general_array_type ::= T_ARRAY bound_spec T_OF T_UNIQUE parameter_type */ + { 294, -4 }, /* (189) general_array_type ::= T_ARRAY bound_spec T_OF parameter_type */ + { 294, -5 }, /* (190) general_array_type ::= T_ARRAY T_OF T_OPTIONAL T_UNIQUE parameter_type */ + { 294, -4 }, /* (191) general_array_type ::= T_ARRAY T_OF T_OPTIONAL parameter_type */ + { 294, -4 }, /* (192) general_array_type ::= T_ARRAY T_OF T_UNIQUE parameter_type */ + { 294, -3 }, /* (193) general_array_type ::= T_ARRAY T_OF parameter_type */ + { 295, -4 }, /* (194) general_bag_type ::= T_BAG bound_spec T_OF parameter_type */ + { 295, -3 }, /* (195) general_bag_type ::= T_BAG T_OF parameter_type */ + { 296, -5 }, /* (196) general_list_type ::= T_LIST bound_spec T_OF T_UNIQUE parameter_type */ + { 296, -4 }, /* (197) general_list_type ::= T_LIST bound_spec T_OF parameter_type */ + { 296, -4 }, /* (198) general_list_type ::= T_LIST T_OF T_UNIQUE parameter_type */ + { 296, -3 }, /* (199) general_list_type ::= T_LIST T_OF parameter_type */ + { 228, -1 }, /* (200) general_ref ::= parameter_ref */ + { 228, -1 }, /* (201) general_ref ::= variable_ref */ + { 297, -4 }, /* (202) general_set_type ::= T_SET bound_spec T_OF parameter_type */ + { 297, -3 }, /* (203) general_set_type ::= T_SET T_OF parameter_type */ + { 292, -3 }, /* (204) generic_entity_type ::= T_GENERIC_ENTITY T_COLON type_label */ + { 292, -1 }, /* (205) generic_entity_type ::= T_GENERIC_ENTITY */ + { 293, -3 }, /* (206) generic_type ::= T_GENERIC T_COLON type_label */ + { 293, -1 }, /* (207) generic_type ::= T_GENERIC */ + { 298, -2 }, /* (208) group_qualifier ::= T_BACKSLASH entity_ref */ + { 299, -8 }, /* (209) if_stmt ::= T_IF logical_expression T_THEN stmt_list T_ELSE stmt_list T_END_IF T_SEMICOLON */ + { 299, -6 }, /* (210) if_stmt ::= T_IF logical_expression T_THEN stmt_list T_END_IF T_SEMICOLON */ + { 301, -1 }, /* (211) increment ::= numeric_expression */ + { 302, -7 }, /* (212) increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2 T_BY increment */ + { 302, -5 }, /* (213) increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2 */ + { 302, 0 }, /* (214) increment_control ::= */ + { 303, -1 }, /* (215) index ::= numeric_expression */ + { 304, -1 }, /* (216) index_1 ::= index */ + { 305, -1 }, /* (217) index_2 ::= index */ + { 306, -5 }, /* (218) index_qualifier ::= T_LBRKT index_1 T_COLON index_2 T_RBRKT */ + { 306, -3 }, /* (219) index_qualifier ::= T_LBRKT index_1 T_RBRKT */ + { 230, -1 }, /* (220) instantiable_type ::= concrete_types */ + { 230, -1 }, /* (221) instantiable_type ::= entity_ref */ + { 307, -1 }, /* (222) integer_type ::= T_INTEGER */ + { 308, -1 }, /* (223) interface_specification ::= reference_clause */ + { 308, -1 }, /* (224) interface_specification ::= use_clause */ + { 311, -7 }, /* (225) interval ::= T_LCURL interval_low interval_op interval_item interval_op interval_high T_RCURL */ + { 315, -1 }, /* (226) interval_high ::= simple_expression */ + { 314, -1 }, /* (227) interval_item ::= simple_expression */ + { 312, -1 }, /* (228) interval_low ::= simple_expression */ + { 313, -1 }, /* (229) interval_op ::= T_LT */ + { 313, -1 }, /* (230) interval_op ::= T_LTEQ */ + { 316, -11 }, /* (231) inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ + { 316, -10 }, /* (232) inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ + { 316, -11 }, /* (233) inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ + { 316, -10 }, /* (234) inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ + { 316, -8 }, /* (235) inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ + { 316, -9 }, /* (236) inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ + { 316, -8 }, /* (237) inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ + { 316, -9 }, /* (238) inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ + { 316, -8 }, /* (239) inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ + { 316, -6 }, /* (240) inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR attribute_ref T_SEMICOLON */ + { 268, -2 }, /* (241) inverse_clause ::= T_INVERSE inverse_attr_list */ + { 268, 0 }, /* (242) inverse_clause ::= */ + { 317, -2 }, /* (243) inverse_attr_list ::= inverse_attr_list inverse_attr */ + { 317, -1 }, /* (244) inverse_attr_list ::= inverse_attr */ + { 216, -5 }, /* (245) list_type ::= T_LIST bound_spec T_OF T_UNIQUE instantiable_type */ + { 216, -4 }, /* (246) list_type ::= T_LIST bound_spec T_OF instantiable_type */ + { 216, -4 }, /* (247) list_type ::= T_LIST T_OF T_UNIQUE instantiable_type */ + { 216, -3 }, /* (248) list_type ::= T_LIST T_OF instantiable_type */ + { 318, -1 }, /* (249) literal ::= T_BINARY_LITERAL */ + { 318, -1 }, /* (250) literal ::= logical_literal */ + { 318, -1 }, /* (251) literal ::= real_literal */ + { 318, -1 }, /* (252) literal ::= string_literal */ + { 320, -1 }, /* (253) real_literal ::= T_INTEGER_LITERAL */ + { 320, -1 }, /* (254) real_literal ::= T_REAL_LITERAL */ + { 221, -4 }, /* (255) local_decl ::= T_LOCAL local_variable_list T_END_LOCAL T_SEMICOLON */ + { 221, 0 }, /* (256) local_decl ::= */ + { 322, -2 }, /* (257) local_variable_list ::= local_variable_list local_variable */ + { 322, -1 }, /* (258) local_variable_list ::= local_variable */ + { 323, -6 }, /* (259) local_variable ::= variable_id_list T_COLON parameter_type T_ASSIGN expression T_SEMICOLON */ + { 323, -4 }, /* (260) local_variable ::= variable_id_list T_COLON parameter_type T_SEMICOLON */ + { 324, -3 }, /* (261) variable_id_list ::= variable_id_list T_COMMA variable_id */ + { 324, -1 }, /* (262) variable_id_list ::= variable_id */ + { 300, -1 }, /* (263) logical_expression ::= expression */ + { 319, -1 }, /* (264) logical_literal ::= T_FALSE */ + { 319, -1 }, /* (265) logical_literal ::= T_TRUE */ + { 319, -1 }, /* (266) logical_literal ::= T_UNKNOWN */ + { 325, -1 }, /* (267) logical_type ::= T_LOGICAL */ + { 326, -1 }, /* (268) multiplication_like_op ::= T_TIMES */ + { 326, -1 }, /* (269) multiplication_like_op ::= T_RDIV */ + { 326, -1 }, /* (270) multiplication_like_op ::= T_IDIV */ + { 326, -1 }, /* (271) multiplication_like_op ::= T_MOD */ + { 326, -1 }, /* (272) multiplication_like_op ::= T_AND */ + { 326, -1 }, /* (273) multiplication_like_op ::= T_CONCAT */ + { 327, -1 }, /* (274) named_types ::= entity_ref */ + { 327, -1 }, /* (275) named_types ::= type_ref */ + { 328, -3 }, /* (276) named_type_or_rename ::= named_types T_AS T_SIMPLE_ID */ + { 328, -1 }, /* (277) named_type_or_rename ::= named_types */ + { 329, -1 }, /* (278) null_stmt ::= T_SEMICOLON */ + { 330, -1 }, /* (279) number_type ::= T_NUMBER */ + { 239, -1 }, /* (280) numeric_expression ::= simple_expression */ + { 331, -4 }, /* (281) one_of ::= T_ONEOF T_LPAREN supertype_expression_list T_RPAREN */ + { 332, -3 }, /* (282) supertype_expression_list ::= supertype_expression_list T_COMMA supertype_expression */ + { 332, -1 }, /* (283) supertype_expression_list ::= supertype_expression */ + { 203, -1 }, /* (284) parameter ::= expression */ + { 211, -1 }, /* (285) parameter_type ::= generalized_types */ + { 211, -1 }, /* (286) parameter_type ::= named_types */ + { 211, -1 }, /* (287) parameter_type ::= simple_types */ + { 334, -1 }, /* (288) population ::= entity_ref */ + { 335, -1 }, /* (289) precision_spec ::= numeric_expression */ + { 336, -1 }, /* (290) primary ::= literal */ + { 336, -2 }, /* (291) primary ::= qualifiable_factor qualifier_list */ + { 338, -5 }, /* (292) procedure_call_stmt ::= built_in_procedure T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON */ + { 338, -2 }, /* (293) procedure_call_stmt ::= built_in_procedure T_SEMICOLON */ + { 338, -5 }, /* (294) procedure_call_stmt ::= procedure_ref T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON */ + { 338, -2 }, /* (295) procedure_call_stmt ::= procedure_ref T_SEMICOLON */ + { 258, -5 }, /* (296) procedure_decl ::= procedure_head algorithm_head stmt_list T_END_PROCEDURE T_SEMICOLON */ + { 258, -4 }, /* (297) procedure_decl ::= procedure_head algorithm_head T_END_PROCEDURE T_SEMICOLON */ + { 339, -6 }, /* (298) procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_LPAREN varopt_formal_parameter_list T_RPAREN T_SEMICOLON */ + { 339, -3 }, /* (299) procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_SEMICOLON */ + { 340, -4 }, /* (300) varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON T_VAR formal_parameter */ + { 340, -3 }, /* (301) varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON formal_parameter */ + { 340, -2 }, /* (302) varopt_formal_parameter_list ::= T_VAR formal_parameter */ + { 340, -1 }, /* (303) varopt_formal_parameter_list ::= formal_parameter */ + { 337, -1 }, /* (304) qualifiable_factor ::= attribute_ref */ + { 337, -1 }, /* (305) qualifiable_factor ::= constant_factor */ + { 337, -1 }, /* (306) qualifiable_factor ::= function_call */ + { 337, -1 }, /* (307) qualifiable_factor ::= general_ref */ + { 337, -1 }, /* (308) qualifiable_factor ::= population */ + { 341, -3 }, /* (309) qualified_attribute ::= T_SELF group_qualifier attribute_qualifier */ + { 226, -1 }, /* (310) qualifier ::= attribute_qualifier */ + { 226, -1 }, /* (311) qualifier ::= group_qualifier */ + { 226, -1 }, /* (312) qualifier ::= index_qualifier */ + { 342, -8 }, /* (313) query_expression ::= T_QUERY T_LPAREN variable_id T_ALL_IN aggregate_source T_PIPE logical_expression T_RPAREN */ + { 343, -4 }, /* (314) real_type ::= T_REAL T_LPAREN precision_spec T_RPAREN */ + { 343, -1 }, /* (315) real_type ::= T_REAL */ + { 233, -3 }, /* (316) redeclared_attribute ::= qualified_attribute T_RENAMED attribute_id */ + { 233, -1 }, /* (317) redeclared_attribute ::= qualified_attribute */ + { 344, -1 }, /* (318) referenced_attribute ::= attribute_ref */ + { 344, -1 }, /* (319) referenced_attribute ::= qualified_attribute */ + { 309, -7 }, /* (320) reference_clause ::= T_REFERENCE T_FROM schema_ref T_LPAREN resource_or_rename_list T_RPAREN T_SEMICOLON */ + { 309, -4 }, /* (321) reference_clause ::= T_REFERENCE T_FROM schema_ref T_SEMICOLON */ + { 345, -3 }, /* (322) resource_or_rename_list ::= resource_or_rename_list T_COMMA resource_or_rename */ + { 345, -1 }, /* (323) resource_or_rename_list ::= resource_or_rename */ + { 347, -1 }, /* (324) rel_op ::= T_LT */ + { 347, -1 }, /* (325) rel_op ::= T_GT */ + { 347, -1 }, /* (326) rel_op ::= T_LTEQ */ + { 347, -1 }, /* (327) rel_op ::= T_GTEQ */ + { 347, -1 }, /* (328) rel_op ::= T_NEQ */ + { 347, -1 }, /* (329) rel_op ::= T_EQ */ + { 347, -1 }, /* (330) rel_op ::= T_INST_NEQ */ + { 347, -1 }, /* (331) rel_op ::= T_INST_EQ */ + { 282, -1 }, /* (332) rel_op_extended ::= rel_op */ + { 282, -1 }, /* (333) rel_op_extended ::= T_IN */ + { 282, -1 }, /* (334) rel_op_extended ::= T_LIKE */ + { 348, -1 }, /* (335) rename_id ::= T_SIMPLE_ID */ + { 349, -3 }, /* (336) repeat_control ::= increment_control while_control until_control */ + { 352, -6 }, /* (337) repeat_stmt ::= T_REPEAT repeat_control T_SEMICOLON stmt_list T_END_REPEAT T_SEMICOLON */ + { 265, -1 }, /* (338) repetition ::= numeric_expression */ + { 346, -3 }, /* (339) resource_or_rename ::= resource_ref T_AS rename_id */ + { 346, -1 }, /* (340) resource_or_rename ::= resource_ref */ + { 353, -1 }, /* (341) resource_ref ::= constant_ref */ + { 353, -1 }, /* (342) resource_ref ::= entity_ref */ + { 353, -1 }, /* (343) resource_ref ::= function_ref */ + { 353, -1 }, /* (344) resource_ref ::= procedure_ref */ + { 353, -1 }, /* (345) resource_ref ::= type_ref */ + { 354, -5 }, /* (346) return_stmt ::= T_RETURN T_LPAREN expression T_RPAREN T_SEMICOLON */ + { 354, -2 }, /* (347) return_stmt ::= T_RETURN T_SEMICOLON */ + { 355, -6 }, /* (348) rule_decl ::= rule_head algorithm_head stmt_list where_clause T_END_RULE T_SEMICOLON */ + { 355, -5 }, /* (349) rule_decl ::= rule_head algorithm_head where_clause T_END_RULE T_SEMICOLON */ + { 356, -7 }, /* (350) rule_head ::= T_RULE rule_id T_FOR T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON */ + { 357, -3 }, /* (351) entity_ref_list ::= entity_ref_list T_COMMA entity_ref */ + { 357, -1 }, /* (352) entity_ref_list ::= entity_ref */ + { 358, -3 }, /* (353) schema_body ::= interface_specification_list constant_decl declaration_or_rule_decl_list */ + { 359, -2 }, /* (354) interface_specification_list ::= interface_specification_list interface_specification */ + { 359, 0 }, /* (355) interface_specification_list ::= */ + { 361, -1 }, /* (356) declaration_or_rule_decl ::= declaration */ + { 361, -1 }, /* (357) declaration_or_rule_decl ::= rule_decl */ + { 360, -2 }, /* (358) declaration_or_rule_decl_list ::= declaration_or_rule_decl_list declaration_or_rule_decl */ + { 360, 0 }, /* (359) declaration_or_rule_decl_list ::= */ + { 362, -7 }, /* (360) schema_decl ::= T_SCHEMA schema_id schema_version_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON */ + { 362, -6 }, /* (361) schema_decl ::= T_SCHEMA schema_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON */ + { 363, -1 }, /* (362) schema_version_id ::= string_literal */ + { 246, -1 }, /* (363) selector ::= expression */ + { 364, -4 }, /* (364) select_extension ::= T_BASED_ON type_ref T_WITH select_list */ + { 364, -2 }, /* (365) select_extension ::= T_BASED_ON type_ref */ + { 365, -3 }, /* (366) select_list ::= T_LPAREN named_types_list T_RPAREN */ + { 366, -3 }, /* (367) named_types_list ::= named_types_list T_COMMA named_types */ + { 366, -1 }, /* (368) named_types_list ::= named_types */ + { 255, -4 }, /* (369) select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_list */ + { 255, -3 }, /* (370) select_type ::= T_EXTENSIBLE T_SELECT select_list */ + { 255, -2 }, /* (371) select_type ::= T_SELECT select_list */ + { 255, -4 }, /* (372) select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_extension */ + { 255, -3 }, /* (373) select_type ::= T_EXTENSIBLE T_SELECT select_extension */ + { 255, -2 }, /* (374) select_type ::= T_SELECT select_extension */ + { 255, -1 }, /* (375) select_type ::= T_SELECT */ + { 217, -4 }, /* (376) set_type ::= T_SET bound_spec T_OF instantiable_type */ + { 217, -3 }, /* (377) set_type ::= T_SET T_OF instantiable_type */ + { 209, -1 }, /* (378) simple_expression ::= term_list */ + { 367, -3 }, /* (379) term_list ::= term_list add_like_op term */ + { 367, -1 }, /* (380) term_list ::= term */ + { 284, -1 }, /* (381) simple_factor ::= aggregate_initializer */ + { 284, -1 }, /* (382) simple_factor ::= entity_constructor */ + { 284, -1 }, /* (383) simple_factor ::= enumeration_reference */ + { 284, -1 }, /* (384) simple_factor ::= interval */ + { 284, -1 }, /* (385) simple_factor ::= query_expression */ + { 284, -3 }, /* (386) simple_factor ::= T_LPAREN expression T_RPAREN */ + { 284, -1 }, /* (387) simple_factor ::= primary */ + { 284, -4 }, /* (388) simple_factor ::= T_PLUS T_LPAREN expression T_RPAREN */ + { 284, -2 }, /* (389) simple_factor ::= T_PLUS primary */ + { 284, -4 }, /* (390) simple_factor ::= T_MINUS T_LPAREN expression T_RPAREN */ + { 284, -2 }, /* (391) simple_factor ::= T_MINUS primary */ + { 284, -4 }, /* (392) simple_factor ::= T_NOT T_LPAREN expression T_RPAREN */ + { 284, -2 }, /* (393) simple_factor ::= T_NOT primary */ + { 249, -1 }, /* (394) simple_types ::= binary_type */ + { 249, -1 }, /* (395) simple_types ::= boolean_type */ + { 249, -1 }, /* (396) simple_types ::= integer_type */ + { 249, -1 }, /* (397) simple_types ::= logical_type */ + { 249, -1 }, /* (398) simple_types ::= number_type */ + { 249, -1 }, /* (399) simple_types ::= real_type */ + { 249, -1 }, /* (400) simple_types ::= string_type */ + { 370, -2 }, /* (401) skip_stmt ::= T_SKIP T_SEMICOLON */ + { 224, -1 }, /* (402) stmt ::= alias_stmt */ + { 224, -1 }, /* (403) stmt ::= assignment_stmt */ + { 224, -1 }, /* (404) stmt ::= case_stmt */ + { 224, -1 }, /* (405) stmt ::= compound_stmt */ + { 224, -1 }, /* (406) stmt ::= escape_stmt */ + { 224, -1 }, /* (407) stmt ::= if_stmt */ + { 224, -1 }, /* (408) stmt ::= null_stmt */ + { 224, -1 }, /* (409) stmt ::= procedure_call_stmt */ + { 224, -1 }, /* (410) stmt ::= repeat_stmt */ + { 224, -1 }, /* (411) stmt ::= return_stmt */ + { 224, -1 }, /* (412) stmt ::= skip_stmt */ + { 321, -1 }, /* (413) string_literal ::= T_STRING_LITERAL */ + { 321, -1 }, /* (414) string_literal ::= T_ENCODED_STRING_LITERAL */ + { 369, -2 }, /* (415) string_type ::= T_STRING width_spec */ + { 369, -1 }, /* (416) string_type ::= T_STRING */ + { 275, -2 }, /* (417) subsuper ::= supertype_constraint subtype_declaration */ + { 275, -1 }, /* (418) subsuper ::= supertype_constraint */ + { 275, -1 }, /* (419) subsuper ::= subtype_declaration */ + { 275, 0 }, /* (420) subsuper ::= */ + { 201, -4 }, /* (421) subtype_constraint ::= T_OF T_LPAREN supertype_expression T_RPAREN */ + { 373, -4 }, /* (422) subtype_constraint_body ::= abstract_supertype total_over supertype_expression T_SEMICOLON */ + { 373, -2 }, /* (423) subtype_constraint_body ::= abstract_supertype total_over */ + { 259, -4 }, /* (424) subtype_constraint_decl ::= subtype_constraint_head subtype_constraint_body T_END_SUBTYPE_CONSTRAINT T_SEMICOLON */ + { 375, -5 }, /* (425) subtype_constraint_head ::= T_SUBTYPE_CONSTRAINT subtype_constraint_id T_FOR entity_ref T_SEMICOLON */ + { 372, -5 }, /* (426) subtype_declaration ::= T_SUBTYPE T_OF T_LPAREN entity_ref_list T_RPAREN */ + { 371, -1 }, /* (427) supertype_constraint ::= abstract_entity_declaration */ + { 371, -1 }, /* (428) supertype_constraint ::= abstract_supertype_declaration */ + { 371, -1 }, /* (429) supertype_constraint ::= supertype_rule */ + { 333, -1 }, /* (430) supertype_expression ::= supertype_factor_list */ + { 377, -3 }, /* (431) supertype_factor_list ::= supertype_factor_list T_ANDOR supertype_factor */ + { 377, -1 }, /* (432) supertype_factor_list ::= supertype_factor */ + { 378, -1 }, /* (433) supertype_factor ::= supertype_term_list */ + { 379, -3 }, /* (434) supertype_term_list ::= supertype_term_list T_AND supertype_term */ + { 379, -1 }, /* (435) supertype_term_list ::= supertype_term */ + { 376, -2 }, /* (436) supertype_rule ::= T_SUPERTYPE subtype_constraint */ + { 380, -1 }, /* (437) supertype_term ::= entity_ref */ + { 380, -1 }, /* (438) supertype_term ::= one_of */ + { 380, -3 }, /* (439) supertype_term ::= T_LPAREN supertype_expression T_RPAREN */ + { 368, -1 }, /* (440) term ::= factor_list */ + { 381, -3 }, /* (441) factor_list ::= factor_list multiplication_like_op factor */ + { 381, -1 }, /* (442) factor_list ::= factor */ + { 374, -5 }, /* (443) total_over ::= T_TOTAL_OVER T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON */ + { 374, 0 }, /* (444) total_over ::= */ + { 382, -3 }, /* (445) type_head ::= T_TYPE T_SIMPLE_ID T_EQ */ + { 260, -6 }, /* (446) type_decl ::= type_head underlying_type T_SEMICOLON where_clause T_END_TYPE T_SEMICOLON */ + { 212, -1 }, /* (447) type_label ::= type_label_id */ + { 383, -1 }, /* (448) underlying_type ::= concrete_types */ + { 383, -1 }, /* (449) underlying_type ::= constructed_types */ + { 269, -2 }, /* (450) unique_clause ::= T_UNIQUE unique_rule_list */ + { 269, 0 }, /* (451) unique_clause ::= */ + { 384, -3 }, /* (452) unique_rule_list ::= unique_rule_list unique_rule T_SEMICOLON */ + { 384, -2 }, /* (453) unique_rule_list ::= unique_rule T_SEMICOLON */ + { 385, -3 }, /* (454) unique_rule ::= rule_label_id T_COLON referenced_attribute_list */ + { 385, -1 }, /* (455) unique_rule ::= referenced_attribute_list */ + { 386, -3 }, /* (456) referenced_attribute_list ::= referenced_attribute_list T_COMMA referenced_attribute */ + { 386, -1 }, /* (457) referenced_attribute_list ::= referenced_attribute */ + { 351, -2 }, /* (458) until_control ::= T_UNTIL logical_expression */ + { 351, 0 }, /* (459) until_control ::= */ + { 310, -7 }, /* (460) use_clause ::= T_USE T_FROM schema_ref T_LPAREN named_type_or_rename_list T_RPAREN T_SEMICOLON */ + { 310, -4 }, /* (461) use_clause ::= T_USE T_FROM schema_ref T_SEMICOLON */ + { 387, -3 }, /* (462) named_type_or_rename_list ::= named_type_or_rename_list T_COMMA named_type_or_rename */ + { 387, -1 }, /* (463) named_type_or_rename_list ::= named_type_or_rename */ + { 270, -2 }, /* (464) where_clause ::= T_WHERE domain_rule_list */ + { 270, 0 }, /* (465) where_clause ::= */ + { 388, -2 }, /* (466) domain_rule_list ::= domain_rule T_SEMICOLON */ + { 388, -3 }, /* (467) domain_rule_list ::= domain_rule_list domain_rule T_SEMICOLON */ + { 350, -2 }, /* (468) while_control ::= T_WHILE logical_expression */ + { 350, 0 }, /* (469) while_control ::= */ + { 389, -1 }, /* (470) width ::= numeric_expression */ + { 236, -4 }, /* (471) width_spec ::= T_LPAREN width T_RPAREN T_FIXED */ + { 236, -3 }, /* (472) width_spec ::= T_LPAREN width T_RPAREN */ + { 390, -1 }, /* (473) express_file ::= schema_decl_list */ + { 391, -2 }, /* (474) schema_decl_list ::= schema_decl_list schema_decl */ + { 391, -1 }, /* (475) schema_decl_list ::= schema_decl */ }; static void yy_accept(yyParser*); /* Forward Declaration */ @@ -2130,52 +8208,66 @@ static void yy_accept(yyParser*); /* Forward Declaration */ /* ** Perform a reduce action and the shift that must immediately ** follow the reduce. +** +** The yyLookahead and yyLookaheadToken parameters provide reduce actions +** access to the lookahead token (if any). The yyLookahead will be YYNOCODE +** if the lookahead token has already been consumed. As this procedure is +** only called from one place, optimizing compilers will in-line it, which +** means that the extra parameters have no performance impact. */ static void yy_reduce( yyParser *yypParser, /* The parser */ - int yyruleno /* Number of the rule by which to reduce */ + unsigned int yyruleno, /* Number of the rule by which to reduce */ + int yyLookahead, /* Lookahead token, or YYNOCODE if none */ + yyparseTOKENTYPE yyLookaheadToken /* Value of the lookahead token */ ){ int yygoto; /* The next state */ int yyact; /* The next action */ - YYMINORTYPE yygotominor; /* The LHS of the rule reduced */ yyStackEntry *yymsp; /* The top of the parser's stack */ int yysize; /* Amount to pop the stack */ - ParseARG_FETCH; - - yymsp = &yypParser->yystack[yypParser->yyidx]; - - if( yyruleno>=0 ) { + yyparseARG_FETCH; + (void)yyLookahead; + (void)yyLookaheadToken; + yymsp = yypParser->yytos; #ifndef NDEBUG - if ( yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0]))) { - if (yyTraceFILE) { - fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt, - yyRuleName[yyruleno]); + if( yyTraceFILE && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){ + yysize = yyRuleInfo[yyruleno].nrhs; + if( yysize ){ + fprintf(yyTraceFILE, "%sReduce %d [%s], go to state %d.\n", + yyTracePrompt, + yyruleno, yyRuleName[yyruleno], yymsp[yysize].stateno); + }else{ + fprintf(yyTraceFILE, "%sReduce %d [%s].\n", + yyTracePrompt, yyruleno, yyRuleName[yyruleno]); } - } -#endif /* NDEBUG */ - } else { - /* invalid rule number range */ - return; } +#endif /* NDEBUG */ - - /* Silence complaints from purify about yygotominor being uninitialized - ** in some cases when it is copied into the stack after the following - ** switch. yygotominor is uninitialized when a rule reduces that does - ** not set the value of its left-hand side nonterminal. Leaving the - ** value of the nonterminal uninitialized is utterly harmless as long - ** as the value is never used. So really the only thing this code - ** accomplishes is to quieten purify. - ** - ** 2007-01-16: The wireshark project (www.wireshark.org) reports that - ** without this code, their parser segfaults. I'm not sure what there - ** parser is doing to make this happen. This is the second bug report - ** from wireshark this week. Clearly they are stressing Lemon in ways - ** that it has not been previously stressed... (SQLite ticket #2172) - */ - /*memset(&yygotominor, 0, sizeof(yygotominor));*/ - yygotominor = yyzerominor; - + /* Check that the stack is large enough to grow by a single entry + ** if the RHS of the rule is empty. This ensures that there is room + ** enough on the stack to push the LHS value */ + if( yyRuleInfo[yyruleno].nrhs==0 ){ +#ifdef YYTRACKMAXSTACKDEPTH + if( (int)(yypParser->yytos - yypParser->yystack)>yypParser->yyhwm ){ + yypParser->yyhwm++; + assert( yypParser->yyhwm == (int)(yypParser->yytos - yypParser->yystack)); + } +#endif +#if YYSTACKDEPTH>0 + if( yypParser->yytos>=yypParser->yystackEnd ){ + yyStackOverflow(yypParser); + return; + } +#else + if( yypParser->yytos>=&yypParser->yystack[yypParser->yystksz-1] ){ + if( yyGrowStack(yypParser) ){ + yyStackOverflow(yypParser); + return; + } + yymsp = yypParser->yytos; + } +#endif + } switch( yyruleno ){ /* Beginning here are the reduction cases. A typical example @@ -2186,2311 +8278,573 @@ static void yy_reduce( ** #line ** break; */ - case 0: /* action_body ::= action_body_item_rep statement_rep */ - case 70: /* derive_decl ::= TOK_DERIVE derived_attribute_rep */ yytestcase(yyruleno==70); - case 180: /* inverse_clause ::= TOK_INVERSE inverse_attr_list */ yytestcase(yyruleno==180); - case 269: /* statement_rep ::= semicolon statement_rep */ yytestcase(yyruleno==269); - case 320: /* unique_clause ::= TOK_UNIQUE labelled_attrib_list_list */ yytestcase(yyruleno==320); - case 327: /* where_rule ::= TOK_WHERE where_clause_list */ yytestcase(yyruleno==327); - case 329: /* where_rule_OPT ::= where_rule */ yytestcase(yyruleno==329); -#line 297 "expparse.y" -{ - yygotominor.yy371 = yymsp[0].minor.yy371; -} -#line 2201 "expparse.c" - break; - case 1: /* action_body_item ::= declaration */ - case 2: /* action_body_item ::= constant_decl */ yytestcase(yyruleno==2); - case 3: /* action_body_item ::= local_decl */ yytestcase(yyruleno==3); - case 43: /* block_member ::= declaration */ yytestcase(yyruleno==43); - case 44: /* block_member ::= include_directive */ yytestcase(yyruleno==44); - case 45: /* block_member ::= rule_decl */ yytestcase(yyruleno==45); - case 65: /* declaration ::= entity_decl */ yytestcase(yyruleno==65); - case 66: /* declaration ::= function_decl */ yytestcase(yyruleno==66); - case 67: /* declaration ::= procedure_decl */ yytestcase(yyruleno==67); - case 68: /* declaration ::= type_decl */ yytestcase(yyruleno==68); - case 87: /* schema_decl_list ::= schema_decl */ yytestcase(yyruleno==87); - case 157: /* rename_list ::= rename */ yytestcase(yyruleno==157); - case 166: /* interface_specification ::= use_clause */ yytestcase(yyruleno==166); - case 167: /* interface_specification ::= reference_clause */ yytestcase(yyruleno==167); - case 203: /* oneof_op ::= TOK_ONEOF */ yytestcase(yyruleno==203); - case 251: /* schema_decl ::= include_directive */ yytestcase(yyruleno==251); - case 291: /* type_item_body ::= enumeration_type */ yytestcase(yyruleno==291); -#line 303 "expparse.y" -{ - yygotominor.yy0 = yymsp[0].minor.yy0; -} -#line 2224 "expparse.c" - break; - case 5: /* action_body_item_rep ::= action_body_item action_body_item_rep */ - case 42: /* block_list ::= block_list block_member */ yytestcase(yyruleno==42); - case 63: /* constant_body_list ::= constant_body constant_body_list */ yytestcase(yyruleno==63); - case 88: /* schema_decl_list ::= schema_decl_list schema_decl */ yytestcase(yyruleno==88); - case 169: /* interface_specification_list ::= interface_specification_list interface_specification */ yytestcase(yyruleno==169); - case 195: /* local_body ::= local_variable local_body */ yytestcase(yyruleno==195); - case 248: /* schema_body ::= interface_specification_list block_list */ yytestcase(yyruleno==248); -#line 320 "expparse.y" -{ - yygotominor.yy0 = yymsp[-1].minor.yy0; -} -#line 2237 "expparse.c" - break; - case 6: /* actual_parameters ::= TOK_LEFT_PAREN expression_list TOK_RIGHT_PAREN */ - case 202: /* nested_id_list ::= TOK_LEFT_PAREN id_list TOK_RIGHT_PAREN */ yytestcase(yyruleno==202); - case 275: /* subtype_decl ::= TOK_SUBTYPE TOK_OF TOK_LEFT_PAREN defined_type_list TOK_RIGHT_PAREN */ yytestcase(yyruleno==275); -#line 337 "expparse.y" -{ - yygotominor.yy371 = yymsp[-1].minor.yy371; -} -#line 2246 "expparse.c" - break; - case 7: /* actual_parameters ::= TOK_LEFT_PAREN TOK_RIGHT_PAREN */ - case 319: /* unique_clause ::= */ yytestcase(yyruleno==319); -#line 341 "expparse.y" -{ - yygotominor.yy371 = 0; -} -#line 2254 "expparse.c" - break; - case 8: /* aggregate_initializer ::= TOK_LEFT_BRACKET TOK_RIGHT_BRACKET */ -#line 347 "expparse.y" -{ - yygotominor.yy401 = EXPcreate(Type_Aggregate); - yygotominor.yy401->u.list = LISTcreate(); -} -#line 2262 "expparse.c" - break; - case 9: /* aggregate_initializer ::= TOK_LEFT_BRACKET aggregate_init_body TOK_RIGHT_BRACKET */ -#line 353 "expparse.y" -{ - yygotominor.yy401 = EXPcreate(Type_Aggregate); - yygotominor.yy401->u.list = yymsp[-1].minor.yy371; -} -#line 2270 "expparse.c" - break; - case 10: /* aggregate_init_element ::= expression */ - case 25: /* assignable ::= identifier */ yytestcase(yyruleno==25); - case 47: /* by_expression ::= TOK_BY expression */ yytestcase(yyruleno==47); - case 89: /* expression ::= simple_expression */ yytestcase(yyruleno==89); - case 104: /* simple_expression ::= unary_expression */ yytestcase(yyruleno==104); - case 154: /* initializer ::= TOK_ASSIGNMENT expression */ yytestcase(yyruleno==154); - case 190: /* literal ::= constant */ yytestcase(yyruleno==190); - case 191: /* local_initializer ::= TOK_ASSIGNMENT expression */ yytestcase(yyruleno==191); - case 298: /* general_ref ::= assignable */ yytestcase(yyruleno==298); - case 299: /* unary_expression ::= aggregate_initializer */ yytestcase(yyruleno==299); - case 301: /* unary_expression ::= literal */ yytestcase(yyruleno==301); - case 302: /* unary_expression ::= function_call */ yytestcase(yyruleno==302); - case 303: /* unary_expression ::= identifier */ yytestcase(yyruleno==303); - case 305: /* unary_expression ::= interval */ yytestcase(yyruleno==305); - case 306: /* unary_expression ::= query_expression */ yytestcase(yyruleno==306); - case 308: /* unary_expression ::= TOK_PLUS unary_expression */ yytestcase(yyruleno==308); - case 312: /* qualified_attr ::= attribute_decl */ yytestcase(yyruleno==312); - case 322: /* until_control ::= TOK_UNTIL expression */ yytestcase(yyruleno==322); - case 331: /* while_control ::= TOK_WHILE expression */ yytestcase(yyruleno==331); -#line 359 "expparse.y" -{ - yygotominor.yy401 = yymsp[0].minor.yy401; -} -#line 2295 "expparse.c" - break; - case 11: /* aggregate_init_body ::= aggregate_init_element */ - case 113: /* expression_list ::= expression */ yytestcase(yyruleno==113); - case 282: /* supertype_expression_list ::= supertype_expression */ yytestcase(yyruleno==282); - case 313: /* qualified_attr_list ::= qualified_attr */ yytestcase(yyruleno==313); -#line 364 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); -} -#line 2306 "expparse.c" - break; - case 12: /* aggregate_init_body ::= aggregate_init_element TOK_COLON expression */ -#line 369 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[-2].minor.yy401); - - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); - - yymsp[0].minor.yy401->type = Type_Repeat; -} -#line 2318 "expparse.c" - break; - case 13: /* aggregate_init_body ::= aggregate_init_body TOK_COMMA aggregate_init_element */ -#line 379 "expparse.y" -{ - yygotominor.yy371 = yymsp[-2].minor.yy371; - - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); +/********** Begin reduce actions **********************************************/ + default: + /* (0) schema_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==0); + /* (1) rule_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==1); + /* (2) subtype_constraint_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==2); + /* (3) parameter_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==3); + /* (4) variable_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==4); + /* (5) attribute_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==5); + /* (6) enumeration_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==6); + /* (7) type_label_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==7); + /* (8) rule_label_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==8); + /* (9) schema_ref ::= T_SCHEMA_REF */ yytestcase(yyruleno==9); + /* (10) function_ref ::= T_FUNCTION_REF */ yytestcase(yyruleno==10); + /* (11) procedure_ref ::= T_PROCEDURE_REF */ yytestcase(yyruleno==11); + /* (12) type_ref ::= T_TYPE_REF */ yytestcase(yyruleno==12); + /* (13) entity_ref ::= T_ENTITY_REF */ yytestcase(yyruleno==13); + /* (14) parameter_ref ::= T_PARAMETER_REF */ yytestcase(yyruleno==14); + /* (15) variable_ref ::= T_VARIABLE_REF */ yytestcase(yyruleno==15); + /* (16) constant_ref ::= T_CONSTANT_REF */ yytestcase(yyruleno==16); + /* (17) enumeration_ref ::= T_ENUMERATION_REF */ yytestcase(yyruleno==17); + /* (18) attribute_ref ::= T_SIMPLE_REF */ yytestcase(yyruleno==18); + /* (19) abstract_supertype ::= T_ABSTRACT T_SUPERTYPE T_SEMICOLON */ yytestcase(yyruleno==19); + /* (20) abstract_supertype ::= */ yytestcase(yyruleno==20); + /* (21) abstract_entity_declaration ::= T_ABSTRACT */ yytestcase(yyruleno==21); + /* (22) abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE */ yytestcase(yyruleno==22); + /* (23) abstract_supertype_declaration ::= T_ABSTRACT T_SUPERTYPE subtype_constraint */ yytestcase(yyruleno==23); + /* (24) actual_parameter_list ::= actual_parameter_list T_COMMA parameter */ yytestcase(yyruleno==24); + /* (25) actual_parameter_list ::= parameter */ yytestcase(yyruleno==25); + /* (26) add_like_op ::= T_PLUS */ yytestcase(yyruleno==26); + /* (27) add_like_op ::= T_MINUS */ yytestcase(yyruleno==27); + /* (28) add_like_op ::= T_OR */ yytestcase(yyruleno==28); + /* (29) add_like_op ::= T_XOR */ yytestcase(yyruleno==29); + /* (30) element_list ::= element_list T_COMMA element */ yytestcase(yyruleno==30); + /* (31) element_list ::= element */ yytestcase(yyruleno==31); + /* (32) aggregate_initializer ::= T_LBRKT element_list T_RBRKT */ yytestcase(yyruleno==32); + /* (33) aggregate_initializer ::= T_LBRKT T_RBRKT */ yytestcase(yyruleno==33); + /* (34) aggregate_source ::= simple_expression */ yytestcase(yyruleno==34); + /* (35) aggregate_type ::= T_AGGREGATE T_OF parameter_type */ yytestcase(yyruleno==35); + /* (36) aggregate_type ::= T_AGGREGATE T_COLON type_label T_OF parameter_type */ yytestcase(yyruleno==36); + /* (37) aggregation_types ::= array_type */ yytestcase(yyruleno==37); + /* (38) aggregation_types ::= bag_type */ yytestcase(yyruleno==38); + /* (39) aggregation_types ::= list_type */ yytestcase(yyruleno==39); + /* (40) aggregation_types ::= set_type */ yytestcase(yyruleno==40); + /* (41) algorithm_head ::= declaration_list constant_decl local_decl */ yytestcase(yyruleno==41); + /* (42) declaration_list ::= declaration_list declaration */ yytestcase(yyruleno==42); + /* (43) declaration_list ::= */ yytestcase(yyruleno==43); + /* (44) stmt_list ::= stmt_list stmt */ yytestcase(yyruleno==44); + /* (45) stmt_list ::= stmt */ yytestcase(yyruleno==45); + /* (46) qualifier_list ::= qualifier_list qualifier */ yytestcase(yyruleno==46); + /* (47) qualifier_list ::= */ yytestcase(yyruleno==47); + /* (48) alias_stmt ::= T_ALIAS variable_id T_FOR general_ref qualifier_list T_SEMICOLON stmt_list T_END_ALIAS T_SEMICOLON */ yytestcase(yyruleno==48); + /* (49) array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE instantiable_type */ yytestcase(yyruleno==49); + /* (50) array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL instantiable_type */ yytestcase(yyruleno==50); + /* (51) array_type ::= T_ARRAY bound_spec T_OF instantiable_type */ yytestcase(yyruleno==51); + /* (52) assignment_stmt ::= general_ref qualifier_list T_ASSIGN expression T_SEMICOLON */ yytestcase(yyruleno==52); + /* (53) attribute_decl ::= attribute_id */ yytestcase(yyruleno==53); + /* (54) attribute_decl ::= redeclared_attribute */ yytestcase(yyruleno==54); + /* (55) attribute_qualifier ::= T_DOT attribute_ref */ yytestcase(yyruleno==55); + /* (56) bag_type ::= T_BAG bound_spec T_OF instantiable_type */ yytestcase(yyruleno==56); + /* (57) bag_type ::= T_BAG T_OF instantiable_type */ yytestcase(yyruleno==57); + /* (58) binary_type ::= T_BINARY width_spec */ yytestcase(yyruleno==58); + /* (59) binary_type ::= T_BINARY */ yytestcase(yyruleno==59); + /* (60) boolean_type ::= T_BOOLEAN */ yytestcase(yyruleno==60); + /* (61) bound_1 ::= numeric_expression */ yytestcase(yyruleno==61); + /* (62) bound_2 ::= numeric_expression */ yytestcase(yyruleno==62); + /* (63) bound_spec ::= T_LBRKT bound_1 T_COLON bound_2 T_RBRKT */ yytestcase(yyruleno==63); + /* (64) built_in_constant ::= T_CONST_E */ yytestcase(yyruleno==64); + /* (65) built_in_constant ::= T_PI */ yytestcase(yyruleno==65); + /* (66) built_in_constant ::= T_SELF */ yytestcase(yyruleno==66); + /* (67) built_in_constant ::= T_QMARK */ yytestcase(yyruleno==67); + /* (68) built_in_function ::= T_ABS */ yytestcase(yyruleno==68); + /* (69) built_in_function ::= T_ACOS */ yytestcase(yyruleno==69); + /* (70) built_in_function ::= T_ASIN */ yytestcase(yyruleno==70); + /* (71) built_in_function ::= T_ATAN */ yytestcase(yyruleno==71); + /* (72) built_in_function ::= T_BLENGTH */ yytestcase(yyruleno==72); + /* (73) built_in_function ::= T_COS */ yytestcase(yyruleno==73); + /* (74) built_in_function ::= T_EXISTS */ yytestcase(yyruleno==74); + /* (75) built_in_function ::= T_EXP */ yytestcase(yyruleno==75); + /* (76) built_in_function ::= T_FORMAT */ yytestcase(yyruleno==76); + /* (77) built_in_function ::= T_HIBOUND */ yytestcase(yyruleno==77); + /* (78) built_in_function ::= T_HIINDEX */ yytestcase(yyruleno==78); + /* (79) built_in_function ::= T_LENGTH */ yytestcase(yyruleno==79); + /* (80) built_in_function ::= T_LOBOUND */ yytestcase(yyruleno==80); + /* (81) built_in_function ::= T_LOINDEX */ yytestcase(yyruleno==81); + /* (82) built_in_function ::= T_LOG */ yytestcase(yyruleno==82); + /* (83) built_in_function ::= T_LOG2 */ yytestcase(yyruleno==83); + /* (84) built_in_function ::= T_LOG10 */ yytestcase(yyruleno==84); + /* (85) built_in_function ::= T_NVL */ yytestcase(yyruleno==85); + /* (86) built_in_function ::= T_ODD */ yytestcase(yyruleno==86); + /* (87) built_in_function ::= T_ROLESOF */ yytestcase(yyruleno==87); + /* (88) built_in_function ::= T_SIN */ yytestcase(yyruleno==88); + /* (89) built_in_function ::= T_SIZEOF */ yytestcase(yyruleno==89); + /* (90) built_in_function ::= T_SQRT */ yytestcase(yyruleno==90); + /* (91) built_in_function ::= T_TAN */ yytestcase(yyruleno==91); + /* (92) built_in_function ::= T_TYPEOF */ yytestcase(yyruleno==92); + /* (93) built_in_function ::= T_USEDIN */ yytestcase(yyruleno==93); + /* (94) built_in_function ::= T_VALUE */ yytestcase(yyruleno==94); + /* (95) built_in_function ::= T_VALUE_IN */ yytestcase(yyruleno==95); + /* (96) built_in_function ::= T_VALUE_UNIQUE */ yytestcase(yyruleno==96); + /* (97) built_in_procedure ::= T_INSERT */ yytestcase(yyruleno==97); + /* (98) built_in_procedure ::= T_REMOVE */ yytestcase(yyruleno==98); + /* (99) case_action ::= case_label_list T_COLON stmt */ yytestcase(yyruleno==99); + /* (100) case_otherwise ::= T_OTHERWISE T_COLON stmt */ yytestcase(yyruleno==100); + /* (101) case_otherwise ::= */ yytestcase(yyruleno==101); + /* (102) case_label_list ::= case_label_list T_COMMA case_label */ yytestcase(yyruleno==102); + /* (103) case_label_list ::= case_label */ yytestcase(yyruleno==103); + /* (104) case_label ::= expression */ yytestcase(yyruleno==104); + /* (105) case_action_list ::= case_action_list case_action */ yytestcase(yyruleno==105); + /* (106) case_action_list ::= */ yytestcase(yyruleno==106); + /* (107) case_stmt ::= T_CASE selector T_OF case_action_list case_otherwise T_END_CASE T_SEMICOLON */ yytestcase(yyruleno==107); + /* (108) compound_stmt ::= T_BEGIN stmt_list T_END T_SEMICOLON */ yytestcase(yyruleno==108); + /* (109) concrete_types ::= aggregation_types */ yytestcase(yyruleno==109); + /* (110) concrete_types ::= simple_types */ yytestcase(yyruleno==110); + /* (111) concrete_types ::= type_ref */ yytestcase(yyruleno==111); + /* (112) constant_body ::= T_SIMPLE_ID T_COLON instantiable_type T_ASSIGN expression T_SEMICOLON */ yytestcase(yyruleno==112); + /* (113) constant_decl ::= T_CONSTANT constant_body_list T_END_CONSTANT T_SEMICOLON */ yytestcase(yyruleno==113); + /* (114) constant_decl ::= */ yytestcase(yyruleno==114); + /* (115) constant_body_list ::= constant_body_list constant_body */ yytestcase(yyruleno==115); + /* (116) constant_body_list ::= constant_body */ yytestcase(yyruleno==116); + /* (117) constant_factor ::= built_in_constant */ yytestcase(yyruleno==117); + /* (118) constant_factor ::= constant_ref */ yytestcase(yyruleno==118); + /* (119) constructed_types ::= enumeration_type */ yytestcase(yyruleno==119); + /* (120) constructed_types ::= select_type */ yytestcase(yyruleno==120); + /* (121) declaration ::= entity_decl */ yytestcase(yyruleno==121); + /* (122) declaration ::= function_decl */ yytestcase(yyruleno==122); + /* (123) declaration ::= procedure_decl */ yytestcase(yyruleno==123); + /* (124) declaration ::= subtype_constraint_decl */ yytestcase(yyruleno==124); + /* (125) declaration ::= type_decl */ yytestcase(yyruleno==125); + /* (126) derived_attr ::= attribute_decl T_COLON parameter_type T_ASSIGN expression T_SEMICOLON */ yytestcase(yyruleno==126); + /* (127) derive_clause ::= T_DERIVE derived_attr_list */ yytestcase(yyruleno==127); + /* (128) derive_clause ::= */ yytestcase(yyruleno==128); + /* (129) derived_attr_list ::= derived_attr_list derived_attr */ yytestcase(yyruleno==129); + /* (130) derived_attr_list ::= derived_attr */ yytestcase(yyruleno==130); + /* (131) domain_rule ::= rule_label_id T_COLON expression */ yytestcase(yyruleno==131); + /* (132) domain_rule ::= expression */ yytestcase(yyruleno==132); + /* (133) element ::= expression T_COLON repetition */ yytestcase(yyruleno==133); + /* (134) element ::= expression */ yytestcase(yyruleno==134); + /* (135) entity_body ::= explicit_attr_list derive_clause inverse_clause unique_clause where_clause */ yytestcase(yyruleno==135); + /* (136) explicit_attr_list ::= explicit_attr_list explicit_attr */ yytestcase(yyruleno==136); + /* (137) explicit_attr_list ::= */ yytestcase(yyruleno==137); + /* (138) entity_constructor ::= entity_ref T_LPAREN expression_list T_RPAREN */ yytestcase(yyruleno==138); + /* (139) entity_constructor ::= entity_ref T_LPAREN T_RPAREN */ yytestcase(yyruleno==139); + /* (140) expression_list ::= expression_list T_COMMA expression */ yytestcase(yyruleno==140); + /* (141) expression_list ::= expression */ yytestcase(yyruleno==141); + /* (142) entity_decl ::= entity_head entity_body T_END_ENTITY T_SEMICOLON */ yytestcase(yyruleno==142); + /* (143) entity_head ::= T_ENTITY T_SIMPLE_ID subsuper T_SEMICOLON */ yytestcase(yyruleno==143); + /* (144) enumeration_extension ::= T_BASED_ON type_ref T_WITH enumeration_items */ yytestcase(yyruleno==144); + /* (145) enumeration_extension ::= T_BASED_ON type_ref */ yytestcase(yyruleno==145); + /* (146) enumeration_items ::= T_LPAREN enumeration_id_list T_RPAREN */ yytestcase(yyruleno==146); + /* (147) enumeration_id_list ::= enumeration_id_list T_COMMA enumeration_id */ yytestcase(yyruleno==147); + /* (148) enumeration_id_list ::= enumeration_id */ yytestcase(yyruleno==148); + /* (149) enumeration_reference ::= type_ref T_DOT enumeration_ref */ yytestcase(yyruleno==149); + /* (150) enumeration_reference ::= enumeration_ref */ yytestcase(yyruleno==150); + /* (151) enumeration_type ::= T_EXTENSIBLE T_ENUMERATION T_OF enumeration_items */ yytestcase(yyruleno==151); + /* (152) enumeration_type ::= T_EXTENSIBLE T_ENUMERATION enumeration_extension */ yytestcase(yyruleno==152); + /* (153) enumeration_type ::= T_EXTENSIBLE T_ENUMERATION */ yytestcase(yyruleno==153); + /* (154) enumeration_type ::= T_ENUMERATION T_OF enumeration_items */ yytestcase(yyruleno==154); + /* (155) enumeration_type ::= T_ENUMERATION enumeration_extension */ yytestcase(yyruleno==155); + /* (156) enumeration_type ::= T_ENUMERATION */ yytestcase(yyruleno==156); + /* (157) escape_stmt ::= T_ESCAPE T_SEMICOLON */ yytestcase(yyruleno==157); + /* (158) explicit_attr ::= attribute_decl_list T_COLON T_OPTIONAL parameter_type T_SEMICOLON */ yytestcase(yyruleno==158); + /* (159) explicit_attr ::= attribute_decl_list T_COLON parameter_type T_SEMICOLON */ yytestcase(yyruleno==159); + /* (160) attribute_decl_list ::= attribute_decl_list T_COMMA attribute_decl */ yytestcase(yyruleno==160); + /* (161) attribute_decl_list ::= attribute_decl */ yytestcase(yyruleno==161); + /* (162) expression ::= simple_expression rel_op_extended simple_expression */ yytestcase(yyruleno==162); + /* (163) expression ::= simple_expression */ yytestcase(yyruleno==163); + /* (164) factor ::= simple_factor T_EXP simple_factor */ yytestcase(yyruleno==164); + /* (165) factor ::= simple_factor */ yytestcase(yyruleno==165); + /* (166) formal_parameter ::= parameter_id_list T_COLON parameter_type */ yytestcase(yyruleno==166); + /* (167) parameter_id_list ::= parameter_id_list T_COMMA parameter_id */ yytestcase(yyruleno==167); + /* (168) parameter_id_list ::= parameter_id */ yytestcase(yyruleno==168); + /* (169) function_call ::= built_in_function T_LPAREN actual_parameter_list T_RPAREN */ yytestcase(yyruleno==169); + /* (170) function_call ::= built_in_function */ yytestcase(yyruleno==170); + /* (171) function_call ::= function_ref T_LPAREN actual_parameter_list T_RPAREN */ yytestcase(yyruleno==171); + /* (172) function_call ::= function_ref */ yytestcase(yyruleno==172); + /* (173) function_decl ::= function_head algorithm_head stmt_list T_END_FUNCTION T_SEMICOLON */ yytestcase(yyruleno==173); + /* (174) function_head ::= T_FUNCTION T_SIMPLE_ID T_LPAREN formal_parameter_list T_RPAREN T_COLON parameter_type T_SEMICOLON */ yytestcase(yyruleno==174); + /* (175) function_head ::= T_FUNCTION T_SIMPLE_ID T_COLON parameter_type T_SEMICOLON */ yytestcase(yyruleno==175); + /* (176) formal_parameter_list ::= formal_parameter_list T_SEMICOLON formal_parameter */ yytestcase(yyruleno==176); + /* (177) formal_parameter_list ::= formal_parameter */ yytestcase(yyruleno==177); + /* (178) generalized_types ::= aggregate_type */ yytestcase(yyruleno==178); + /* (179) generalized_types ::= general_aggregation_types */ yytestcase(yyruleno==179); + /* (180) generalized_types ::= generic_entity_type */ yytestcase(yyruleno==180); + /* (181) generalized_types ::= generic_type */ yytestcase(yyruleno==181); + /* (182) general_aggregation_types ::= general_array_type */ yytestcase(yyruleno==182); + /* (183) general_aggregation_types ::= general_bag_type */ yytestcase(yyruleno==183); + /* (184) general_aggregation_types ::= general_list_type */ yytestcase(yyruleno==184); + /* (185) general_aggregation_types ::= general_set_type */ yytestcase(yyruleno==185); + /* (186) general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL T_UNIQUE parameter_type */ yytestcase(yyruleno==186); + /* (187) general_array_type ::= T_ARRAY bound_spec T_OF T_OPTIONAL parameter_type */ yytestcase(yyruleno==187); + /* (188) general_array_type ::= T_ARRAY bound_spec T_OF T_UNIQUE parameter_type */ yytestcase(yyruleno==188); + /* (189) general_array_type ::= T_ARRAY bound_spec T_OF parameter_type */ yytestcase(yyruleno==189); + /* (190) general_array_type ::= T_ARRAY T_OF T_OPTIONAL T_UNIQUE parameter_type */ yytestcase(yyruleno==190); + /* (191) general_array_type ::= T_ARRAY T_OF T_OPTIONAL parameter_type */ yytestcase(yyruleno==191); + /* (192) general_array_type ::= T_ARRAY T_OF T_UNIQUE parameter_type */ yytestcase(yyruleno==192); + /* (193) general_array_type ::= T_ARRAY T_OF parameter_type */ yytestcase(yyruleno==193); + /* (194) general_bag_type ::= T_BAG bound_spec T_OF parameter_type */ yytestcase(yyruleno==194); + /* (195) general_bag_type ::= T_BAG T_OF parameter_type */ yytestcase(yyruleno==195); + /* (196) general_list_type ::= T_LIST bound_spec T_OF T_UNIQUE parameter_type */ yytestcase(yyruleno==196); + /* (197) general_list_type ::= T_LIST bound_spec T_OF parameter_type */ yytestcase(yyruleno==197); + /* (198) general_list_type ::= T_LIST T_OF T_UNIQUE parameter_type */ yytestcase(yyruleno==198); + /* (199) general_list_type ::= T_LIST T_OF parameter_type */ yytestcase(yyruleno==199); + /* (200) general_ref ::= parameter_ref */ yytestcase(yyruleno==200); + /* (201) general_ref ::= variable_ref */ yytestcase(yyruleno==201); + /* (202) general_set_type ::= T_SET bound_spec T_OF parameter_type */ yytestcase(yyruleno==202); + /* (203) general_set_type ::= T_SET T_OF parameter_type */ yytestcase(yyruleno==203); + /* (204) generic_entity_type ::= T_GENERIC_ENTITY T_COLON type_label */ yytestcase(yyruleno==204); + /* (205) generic_entity_type ::= T_GENERIC_ENTITY */ yytestcase(yyruleno==205); + /* (206) generic_type ::= T_GENERIC T_COLON type_label */ yytestcase(yyruleno==206); + /* (207) generic_type ::= T_GENERIC */ yytestcase(yyruleno==207); + /* (208) group_qualifier ::= T_BACKSLASH entity_ref */ yytestcase(yyruleno==208); + /* (209) if_stmt ::= T_IF logical_expression T_THEN stmt_list T_ELSE stmt_list T_END_IF T_SEMICOLON */ yytestcase(yyruleno==209); + /* (210) if_stmt ::= T_IF logical_expression T_THEN stmt_list T_END_IF T_SEMICOLON */ yytestcase(yyruleno==210); + /* (211) increment ::= numeric_expression */ yytestcase(yyruleno==211); + /* (212) increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2 T_BY increment */ yytestcase(yyruleno==212); + /* (213) increment_control ::= variable_id T_ASSIGN bound_1 T_TO bound_2 */ yytestcase(yyruleno==213); + /* (214) increment_control ::= */ yytestcase(yyruleno==214); + /* (215) index ::= numeric_expression */ yytestcase(yyruleno==215); + /* (216) index_1 ::= index */ yytestcase(yyruleno==216); + /* (217) index_2 ::= index */ yytestcase(yyruleno==217); + /* (218) index_qualifier ::= T_LBRKT index_1 T_COLON index_2 T_RBRKT */ yytestcase(yyruleno==218); + /* (219) index_qualifier ::= T_LBRKT index_1 T_RBRKT */ yytestcase(yyruleno==219); + /* (220) instantiable_type ::= concrete_types */ yytestcase(yyruleno==220); + /* (221) instantiable_type ::= entity_ref */ yytestcase(yyruleno==221); + /* (222) integer_type ::= T_INTEGER */ yytestcase(yyruleno==222); + /* (223) interface_specification ::= reference_clause */ yytestcase(yyruleno==223); + /* (224) interface_specification ::= use_clause */ yytestcase(yyruleno==224); + /* (225) interval ::= T_LCURL interval_low interval_op interval_item interval_op interval_high T_RCURL */ yytestcase(yyruleno==225); + /* (226) interval_high ::= simple_expression */ yytestcase(yyruleno==226); + /* (227) interval_item ::= simple_expression */ yytestcase(yyruleno==227); + /* (228) interval_low ::= simple_expression */ yytestcase(yyruleno==228); + /* (229) interval_op ::= T_LT */ yytestcase(yyruleno==229); + /* (230) interval_op ::= T_LTEQ */ yytestcase(yyruleno==230); + /* (231) inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ yytestcase(yyruleno==231); + /* (232) inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ yytestcase(yyruleno==232); + /* (233) inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ yytestcase(yyruleno==233); + /* (234) inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ yytestcase(yyruleno==234); + /* (235) inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR entity_ref T_DOT attribute_ref T_SEMICOLON */ yytestcase(yyruleno==235); + /* (236) inverse_attr ::= attribute_decl T_COLON T_SET bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ yytestcase(yyruleno==236); + /* (237) inverse_attr ::= attribute_decl T_COLON T_SET T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ yytestcase(yyruleno==237); + /* (238) inverse_attr ::= attribute_decl T_COLON T_BAG bound_spec T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ yytestcase(yyruleno==238); + /* (239) inverse_attr ::= attribute_decl T_COLON T_BAG T_OF entity_ref T_FOR attribute_ref T_SEMICOLON */ yytestcase(yyruleno==239); + /* (240) inverse_attr ::= attribute_decl T_COLON entity_ref T_FOR attribute_ref T_SEMICOLON */ yytestcase(yyruleno==240); + /* (241) inverse_clause ::= T_INVERSE inverse_attr_list */ yytestcase(yyruleno==241); + /* (242) inverse_clause ::= */ yytestcase(yyruleno==242); + /* (243) inverse_attr_list ::= inverse_attr_list inverse_attr */ yytestcase(yyruleno==243); + /* (244) inverse_attr_list ::= inverse_attr */ yytestcase(yyruleno==244); + /* (245) list_type ::= T_LIST bound_spec T_OF T_UNIQUE instantiable_type */ yytestcase(yyruleno==245); + /* (246) list_type ::= T_LIST bound_spec T_OF instantiable_type */ yytestcase(yyruleno==246); + /* (247) list_type ::= T_LIST T_OF T_UNIQUE instantiable_type */ yytestcase(yyruleno==247); + /* (248) list_type ::= T_LIST T_OF instantiable_type */ yytestcase(yyruleno==248); + /* (249) literal ::= T_BINARY_LITERAL */ yytestcase(yyruleno==249); + /* (250) literal ::= logical_literal */ yytestcase(yyruleno==250); + /* (251) literal ::= real_literal */ yytestcase(yyruleno==251); + /* (252) literal ::= string_literal */ yytestcase(yyruleno==252); + /* (253) real_literal ::= T_INTEGER_LITERAL */ yytestcase(yyruleno==253); + /* (254) real_literal ::= T_REAL_LITERAL */ yytestcase(yyruleno==254); + /* (255) local_decl ::= T_LOCAL local_variable_list T_END_LOCAL T_SEMICOLON */ yytestcase(yyruleno==255); + /* (256) local_decl ::= */ yytestcase(yyruleno==256); + /* (257) local_variable_list ::= local_variable_list local_variable */ yytestcase(yyruleno==257); + /* (258) local_variable_list ::= local_variable */ yytestcase(yyruleno==258); + /* (259) local_variable ::= variable_id_list T_COLON parameter_type T_ASSIGN expression T_SEMICOLON */ yytestcase(yyruleno==259); + /* (260) local_variable ::= variable_id_list T_COLON parameter_type T_SEMICOLON */ yytestcase(yyruleno==260); + /* (261) variable_id_list ::= variable_id_list T_COMMA variable_id */ yytestcase(yyruleno==261); + /* (262) variable_id_list ::= variable_id */ yytestcase(yyruleno==262); + /* (263) logical_expression ::= expression */ yytestcase(yyruleno==263); + /* (264) logical_literal ::= T_FALSE */ yytestcase(yyruleno==264); + /* (265) logical_literal ::= T_TRUE */ yytestcase(yyruleno==265); + /* (266) logical_literal ::= T_UNKNOWN */ yytestcase(yyruleno==266); + /* (267) logical_type ::= T_LOGICAL */ yytestcase(yyruleno==267); + /* (268) multiplication_like_op ::= T_TIMES */ yytestcase(yyruleno==268); + /* (269) multiplication_like_op ::= T_RDIV */ yytestcase(yyruleno==269); + /* (270) multiplication_like_op ::= T_IDIV */ yytestcase(yyruleno==270); + /* (271) multiplication_like_op ::= T_MOD */ yytestcase(yyruleno==271); + /* (272) multiplication_like_op ::= T_AND */ yytestcase(yyruleno==272); + /* (273) multiplication_like_op ::= T_CONCAT */ yytestcase(yyruleno==273); + /* (274) named_types ::= entity_ref */ yytestcase(yyruleno==274); + /* (275) named_types ::= type_ref */ yytestcase(yyruleno==275); + /* (276) named_type_or_rename ::= named_types T_AS T_SIMPLE_ID */ yytestcase(yyruleno==276); + /* (277) named_type_or_rename ::= named_types */ yytestcase(yyruleno==277); + /* (278) null_stmt ::= T_SEMICOLON */ yytestcase(yyruleno==278); + /* (279) number_type ::= T_NUMBER */ yytestcase(yyruleno==279); + /* (280) numeric_expression ::= simple_expression */ yytestcase(yyruleno==280); + /* (281) one_of ::= T_ONEOF T_LPAREN supertype_expression_list T_RPAREN */ yytestcase(yyruleno==281); + /* (282) supertype_expression_list ::= supertype_expression_list T_COMMA supertype_expression */ yytestcase(yyruleno==282); + /* (283) supertype_expression_list ::= supertype_expression */ yytestcase(yyruleno==283); + /* (284) parameter ::= expression */ yytestcase(yyruleno==284); + /* (285) parameter_type ::= generalized_types */ yytestcase(yyruleno==285); + /* (286) parameter_type ::= named_types */ yytestcase(yyruleno==286); + /* (287) parameter_type ::= simple_types */ yytestcase(yyruleno==287); + /* (288) population ::= entity_ref */ yytestcase(yyruleno==288); + /* (289) precision_spec ::= numeric_expression */ yytestcase(yyruleno==289); + /* (290) primary ::= literal */ yytestcase(yyruleno==290); + /* (291) primary ::= qualifiable_factor qualifier_list */ yytestcase(yyruleno==291); + /* (292) procedure_call_stmt ::= built_in_procedure T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==292); + /* (293) procedure_call_stmt ::= built_in_procedure T_SEMICOLON */ yytestcase(yyruleno==293); + /* (294) procedure_call_stmt ::= procedure_ref T_LPAREN actual_parameter_list T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==294); + /* (295) procedure_call_stmt ::= procedure_ref T_SEMICOLON */ yytestcase(yyruleno==295); + /* (296) procedure_decl ::= procedure_head algorithm_head stmt_list T_END_PROCEDURE T_SEMICOLON */ yytestcase(yyruleno==296); + /* (297) procedure_decl ::= procedure_head algorithm_head T_END_PROCEDURE T_SEMICOLON */ yytestcase(yyruleno==297); + /* (298) procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_LPAREN varopt_formal_parameter_list T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==298); + /* (299) procedure_head ::= T_PROCEDURE T_SIMPLE_ID T_SEMICOLON */ yytestcase(yyruleno==299); + /* (300) varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON T_VAR formal_parameter */ yytestcase(yyruleno==300); + /* (301) varopt_formal_parameter_list ::= varopt_formal_parameter_list T_SEMICOLON formal_parameter */ yytestcase(yyruleno==301); + /* (302) varopt_formal_parameter_list ::= T_VAR formal_parameter */ yytestcase(yyruleno==302); + /* (303) varopt_formal_parameter_list ::= formal_parameter */ yytestcase(yyruleno==303); + /* (304) qualifiable_factor ::= attribute_ref */ yytestcase(yyruleno==304); + /* (305) qualifiable_factor ::= constant_factor */ yytestcase(yyruleno==305); + /* (306) qualifiable_factor ::= function_call */ yytestcase(yyruleno==306); + /* (307) qualifiable_factor ::= general_ref */ yytestcase(yyruleno==307); + /* (308) qualifiable_factor ::= population */ yytestcase(yyruleno==308); + /* (309) qualified_attribute ::= T_SELF group_qualifier attribute_qualifier */ yytestcase(yyruleno==309); + /* (310) qualifier ::= attribute_qualifier */ yytestcase(yyruleno==310); + /* (311) qualifier ::= group_qualifier */ yytestcase(yyruleno==311); + /* (312) qualifier ::= index_qualifier */ yytestcase(yyruleno==312); + /* (313) query_expression ::= T_QUERY T_LPAREN variable_id T_ALL_IN aggregate_source T_PIPE logical_expression T_RPAREN */ yytestcase(yyruleno==313); + /* (314) real_type ::= T_REAL T_LPAREN precision_spec T_RPAREN */ yytestcase(yyruleno==314); + /* (315) real_type ::= T_REAL */ yytestcase(yyruleno==315); + /* (316) redeclared_attribute ::= qualified_attribute T_RENAMED attribute_id */ yytestcase(yyruleno==316); + /* (317) redeclared_attribute ::= qualified_attribute */ yytestcase(yyruleno==317); + /* (318) referenced_attribute ::= attribute_ref */ yytestcase(yyruleno==318); + /* (319) referenced_attribute ::= qualified_attribute */ yytestcase(yyruleno==319); + /* (320) reference_clause ::= T_REFERENCE T_FROM schema_ref T_LPAREN resource_or_rename_list T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==320); + /* (321) reference_clause ::= T_REFERENCE T_FROM schema_ref T_SEMICOLON */ yytestcase(yyruleno==321); + /* (322) resource_or_rename_list ::= resource_or_rename_list T_COMMA resource_or_rename */ yytestcase(yyruleno==322); + /* (323) resource_or_rename_list ::= resource_or_rename */ yytestcase(yyruleno==323); + /* (324) rel_op ::= T_LT */ yytestcase(yyruleno==324); + /* (325) rel_op ::= T_GT */ yytestcase(yyruleno==325); + /* (326) rel_op ::= T_LTEQ */ yytestcase(yyruleno==326); + /* (327) rel_op ::= T_GTEQ */ yytestcase(yyruleno==327); + /* (328) rel_op ::= T_NEQ */ yytestcase(yyruleno==328); + /* (329) rel_op ::= T_EQ */ yytestcase(yyruleno==329); + /* (330) rel_op ::= T_INST_NEQ */ yytestcase(yyruleno==330); + /* (331) rel_op ::= T_INST_EQ */ yytestcase(yyruleno==331); + /* (332) rel_op_extended ::= rel_op */ yytestcase(yyruleno==332); + /* (333) rel_op_extended ::= T_IN */ yytestcase(yyruleno==333); + /* (334) rel_op_extended ::= T_LIKE */ yytestcase(yyruleno==334); + /* (335) rename_id ::= T_SIMPLE_ID */ yytestcase(yyruleno==335); + /* (336) repeat_control ::= increment_control while_control until_control */ yytestcase(yyruleno==336); + /* (337) repeat_stmt ::= T_REPEAT repeat_control T_SEMICOLON stmt_list T_END_REPEAT T_SEMICOLON */ yytestcase(yyruleno==337); + /* (338) repetition ::= numeric_expression */ yytestcase(yyruleno==338); + /* (339) resource_or_rename ::= resource_ref T_AS rename_id */ yytestcase(yyruleno==339); + /* (340) resource_or_rename ::= resource_ref */ yytestcase(yyruleno==340); + /* (341) resource_ref ::= constant_ref */ yytestcase(yyruleno==341); + /* (342) resource_ref ::= entity_ref */ yytestcase(yyruleno==342); + /* (343) resource_ref ::= function_ref */ yytestcase(yyruleno==343); + /* (344) resource_ref ::= procedure_ref */ yytestcase(yyruleno==344); + /* (345) resource_ref ::= type_ref */ yytestcase(yyruleno==345); + /* (346) return_stmt ::= T_RETURN T_LPAREN expression T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==346); + /* (347) return_stmt ::= T_RETURN T_SEMICOLON */ yytestcase(yyruleno==347); + /* (348) rule_decl ::= rule_head algorithm_head stmt_list where_clause T_END_RULE T_SEMICOLON */ yytestcase(yyruleno==348); + /* (349) rule_decl ::= rule_head algorithm_head where_clause T_END_RULE T_SEMICOLON */ yytestcase(yyruleno==349); + /* (350) rule_head ::= T_RULE rule_id T_FOR T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==350); + /* (351) entity_ref_list ::= entity_ref_list T_COMMA entity_ref */ yytestcase(yyruleno==351); + /* (352) entity_ref_list ::= entity_ref */ yytestcase(yyruleno==352); + /* (353) schema_body ::= interface_specification_list constant_decl declaration_or_rule_decl_list */ yytestcase(yyruleno==353); + /* (354) interface_specification_list ::= interface_specification_list interface_specification */ yytestcase(yyruleno==354); + /* (355) interface_specification_list ::= */ yytestcase(yyruleno==355); + /* (356) declaration_or_rule_decl ::= declaration */ yytestcase(yyruleno==356); + /* (357) declaration_or_rule_decl ::= rule_decl */ yytestcase(yyruleno==357); + /* (358) declaration_or_rule_decl_list ::= declaration_or_rule_decl_list declaration_or_rule_decl */ yytestcase(yyruleno==358); + /* (359) declaration_or_rule_decl_list ::= */ yytestcase(yyruleno==359); + /* (360) schema_decl ::= T_SCHEMA schema_id schema_version_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON */ yytestcase(yyruleno==360); + /* (361) schema_decl ::= T_SCHEMA schema_id T_SEMICOLON schema_body T_END_SCHEMA T_SEMICOLON */ yytestcase(yyruleno==361); + /* (362) schema_version_id ::= string_literal */ yytestcase(yyruleno==362); + /* (363) selector ::= expression */ yytestcase(yyruleno==363); + /* (364) select_extension ::= T_BASED_ON type_ref T_WITH select_list */ yytestcase(yyruleno==364); + /* (365) select_extension ::= T_BASED_ON type_ref */ yytestcase(yyruleno==365); + /* (366) select_list ::= T_LPAREN named_types_list T_RPAREN */ yytestcase(yyruleno==366); + /* (367) named_types_list ::= named_types_list T_COMMA named_types */ yytestcase(yyruleno==367); + /* (368) named_types_list ::= named_types */ yytestcase(yyruleno==368); + /* (369) select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_list */ yytestcase(yyruleno==369); + /* (370) select_type ::= T_EXTENSIBLE T_SELECT select_list */ yytestcase(yyruleno==370); + /* (371) select_type ::= T_SELECT select_list */ yytestcase(yyruleno==371); + /* (372) select_type ::= T_EXTENSIBLE T_GENERIC_ENTITY T_SELECT select_extension */ yytestcase(yyruleno==372); + /* (373) select_type ::= T_EXTENSIBLE T_SELECT select_extension */ yytestcase(yyruleno==373); + /* (374) select_type ::= T_SELECT select_extension */ yytestcase(yyruleno==374); + /* (375) select_type ::= T_SELECT */ yytestcase(yyruleno==375); + /* (376) set_type ::= T_SET bound_spec T_OF instantiable_type */ yytestcase(yyruleno==376); + /* (377) set_type ::= T_SET T_OF instantiable_type */ yytestcase(yyruleno==377); + /* (378) simple_expression ::= term_list */ yytestcase(yyruleno==378); + /* (379) term_list ::= term_list add_like_op term */ yytestcase(yyruleno==379); + /* (380) term_list ::= term */ yytestcase(yyruleno==380); + /* (381) simple_factor ::= aggregate_initializer */ yytestcase(yyruleno==381); + /* (382) simple_factor ::= entity_constructor */ yytestcase(yyruleno==382); + /* (383) simple_factor ::= enumeration_reference */ yytestcase(yyruleno==383); + /* (384) simple_factor ::= interval */ yytestcase(yyruleno==384); + /* (385) simple_factor ::= query_expression */ yytestcase(yyruleno==385); + /* (386) simple_factor ::= T_LPAREN expression T_RPAREN */ yytestcase(yyruleno==386); + /* (387) simple_factor ::= primary */ yytestcase(yyruleno==387); + /* (388) simple_factor ::= T_PLUS T_LPAREN expression T_RPAREN */ yytestcase(yyruleno==388); + /* (389) simple_factor ::= T_PLUS primary */ yytestcase(yyruleno==389); + /* (390) simple_factor ::= T_MINUS T_LPAREN expression T_RPAREN */ yytestcase(yyruleno==390); + /* (391) simple_factor ::= T_MINUS primary */ yytestcase(yyruleno==391); + /* (392) simple_factor ::= T_NOT T_LPAREN expression T_RPAREN */ yytestcase(yyruleno==392); + /* (393) simple_factor ::= T_NOT primary */ yytestcase(yyruleno==393); + /* (394) simple_types ::= binary_type */ yytestcase(yyruleno==394); + /* (395) simple_types ::= boolean_type */ yytestcase(yyruleno==395); + /* (396) simple_types ::= integer_type */ yytestcase(yyruleno==396); + /* (397) simple_types ::= logical_type */ yytestcase(yyruleno==397); + /* (398) simple_types ::= number_type */ yytestcase(yyruleno==398); + /* (399) simple_types ::= real_type */ yytestcase(yyruleno==399); + /* (400) simple_types ::= string_type */ yytestcase(yyruleno==400); + /* (401) skip_stmt ::= T_SKIP T_SEMICOLON */ yytestcase(yyruleno==401); + /* (402) stmt ::= alias_stmt */ yytestcase(yyruleno==402); + /* (403) stmt ::= assignment_stmt */ yytestcase(yyruleno==403); + /* (404) stmt ::= case_stmt */ yytestcase(yyruleno==404); + /* (405) stmt ::= compound_stmt */ yytestcase(yyruleno==405); + /* (406) stmt ::= escape_stmt */ yytestcase(yyruleno==406); + /* (407) stmt ::= if_stmt */ yytestcase(yyruleno==407); + /* (408) stmt ::= null_stmt */ yytestcase(yyruleno==408); + /* (409) stmt ::= procedure_call_stmt */ yytestcase(yyruleno==409); + /* (410) stmt ::= repeat_stmt */ yytestcase(yyruleno==410); + /* (411) stmt ::= return_stmt */ yytestcase(yyruleno==411); + /* (412) stmt ::= skip_stmt */ yytestcase(yyruleno==412); + /* (413) string_literal ::= T_STRING_LITERAL */ yytestcase(yyruleno==413); + /* (414) string_literal ::= T_ENCODED_STRING_LITERAL */ yytestcase(yyruleno==414); + /* (415) string_type ::= T_STRING width_spec */ yytestcase(yyruleno==415); + /* (416) string_type ::= T_STRING */ yytestcase(yyruleno==416); + /* (417) subsuper ::= supertype_constraint subtype_declaration */ yytestcase(yyruleno==417); + /* (418) subsuper ::= supertype_constraint */ yytestcase(yyruleno==418); + /* (419) subsuper ::= subtype_declaration */ yytestcase(yyruleno==419); + /* (420) subsuper ::= */ yytestcase(yyruleno==420); + /* (421) subtype_constraint ::= T_OF T_LPAREN supertype_expression T_RPAREN */ yytestcase(yyruleno==421); + /* (422) subtype_constraint_body ::= abstract_supertype total_over supertype_expression T_SEMICOLON */ yytestcase(yyruleno==422); + /* (423) subtype_constraint_body ::= abstract_supertype total_over */ yytestcase(yyruleno==423); + /* (424) subtype_constraint_decl ::= subtype_constraint_head subtype_constraint_body T_END_SUBTYPE_CONSTRAINT T_SEMICOLON */ yytestcase(yyruleno==424); + /* (425) subtype_constraint_head ::= T_SUBTYPE_CONSTRAINT subtype_constraint_id T_FOR entity_ref T_SEMICOLON */ yytestcase(yyruleno==425); + /* (426) subtype_declaration ::= T_SUBTYPE T_OF T_LPAREN entity_ref_list T_RPAREN */ yytestcase(yyruleno==426); + /* (427) supertype_constraint ::= abstract_entity_declaration */ yytestcase(yyruleno==427); + /* (428) supertype_constraint ::= abstract_supertype_declaration */ yytestcase(yyruleno==428); + /* (429) supertype_constraint ::= supertype_rule */ yytestcase(yyruleno==429); + /* (430) supertype_expression ::= supertype_factor_list */ yytestcase(yyruleno==430); + /* (431) supertype_factor_list ::= supertype_factor_list T_ANDOR supertype_factor */ yytestcase(yyruleno==431); + /* (432) supertype_factor_list ::= supertype_factor */ yytestcase(yyruleno==432); + /* (433) supertype_factor ::= supertype_term_list */ yytestcase(yyruleno==433); + /* (434) supertype_term_list ::= supertype_term_list T_AND supertype_term */ yytestcase(yyruleno==434); + /* (435) supertype_term_list ::= supertype_term */ yytestcase(yyruleno==435); + /* (436) supertype_rule ::= T_SUPERTYPE subtype_constraint */ yytestcase(yyruleno==436); + /* (437) supertype_term ::= entity_ref */ yytestcase(yyruleno==437); + /* (438) supertype_term ::= one_of */ yytestcase(yyruleno==438); + /* (439) supertype_term ::= T_LPAREN supertype_expression T_RPAREN */ yytestcase(yyruleno==439); + /* (440) term ::= factor_list */ yytestcase(yyruleno==440); + /* (441) factor_list ::= factor_list multiplication_like_op factor */ yytestcase(yyruleno==441); + /* (442) factor_list ::= factor */ yytestcase(yyruleno==442); + /* (443) total_over ::= T_TOTAL_OVER T_LPAREN entity_ref_list T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==443); + /* (444) total_over ::= */ yytestcase(yyruleno==444); + /* (445) type_head ::= T_TYPE T_SIMPLE_ID T_EQ */ yytestcase(yyruleno==445); + /* (446) type_decl ::= type_head underlying_type T_SEMICOLON where_clause T_END_TYPE T_SEMICOLON */ yytestcase(yyruleno==446); + /* (447) type_label ::= type_label_id */ yytestcase(yyruleno==447); + /* (448) underlying_type ::= concrete_types */ yytestcase(yyruleno==448); + /* (449) underlying_type ::= constructed_types */ yytestcase(yyruleno==449); + /* (450) unique_clause ::= T_UNIQUE unique_rule_list */ yytestcase(yyruleno==450); + /* (451) unique_clause ::= */ yytestcase(yyruleno==451); + /* (452) unique_rule_list ::= unique_rule_list unique_rule T_SEMICOLON */ yytestcase(yyruleno==452); + /* (453) unique_rule_list ::= unique_rule T_SEMICOLON */ yytestcase(yyruleno==453); + /* (454) unique_rule ::= rule_label_id T_COLON referenced_attribute_list */ yytestcase(yyruleno==454); + /* (455) unique_rule ::= referenced_attribute_list */ yytestcase(yyruleno==455); + /* (456) referenced_attribute_list ::= referenced_attribute_list T_COMMA referenced_attribute */ yytestcase(yyruleno==456); + /* (457) referenced_attribute_list ::= referenced_attribute */ yytestcase(yyruleno==457); + /* (458) until_control ::= T_UNTIL logical_expression */ yytestcase(yyruleno==458); + /* (459) until_control ::= */ yytestcase(yyruleno==459); + /* (460) use_clause ::= T_USE T_FROM schema_ref T_LPAREN named_type_or_rename_list T_RPAREN T_SEMICOLON */ yytestcase(yyruleno==460); + /* (461) use_clause ::= T_USE T_FROM schema_ref T_SEMICOLON */ yytestcase(yyruleno==461); + /* (462) named_type_or_rename_list ::= named_type_or_rename_list T_COMMA named_type_or_rename */ yytestcase(yyruleno==462); + /* (463) named_type_or_rename_list ::= named_type_or_rename */ yytestcase(yyruleno==463); + /* (464) where_clause ::= T_WHERE domain_rule_list */ yytestcase(yyruleno==464); + /* (465) where_clause ::= */ yytestcase(yyruleno==465); + /* (466) domain_rule_list ::= domain_rule T_SEMICOLON */ yytestcase(yyruleno==466); + /* (467) domain_rule_list ::= domain_rule_list domain_rule T_SEMICOLON */ yytestcase(yyruleno==467); + /* (468) while_control ::= T_WHILE logical_expression */ yytestcase(yyruleno==468); + /* (469) while_control ::= */ yytestcase(yyruleno==469); + /* (470) width ::= numeric_expression */ yytestcase(yyruleno==470); + /* (471) width_spec ::= T_LPAREN width T_RPAREN T_FIXED */ yytestcase(yyruleno==471); + /* (472) width_spec ::= T_LPAREN width T_RPAREN */ yytestcase(yyruleno==472); + /* (473) express_file ::= schema_decl_list */ yytestcase(yyruleno==473); + /* (474) schema_decl_list ::= schema_decl_list schema_decl */ yytestcase(yyruleno==474); + /* (475) schema_decl_list ::= schema_decl */ yytestcase(yyruleno==475); + break; +/********** End reduce actions ************************************************/ + }; + assert( yyrulenoYY_MAX_SHIFT && yyact<=YY_MAX_SHIFTREDUCE) ); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[-2].minor.yy401); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); + /* It is not possible for a REDUCE to be followed by an error */ + assert( yyact!=YY_ERROR_ACTION ); - yymsp[0].minor.yy401->type = Type_Repeat; + yymsp += yysize+1; + yypParser->yytos = yymsp; + yymsp->stateno = (YYACTIONTYPE)yyact; + yymsp->major = (YYCODETYPE)yygoto; + yyTraceShift(yypParser, yyact, "... then shift"); } -#line 2340 "expparse.c" - break; - case 15: /* aggregate_type ::= TOK_AGGREGATE TOK_OF parameter_type */ -#line 397 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(aggregate_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - if (tag_count < 0) { - Symbol sym; - sym.line = yylineno; - sym.filename = current_filename; - ERRORreport_with_symbol(UNLABELLED_PARAM_TYPE, &sym, - CURRENT_SCOPE_NAME); - } +/* +** The following code executes when the parse fails +*/ +#ifndef YYNOERRORRECOVERY +static void yy_parse_failed( + yyParser *yypParser /* The parser */ +){ + yyparseARG_FETCH; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); + } +#endif + while( yypParser->yytos>yypParser->yystack ) yy_pop_parser_stack(yypParser); + /* Here code is inserted which will be executed whenever the + ** parser fails */ +/************ Begin %parse_failure code ***************************************/ +/************ End %parse_failure code *****************************************/ + yyparseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } -#line 2356 "expparse.c" - break; - case 16: /* aggregate_type ::= TOK_AGGREGATE TOK_COLON TOK_IDENTIFIER TOK_OF parameter_type */ -#line 411 "expparse.y" -{ - Type t = TYPEcreate_user_defined_tag(yymsp[0].minor.yy297, CURRENT_SCOPE, yymsp[-2].minor.yy0.symbol); +#endif /* YYNOERRORRECOVERY */ - if (t) { - SCOPEadd_super(t); - yygotominor.yy477 = TYPEBODYcreate(aggregate_); - yygotominor.yy477->tag = t; - yygotominor.yy477->base = yymsp[0].minor.yy297; - } -} -#line 2370 "expparse.c" - break; - case 17: /* aggregation_type ::= array_type */ - case 18: /* aggregation_type ::= bag_type */ yytestcase(yyruleno==18); - case 19: /* aggregation_type ::= list_type */ yytestcase(yyruleno==19); - case 20: /* aggregation_type ::= set_type */ yytestcase(yyruleno==20); -#line 423 "expparse.y" -{ - yygotominor.yy477 = yymsp[0].minor.yy477; +/* +** The following code executes when a syntax error first occurs. +*/ +static void yy_syntax_error( + yyParser *yypParser, /* The parser */ + int yymajor, /* The major type of the error token */ + yyparseTOKENTYPE yyminor /* The minor type of the error token */ +){ + yyparseARG_FETCH; +#define TOKEN yyminor +/************ Begin %syntax_error code ****************************************/ +#line 814 "expparse.y" + + yyerror("syntax error on token type: '%s', val: '%s'", pState->lineno, yyTokenName[yymajor], yyminor->cstr); +#line 8818 "expparse.c" +/************ End %syntax_error code ******************************************/ + yyparseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } -#line 2380 "expparse.c" - break; - case 21: /* alias_statement ::= TOK_ALIAS TOK_IDENTIFIER TOK_FOR general_ref semicolon alias_push_scope statement_rep TOK_END_ALIAS semicolon */ -#line 442 "expparse.y" -{ - Expression e = EXPcreate_from_symbol(Type_Attribute, yymsp[-7].minor.yy0.symbol); - Variable v = VARcreate(e, Type_Unknown); - - v->initializer = yymsp[-5].minor.yy401; - - DICTdefine(CURRENT_SCOPE->symbol_table, yymsp[-7].minor.yy0.symbol->name, (Generic)v, - yymsp[-7].minor.yy0.symbol, OBJ_VARIABLE); - yygotominor.yy332 = ALIAScreate(CURRENT_SCOPE, v, yymsp[-2].minor.yy371); - POP_SCOPE(); -} -#line 2396 "expparse.c" - break; - case 22: /* alias_push_scope ::= */ -#line 456 "expparse.y" -{ - struct Scope_ *s = SCOPEcreate_tiny(OBJ_ALIAS); - PUSH_SCOPE(s, (Symbol *)0, OBJ_ALIAS); -} -#line 2404 "expparse.c" - break; - case 23: /* array_type ::= TOK_ARRAY bound_spec TOK_OF optional_or_unique attribute_type */ -#line 463 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(array_); - - yygotominor.yy477->flags.optional = yymsp[-1].minor.yy252.optional; - yygotominor.yy477->flags.unique = yymsp[-1].minor.yy252.unique; - yygotominor.yy477->upper = yymsp[-3].minor.yy253.upper_limit; - yygotominor.yy477->lower = yymsp[-3].minor.yy253.lower_limit; - yygotominor.yy477->base = yymsp[0].minor.yy297; -} -#line 2417 "expparse.c" - break; - case 24: /* assignable ::= assignable qualifier */ - case 300: /* unary_expression ::= unary_expression qualifier */ yytestcase(yyruleno==300); -#line 475 "expparse.y" -{ - yymsp[0].minor.yy46.first->e.op1 = yymsp[-1].minor.yy401; - yygotominor.yy401 = yymsp[0].minor.yy46.expr; -} -#line 2426 "expparse.c" - break; - case 26: /* assignment_statement ::= assignable TOK_ASSIGNMENT expression semicolon */ -#line 486 "expparse.y" -{ - yygotominor.yy332 = ASSIGNcreate(yymsp[-3].minor.yy401, yymsp[-1].minor.yy401); -} -#line 2433 "expparse.c" - break; - case 27: /* attribute_type ::= aggregation_type */ - case 28: /* attribute_type ::= basic_type */ yytestcase(yyruleno==28); - case 122: /* parameter_type ::= basic_type */ yytestcase(yyruleno==122); - case 123: /* parameter_type ::= conformant_aggregation */ yytestcase(yyruleno==123); -#line 491 "expparse.y" -{ - yygotominor.yy297 = TYPEcreate_from_body_anonymously(yymsp[0].minor.yy477); - SCOPEadd_super(yygotominor.yy297); -} -#line 2444 "expparse.c" - break; - case 29: /* attribute_type ::= defined_type */ - case 124: /* parameter_type ::= defined_type */ yytestcase(yyruleno==124); - case 125: /* parameter_type ::= generic_type */ yytestcase(yyruleno==125); -#line 501 "expparse.y" -{ - yygotominor.yy297 = yymsp[0].minor.yy297; -} -#line 2453 "expparse.c" - break; - case 30: /* explicit_attr_list ::= */ - case 50: /* case_action_list ::= */ yytestcase(yyruleno==50); - case 69: /* derive_decl ::= */ yytestcase(yyruleno==69); - case 268: /* statement_rep ::= */ yytestcase(yyruleno==268); -#line 506 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); -} -#line 2463 "expparse.c" - break; - case 31: /* explicit_attr_list ::= explicit_attr_list explicit_attribute */ -#line 510 "expparse.y" -{ - yygotominor.yy371 = yymsp[-1].minor.yy371; - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy371); -} -#line 2471 "expparse.c" - break; - case 32: /* bag_type ::= TOK_BAG bound_spec TOK_OF attribute_type */ - case 138: /* conformant_aggregation ::= TOK_BAG bound_spec TOK_OF parameter_type */ yytestcase(yyruleno==138); -#line 516 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(bag_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - yygotominor.yy477->upper = yymsp[-2].minor.yy253.upper_limit; - yygotominor.yy477->lower = yymsp[-2].minor.yy253.lower_limit; -} -#line 2482 "expparse.c" - break; - case 33: /* bag_type ::= TOK_BAG TOK_OF attribute_type */ -#line 523 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(bag_); - yygotominor.yy477->base = yymsp[0].minor.yy297; -} -#line 2490 "expparse.c" - break; - case 34: /* basic_type ::= TOK_BOOLEAN */ -#line 529 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(boolean_); -} -#line 2497 "expparse.c" - break; - case 35: /* basic_type ::= TOK_INTEGER precision_spec */ -#line 533 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(integer_); - yygotominor.yy477->precision = yymsp[0].minor.yy401; -} -#line 2505 "expparse.c" - break; - case 36: /* basic_type ::= TOK_REAL precision_spec */ -#line 538 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(real_); - yygotominor.yy477->precision = yymsp[0].minor.yy401; -} -#line 2513 "expparse.c" - break; - case 37: /* basic_type ::= TOK_NUMBER */ -#line 543 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(number_); -} -#line 2520 "expparse.c" - break; - case 38: /* basic_type ::= TOK_LOGICAL */ -#line 547 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(logical_); -} -#line 2527 "expparse.c" - break; - case 39: /* basic_type ::= TOK_BINARY precision_spec optional_fixed */ -#line 551 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(binary_); - yygotominor.yy477->precision = yymsp[-1].minor.yy401; - yygotominor.yy477->flags.fixed = yymsp[0].minor.yy252.fixed; -} -#line 2536 "expparse.c" - break; - case 40: /* basic_type ::= TOK_STRING precision_spec optional_fixed */ -#line 557 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(string_); - yygotominor.yy477->precision = yymsp[-1].minor.yy401; - yygotominor.yy477->flags.fixed = yymsp[0].minor.yy252.fixed; -} -#line 2545 "expparse.c" - break; - case 46: /* by_expression ::= */ -#line 583 "expparse.y" -{ - yygotominor.yy401 = LITERAL_ONE; -} -#line 2552 "expparse.c" - break; - case 48: /* cardinality_op ::= TOK_LEFT_CURL expression TOK_COLON expression TOK_RIGHT_CURL */ - case 181: /* bound_spec ::= TOK_LEFT_BRACKET expression TOK_COLON expression TOK_RIGHT_BRACKET */ yytestcase(yyruleno==181); -#line 593 "expparse.y" -{ - yygotominor.yy253.lower_limit = yymsp[-3].minor.yy401; - yygotominor.yy253.upper_limit = yymsp[-1].minor.yy401; -} -#line 2561 "expparse.c" - break; - case 49: /* case_action ::= case_labels TOK_COLON statement */ -#line 599 "expparse.y" -{ - yygotominor.yy321 = CASE_ITcreate(yymsp[-2].minor.yy371, yymsp[0].minor.yy332); - SYMBOLset(yygotominor.yy321); -} -#line 2569 "expparse.c" - break; - case 51: /* case_action_list ::= case_action_list case_action */ -#line 609 "expparse.y" -{ - yyerrok; - - yygotominor.yy371 = yymsp[-1].minor.yy371; - - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy321); -} -#line 2580 "expparse.c" - break; - case 52: /* case_block ::= case_action_list case_otherwise */ -#line 618 "expparse.y" -{ - yygotominor.yy371 = yymsp[-1].minor.yy371; - - if (yymsp[0].minor.yy321) { - LISTadd_last(yygotominor.yy371, - (Generic)yymsp[0].minor.yy321); - } -} -#line 2592 "expparse.c" - break; - case 53: /* case_labels ::= expression */ -#line 628 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); -} -#line 2601 "expparse.c" - break; - case 54: /* case_labels ::= case_labels TOK_COMMA expression */ -#line 634 "expparse.y" -{ - yyerrok; - - yygotominor.yy371 = yymsp[-2].minor.yy371; - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); -} -#line 2611 "expparse.c" - break; - case 55: /* case_otherwise ::= */ -#line 642 "expparse.y" -{ - yygotominor.yy321 = (Case_Item)0; -} -#line 2618 "expparse.c" - break; - case 56: /* case_otherwise ::= TOK_OTHERWISE TOK_COLON statement */ -#line 646 "expparse.y" -{ - yygotominor.yy321 = CASE_ITcreate(LIST_NULL, yymsp[0].minor.yy332); - SYMBOLset(yygotominor.yy321); -} -#line 2626 "expparse.c" - break; - case 57: /* case_statement ::= TOK_CASE expression TOK_OF case_block TOK_END_CASE semicolon */ -#line 653 "expparse.y" -{ - yygotominor.yy332 = CASEcreate(yymsp[-4].minor.yy401, yymsp[-2].minor.yy371); -} -#line 2633 "expparse.c" - break; - case 58: /* compound_statement ::= TOK_BEGIN statement_rep TOK_END semicolon */ -#line 658 "expparse.y" -{ - yygotominor.yy332 = COMP_STMTcreate(yymsp[-2].minor.yy371); -} -#line 2640 "expparse.c" - break; - case 59: /* constant ::= TOK_PI */ -#line 663 "expparse.y" -{ - yygotominor.yy401 = LITERAL_PI; -} -#line 2647 "expparse.c" - break; - case 60: /* constant ::= TOK_E */ -#line 668 "expparse.y" -{ - yygotominor.yy401 = LITERAL_E; -} -#line 2654 "expparse.c" - break; - case 61: /* constant_body ::= identifier TOK_COLON attribute_type TOK_ASSIGNMENT expression semicolon */ -#line 675 "expparse.y" -{ - Variable v; - - yymsp[-5].minor.yy401->type = yymsp[-3].minor.yy297; - v = VARcreate(yymsp[-5].minor.yy401, yymsp[-3].minor.yy297); - v->initializer = yymsp[-1].minor.yy401; - v->flags.constant = 1; - DICTdefine(CURRENT_SCOPE->symbol_table, yymsp[-5].minor.yy401->symbol.name, (Generic)v, - &yymsp[-5].minor.yy401->symbol, OBJ_VARIABLE); -} -#line 2668 "expparse.c" - break; - case 64: /* constant_decl ::= TOK_CONSTANT constant_body_list TOK_END_CONSTANT semicolon */ -#line 694 "expparse.y" -{ - yygotominor.yy0 = yymsp[-3].minor.yy0; -} -#line 2675 "expparse.c" - break; - case 71: /* derived_attribute ::= attribute_decl TOK_COLON attribute_type initializer semicolon */ -#line 726 "expparse.y" -{ - yygotominor.yy91 = VARcreate(yymsp[-4].minor.yy401, yymsp[-2].minor.yy297); - yygotominor.yy91->initializer = yymsp[-1].minor.yy401; - yygotominor.yy91->flags.attribute = true; -} -#line 2684 "expparse.c" - break; - case 72: /* derived_attribute_rep ::= derived_attribute */ - case 176: /* inverse_attr_list ::= inverse_attr */ yytestcase(yyruleno==176); -#line 733 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy91); -} -#line 2693 "expparse.c" - break; - case 73: /* derived_attribute_rep ::= derived_attribute_rep derived_attribute */ - case 177: /* inverse_attr_list ::= inverse_attr_list inverse_attr */ yytestcase(yyruleno==177); -#line 738 "expparse.y" -{ - yygotominor.yy371 = yymsp[-1].minor.yy371; - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy91); -} -#line 2702 "expparse.c" - break; - case 74: /* entity_body ::= explicit_attr_list derive_decl inverse_clause unique_clause where_rule_OPT */ -#line 745 "expparse.y" -{ - yygotominor.yy176.attributes = yymsp[-4].minor.yy371; - /* this is flattened out in entity_decl - DEL */ - LISTadd_last(yygotominor.yy176.attributes, (Generic)yymsp[-3].minor.yy371); - - if (yymsp[-2].minor.yy371 != LIST_NULL) { - LISTadd_last(yygotominor.yy176.attributes, (Generic)yymsp[-2].minor.yy371); - } - - yygotominor.yy176.unique = yymsp[-1].minor.yy371; - yygotominor.yy176.where = yymsp[0].minor.yy371; -} -#line 2718 "expparse.c" - break; - case 75: /* entity_decl ::= entity_header subsuper_decl semicolon entity_body TOK_END_ENTITY semicolon */ -#line 760 "expparse.y" -{ - CURRENT_SCOPE->u.entity->subtype_expression = yymsp[-4].minor.yy242.subtypes; - CURRENT_SCOPE->u.entity->supertype_symbols = yymsp[-4].minor.yy242.supertypes; - LISTdo( yymsp[-2].minor.yy176.attributes, l, Linked_List ) { - LISTdo_n( l, a, Variable, b ) { - ENTITYadd_attribute(CURRENT_SCOPE, a); - } LISTod; - } LISTod; - CURRENT_SCOPE->u.entity->abstract = yymsp[-4].minor.yy242.abstract; - CURRENT_SCOPE->u.entity->unique = yymsp[-2].minor.yy176.unique; - CURRENT_SCOPE->where = yymsp[-2].minor.yy176.where; - POP_SCOPE(); -} -#line 2735 "expparse.c" - break; - case 76: /* entity_header ::= TOK_ENTITY TOK_IDENTIFIER */ -#line 775 "expparse.y" -{ - Entity e = ENTITYcreate(yymsp[0].minor.yy0.symbol); - - if (print_objects_while_running & OBJ_ENTITY_BITS) { - fprintf( stderr, "parse: %s (entity)\n", yymsp[0].minor.yy0.symbol->name); - } - - PUSH_SCOPE(e, yymsp[0].minor.yy0.symbol, OBJ_ENTITY); -} -#line 2748 "expparse.c" - break; - case 77: /* enumeration_type ::= TOK_ENUMERATION TOK_OF nested_id_list */ -#line 786 "expparse.y" -{ - int value = 0; - Expression x; - Symbol *tmp; - TypeBody tb; - tb = TYPEBODYcreate(enumeration_); - CURRENT_SCOPE->u.type->head = 0; - CURRENT_SCOPE->u.type->body = tb; - tb->list = yymsp[0].minor.yy371; - - if (!CURRENT_SCOPE->symbol_table) { - CURRENT_SCOPE->symbol_table = DICTcreate(25); - } - if (!PREVIOUS_SCOPE->enum_table) { - PREVIOUS_SCOPE->enum_table = DICTcreate(25); - } - LISTdo_links(yymsp[0].minor.yy371, id) { - tmp = (Symbol *)id->data; - id->data = (Generic)(x = EXPcreate(CURRENT_SCOPE)); - x->symbol = *(tmp); - x->u.integer = ++value; - - /* define both in enum scope and scope of */ - /* 1st visibility */ - DICT_define(CURRENT_SCOPE->symbol_table, x->symbol.name, - (Generic)x, &x->symbol, OBJ_EXPRESSION); - DICTdefine(PREVIOUS_SCOPE->enum_table, x->symbol.name, - (Generic)x, &x->symbol, OBJ_EXPRESSION); - SYMBOL_destroy(tmp); - } LISTod; -} -#line 2783 "expparse.c" - break; - case 78: /* escape_statement ::= TOK_ESCAPE semicolon */ -#line 819 "expparse.y" -{ - yygotominor.yy332 = STATEMENT_ESCAPE; -} -#line 2790 "expparse.c" - break; - case 79: /* attribute_decl ::= TOK_IDENTIFIER */ -#line 834 "expparse.y" -{ - yygotominor.yy401 = EXPcreate(Type_Attribute); - yygotominor.yy401->symbol = *yymsp[0].minor.yy0.symbol; - SYMBOL_destroy(yymsp[0].minor.yy0.symbol); -} -#line 2799 "expparse.c" - break; - case 80: /* attribute_decl ::= TOK_SELF TOK_BACKSLASH TOK_IDENTIFIER TOK_DOT TOK_IDENTIFIER */ -#line 841 "expparse.y" -{ - yygotominor.yy401 = EXPcreate(Type_Expression); - yygotominor.yy401->e.op1 = EXPcreate(Type_Expression); - yygotominor.yy401->e.op1->e.op_code = OP_GROUP; - yygotominor.yy401->e.op1->e.op1 = EXPcreate(Type_Self); - yygotominor.yy401->e.op1->e.op2 = EXPcreate_from_symbol(Type_Entity, yymsp[-2].minor.yy0.symbol); - SYMBOL_destroy(yymsp[-2].minor.yy0.symbol); - - yygotominor.yy401->e.op_code = OP_DOT; - yygotominor.yy401->e.op2 = EXPcreate_from_symbol(Type_Attribute, yymsp[0].minor.yy0.symbol); - SYMBOL_destroy(yymsp[0].minor.yy0.symbol); -} -#line 2815 "expparse.c" - break; - case 81: /* attribute_decl_list ::= attribute_decl */ -#line 855 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); - -} -#line 2824 "expparse.c" - break; - case 82: /* attribute_decl_list ::= attribute_decl_list TOK_COMMA attribute_decl */ - case 114: /* expression_list ::= expression_list TOK_COMMA expression */ yytestcase(yyruleno==114); - case 314: /* qualified_attr_list ::= qualified_attr_list TOK_COMMA qualified_attr */ yytestcase(yyruleno==314); -#line 862 "expparse.y" -{ - yygotominor.yy371 = yymsp[-2].minor.yy371; - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy401); -} -#line 2834 "expparse.c" - break; - case 83: /* optional ::= */ -#line 868 "expparse.y" -{ - yygotominor.yy252.optional = 0; -} -#line 2841 "expparse.c" - break; - case 84: /* optional ::= TOK_OPTIONAL */ -#line 872 "expparse.y" -{ - yygotominor.yy252.optional = 1; -} -#line 2848 "expparse.c" - break; - case 85: /* explicit_attribute ::= attribute_decl_list TOK_COLON optional attribute_type semicolon */ -#line 878 "expparse.y" -{ - Variable v; - - LISTdo_links (yymsp[-4].minor.yy371, attr) - v = VARcreate((Expression)attr->data, yymsp[-1].minor.yy297); - v->flags.optional = yymsp[-2].minor.yy252.optional; - v->flags.attribute = true; - attr->data = (Generic)v; - LISTod; - - yygotominor.yy371 = yymsp[-4].minor.yy371; -} -#line 2864 "expparse.c" - break; - case 90: /* expression ::= expression TOK_AND expression */ -#line 907 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_AND, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2873 "expparse.c" - break; - case 91: /* expression ::= expression TOK_OR expression */ -#line 913 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_OR, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2882 "expparse.c" - break; - case 92: /* expression ::= expression TOK_XOR expression */ -#line 919 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_XOR, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2891 "expparse.c" - break; - case 93: /* expression ::= expression TOK_LESS_THAN expression */ -#line 925 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_LESS_THAN, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2900 "expparse.c" - break; - case 94: /* expression ::= expression TOK_GREATER_THAN expression */ -#line 931 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_GREATER_THAN, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2909 "expparse.c" - break; - case 95: /* expression ::= expression TOK_EQUAL expression */ -#line 937 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_EQUAL, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2918 "expparse.c" - break; - case 96: /* expression ::= expression TOK_LESS_EQUAL expression */ -#line 943 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_LESS_EQUAL, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2927 "expparse.c" - break; - case 97: /* expression ::= expression TOK_GREATER_EQUAL expression */ -#line 949 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_GREATER_EQUAL, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2936 "expparse.c" - break; - case 98: /* expression ::= expression TOK_NOT_EQUAL expression */ -#line 955 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_NOT_EQUAL, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2945 "expparse.c" - break; - case 99: /* expression ::= expression TOK_INST_EQUAL expression */ -#line 961 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_INST_EQUAL, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2954 "expparse.c" - break; - case 100: /* expression ::= expression TOK_INST_NOT_EQUAL expression */ -#line 967 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_INST_NOT_EQUAL, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2963 "expparse.c" - break; - case 101: /* expression ::= expression TOK_IN expression */ -#line 973 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_IN, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2972 "expparse.c" - break; - case 102: /* expression ::= expression TOK_LIKE expression */ -#line 979 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_LIKE, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2981 "expparse.c" - break; - case 103: /* expression ::= simple_expression cardinality_op simple_expression */ - case 240: /* right_curl ::= TOK_RIGHT_CURL */ yytestcase(yyruleno==240); - case 254: /* semicolon ::= TOK_SEMICOLON */ yytestcase(yyruleno==254); -#line 985 "expparse.y" -{ - yyerrok; -} -#line 2990 "expparse.c" - break; - case 105: /* simple_expression ::= simple_expression TOK_CONCAT_OP simple_expression */ -#line 995 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_CONCAT, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 2999 "expparse.c" - break; - case 106: /* simple_expression ::= simple_expression TOK_EXP simple_expression */ -#line 1001 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_EXP, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 3008 "expparse.c" - break; - case 107: /* simple_expression ::= simple_expression TOK_TIMES simple_expression */ -#line 1007 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_TIMES, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 3017 "expparse.c" - break; - case 108: /* simple_expression ::= simple_expression TOK_DIV simple_expression */ -#line 1013 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_DIV, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 3026 "expparse.c" - break; - case 109: /* simple_expression ::= simple_expression TOK_REAL_DIV simple_expression */ -#line 1019 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_REAL_DIV, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 3035 "expparse.c" - break; - case 110: /* simple_expression ::= simple_expression TOK_MOD simple_expression */ -#line 1025 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_MOD, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 3044 "expparse.c" - break; - case 111: /* simple_expression ::= simple_expression TOK_PLUS simple_expression */ -#line 1031 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_PLUS, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 3053 "expparse.c" - break; - case 112: /* simple_expression ::= simple_expression TOK_MINUS simple_expression */ -#line 1037 "expparse.y" -{ - yyerrok; - - yygotominor.yy401 = BIN_EXPcreate(OP_MINUS, yymsp[-2].minor.yy401, yymsp[0].minor.yy401); -} -#line 3062 "expparse.c" - break; - case 115: /* var ::= */ -#line 1055 "expparse.y" -{ - yygotominor.yy252.var = 0; -} -#line 3069 "expparse.c" - break; - case 116: /* var ::= TOK_VAR */ -#line 1059 "expparse.y" -{ - yygotominor.yy252.var = 1; -} -#line 3076 "expparse.c" - break; - case 117: /* formal_parameter ::= var id_list TOK_COLON parameter_type */ -#line 1064 "expparse.y" -{ - Symbol *tmp; - Expression e; - Variable v; - - yygotominor.yy371 = yymsp[-2].minor.yy371; - LISTdo_links(yygotominor.yy371, param) - tmp = (Symbol*)param->data; - - e = EXPcreate_from_symbol(Type_Attribute, tmp); - v = VARcreate(e, yymsp[0].minor.yy297); - v->flags.var = yymsp[-3].minor.yy252.var; /* NOTE this was flags.optional... ?! */ - v->flags.parameter = true; - param->data = (Generic)v; - - /* link it in to the current scope's dict */ - DICTdefine(CURRENT_SCOPE->symbol_table, - tmp->name, (Generic)v, tmp, OBJ_VARIABLE); - - LISTod; -} -#line 3101 "expparse.c" - break; - case 118: /* formal_parameter_list ::= */ - case 179: /* inverse_clause ::= */ yytestcase(yyruleno==179); - case 328: /* where_rule_OPT ::= */ yytestcase(yyruleno==328); -#line 1087 "expparse.y" -{ - yygotominor.yy371 = LIST_NULL; -} -#line 3110 "expparse.c" - break; - case 119: /* formal_parameter_list ::= TOK_LEFT_PAREN formal_parameter_rep TOK_RIGHT_PAREN */ -#line 1092 "expparse.y" -{ - yygotominor.yy371 = yymsp[-1].minor.yy371; - -} -#line 3118 "expparse.c" - break; - case 120: /* formal_parameter_rep ::= formal_parameter */ -#line 1098 "expparse.y" -{ - yygotominor.yy371 = yymsp[0].minor.yy371; - -} -#line 3126 "expparse.c" - break; - case 121: /* formal_parameter_rep ::= formal_parameter_rep semicolon formal_parameter */ -#line 1104 "expparse.y" -{ - yygotominor.yy371 = yymsp[-2].minor.yy371; - LISTadd_all(yygotominor.yy371, yymsp[0].minor.yy371); -} -#line 3134 "expparse.c" - break; - case 126: /* function_call ::= function_id actual_parameters */ -#line 1129 "expparse.y" -{ - yygotominor.yy401 = EXPcreate(Type_Funcall); - yygotominor.yy401->symbol = *yymsp[-1].minor.yy275; - SYMBOL_destroy(yymsp[-1].minor.yy275); - yygotominor.yy401->u.funcall.list = yymsp[0].minor.yy371; -} -#line 3144 "expparse.c" - break; - case 127: /* function_decl ::= function_header action_body TOK_END_FUNCTION semicolon */ -#line 1138 "expparse.y" -{ - FUNCput_body(CURRENT_SCOPE, yymsp[-2].minor.yy371); - ALGput_full_text(CURRENT_SCOPE, yymsp[-3].minor.yy507, SCANtell()); - POP_SCOPE(); -} -#line 3153 "expparse.c" - break; - case 128: /* function_header ::= fh_lineno fh_push_scope fh_plist TOK_COLON parameter_type semicolon */ -#line 1146 "expparse.y" -{ - Function f = CURRENT_SCOPE; - - f->u.func->return_type = yymsp[-1].minor.yy297; - yygotominor.yy507 = yymsp[-5].minor.yy507; -} -#line 3163 "expparse.c" - break; - case 129: /* fh_lineno ::= TOK_FUNCTION */ - case 218: /* ph_get_line ::= */ yytestcase(yyruleno==218); - case 247: /* rh_get_line ::= */ yytestcase(yyruleno==247); -#line 1154 "expparse.y" -{ - yygotominor.yy507 = SCANtell(); -} -#line 3172 "expparse.c" - break; - case 130: /* fh_push_scope ::= TOK_IDENTIFIER */ -#line 1159 "expparse.y" -{ - Function f = ALGcreate(OBJ_FUNCTION); - tag_count = 0; - if (print_objects_while_running & OBJ_FUNCTION_BITS) { - fprintf( stderr, "parse: %s (function)\n", yymsp[0].minor.yy0.symbol->name); - } - PUSH_SCOPE(f, yymsp[0].minor.yy0.symbol, OBJ_FUNCTION); -} -#line 3184 "expparse.c" - break; - case 131: /* fh_plist ::= formal_parameter_list */ -#line 1169 "expparse.y" -{ - Function f = CURRENT_SCOPE; - f->u.func->parameters = yymsp[0].minor.yy371; - f->u.func->pcount = LISTget_length(yymsp[0].minor.yy371); - f->u.func->tag_count = tag_count; - tag_count = -1; /* done with parameters, no new tags can be defined */ -} -#line 3195 "expparse.c" - break; - case 132: /* function_id ::= TOK_IDENTIFIER */ - case 219: /* procedure_id ::= TOK_IDENTIFIER */ yytestcase(yyruleno==219); - case 220: /* procedure_id ::= TOK_BUILTIN_PROCEDURE */ yytestcase(yyruleno==220); -#line 1178 "expparse.y" -{ - yygotominor.yy275 = yymsp[0].minor.yy0.symbol; -} -#line 3204 "expparse.c" - break; - case 133: /* function_id ::= TOK_BUILTIN_FUNCTION */ -#line 1182 "expparse.y" -{ - yygotominor.yy275 = yymsp[0].minor.yy0.symbol; - -} -#line 3212 "expparse.c" - break; - case 134: /* conformant_aggregation ::= aggregate_type */ -#line 1188 "expparse.y" -{ - yygotominor.yy477 = yymsp[0].minor.yy477; - -} -#line 3220 "expparse.c" - break; - case 135: /* conformant_aggregation ::= TOK_ARRAY TOK_OF optional_or_unique parameter_type */ -#line 1194 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(array_); - yygotominor.yy477->flags.optional = yymsp[-1].minor.yy252.optional; - yygotominor.yy477->flags.unique = yymsp[-1].minor.yy252.unique; - yygotominor.yy477->base = yymsp[0].minor.yy297; -} -#line 3230 "expparse.c" - break; - case 136: /* conformant_aggregation ::= TOK_ARRAY bound_spec TOK_OF optional_or_unique parameter_type */ -#line 1202 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(array_); - yygotominor.yy477->flags.optional = yymsp[-1].minor.yy252.optional; - yygotominor.yy477->flags.unique = yymsp[-1].minor.yy252.unique; - yygotominor.yy477->base = yymsp[0].minor.yy297; - yygotominor.yy477->upper = yymsp[-3].minor.yy253.upper_limit; - yygotominor.yy477->lower = yymsp[-3].minor.yy253.lower_limit; -} -#line 3242 "expparse.c" - break; - case 137: /* conformant_aggregation ::= TOK_BAG TOK_OF parameter_type */ -#line 1211 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(bag_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - -} -#line 3251 "expparse.c" - break; - case 139: /* conformant_aggregation ::= TOK_LIST TOK_OF unique parameter_type */ -#line 1224 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(list_); - yygotominor.yy477->flags.unique = yymsp[-1].minor.yy252.unique; - yygotominor.yy477->base = yymsp[0].minor.yy297; - -} -#line 3261 "expparse.c" - break; - case 140: /* conformant_aggregation ::= TOK_LIST bound_spec TOK_OF unique parameter_type */ -#line 1232 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(list_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - yygotominor.yy477->flags.unique = yymsp[-1].minor.yy252.unique; - yygotominor.yy477->upper = yymsp[-3].minor.yy253.upper_limit; - yygotominor.yy477->lower = yymsp[-3].minor.yy253.lower_limit; -} -#line 3272 "expparse.c" - break; - case 141: /* conformant_aggregation ::= TOK_SET TOK_OF parameter_type */ - case 256: /* set_type ::= TOK_SET TOK_OF attribute_type */ yytestcase(yyruleno==256); -#line 1240 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(set_); - yygotominor.yy477->base = yymsp[0].minor.yy297; -} -#line 3281 "expparse.c" - break; - case 142: /* conformant_aggregation ::= TOK_SET bound_spec TOK_OF parameter_type */ -#line 1245 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(set_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - yygotominor.yy477->upper = yymsp[-2].minor.yy253.upper_limit; - yygotominor.yy477->lower = yymsp[-2].minor.yy253.lower_limit; -} -#line 3291 "expparse.c" - break; - case 143: /* generic_type ::= TOK_GENERIC */ -#line 1253 "expparse.y" -{ - yygotominor.yy297 = Type_Generic; - - if (tag_count < 0) { - Symbol sym; - sym.line = yylineno; - sym.filename = current_filename; - ERRORreport_with_symbol(UNLABELLED_PARAM_TYPE, &sym, - CURRENT_SCOPE_NAME); - } -} -#line 3306 "expparse.c" - break; - case 144: /* generic_type ::= TOK_GENERIC TOK_COLON TOK_IDENTIFIER */ -#line 1265 "expparse.y" -{ - TypeBody g = TYPEBODYcreate(generic_); - yygotominor.yy297 = TYPEcreate_from_body_anonymously(g); - - SCOPEadd_super(yygotominor.yy297); - - g->tag = TYPEcreate_user_defined_tag(yygotominor.yy297, CURRENT_SCOPE, yymsp[0].minor.yy0.symbol); - if (g->tag) { - SCOPEadd_super(g->tag); - } -} -#line 3321 "expparse.c" - break; - case 145: /* id_list ::= TOK_IDENTIFIER */ -#line 1278 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy0.symbol); - -} -#line 3330 "expparse.c" - break; - case 146: /* id_list ::= id_list TOK_COMMA TOK_IDENTIFIER */ -#line 1284 "expparse.y" -{ - yyerrok; - - yygotominor.yy371 = yymsp[-2].minor.yy371; - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy0.symbol); -} -#line 3340 "expparse.c" - break; - case 147: /* identifier ::= TOK_SELF */ -#line 1292 "expparse.y" -{ - yygotominor.yy401 = EXPcreate(Type_Self); -} -#line 3347 "expparse.c" - break; - case 148: /* identifier ::= TOK_QUESTION_MARK */ -#line 1296 "expparse.y" -{ - yygotominor.yy401 = LITERAL_INFINITY; -} -#line 3354 "expparse.c" - break; - case 149: /* identifier ::= TOK_IDENTIFIER */ -#line 1300 "expparse.y" -{ - yygotominor.yy401 = EXPcreate(Type_Identifier); - yygotominor.yy401->symbol = *(yymsp[0].minor.yy0.symbol); - SYMBOL_destroy(yymsp[0].minor.yy0.symbol); -} -#line 3363 "expparse.c" - break; - case 150: /* if_statement ::= TOK_IF expression TOK_THEN statement_rep TOK_END_IF semicolon */ -#line 1308 "expparse.y" -{ - yygotominor.yy332 = CONDcreate(yymsp[-4].minor.yy401, yymsp[-2].minor.yy371, STATEMENT_LIST_NULL); -} -#line 3370 "expparse.c" - break; - case 151: /* if_statement ::= TOK_IF expression TOK_THEN statement_rep TOK_ELSE statement_rep TOK_END_IF semicolon */ -#line 1313 "expparse.y" -{ - yygotominor.yy332 = CONDcreate(yymsp[-6].minor.yy401, yymsp[-4].minor.yy371, yymsp[-2].minor.yy371); -} -#line 3377 "expparse.c" - break; - case 152: /* include_directive ::= TOK_INCLUDE TOK_STRING_LITERAL semicolon */ -#line 1318 "expparse.y" -{ - SCANinclude_file(yymsp[-1].minor.yy0.string); -} -#line 3384 "expparse.c" - break; - case 153: /* increment_control ::= TOK_IDENTIFIER TOK_ASSIGNMENT expression TOK_TO expression by_expression */ -#line 1324 "expparse.y" -{ - Increment i = INCR_CTLcreate(yymsp[-5].minor.yy0.symbol, yymsp[-3].minor.yy401, yymsp[-1].minor.yy401, yymsp[0].minor.yy401); - - /* scope doesn't really have/need a name, I suppose */ - /* naming it by the iterator variable is fine */ - - PUSH_SCOPE(i, (Symbol *)0, OBJ_INCREMENT); -} -#line 3396 "expparse.c" - break; - case 155: /* rename ::= TOK_IDENTIFIER */ -#line 1342 "expparse.y" -{ - (*interface_func)(CURRENT_SCOPE, interface_schema, yymsp[0].minor.yy0.symbol, yymsp[0].minor.yy0.symbol); -} -#line 3403 "expparse.c" - break; - case 156: /* rename ::= TOK_IDENTIFIER TOK_AS TOK_IDENTIFIER */ -#line 1346 "expparse.y" -{ - (*interface_func)(CURRENT_SCOPE, interface_schema, yymsp[-2].minor.yy0.symbol, yymsp[0].minor.yy0.symbol); -} -#line 3410 "expparse.c" - break; - case 158: /* rename_list ::= rename_list TOK_COMMA rename */ - case 161: /* reference_clause ::= reference_head parened_rename_list semicolon */ yytestcase(yyruleno==161); - case 164: /* use_clause ::= use_head parened_rename_list semicolon */ yytestcase(yyruleno==164); - case 249: /* schema_body ::= interface_specification_list constant_decl block_list */ yytestcase(yyruleno==249); - case 295: /* type_decl ::= td_start TOK_END_TYPE semicolon */ yytestcase(yyruleno==295); -#line 1355 "expparse.y" -{ - yygotominor.yy0 = yymsp[-2].minor.yy0; -} -#line 3421 "expparse.c" - break; - case 160: /* reference_clause ::= TOK_REFERENCE TOK_FROM TOK_IDENTIFIER semicolon */ -#line 1365 "expparse.y" -{ - if (!CURRENT_SCHEMA->ref_schemas) { - CURRENT_SCHEMA->ref_schemas = LISTcreate(); - } - - LISTadd_last(CURRENT_SCHEMA->ref_schemas, (Generic)yymsp[-1].minor.yy0.symbol); -} -#line 3432 "expparse.c" - break; - case 162: /* reference_head ::= TOK_REFERENCE TOK_FROM TOK_IDENTIFIER */ -#line 1378 "expparse.y" -{ - interface_schema = yymsp[0].minor.yy0.symbol; - interface_func = SCHEMAadd_reference; -} -#line 3440 "expparse.c" - break; - case 163: /* use_clause ::= TOK_USE TOK_FROM TOK_IDENTIFIER semicolon */ -#line 1384 "expparse.y" -{ - if (!CURRENT_SCHEMA->use_schemas) { - CURRENT_SCHEMA->use_schemas = LISTcreate(); - } - - LISTadd_last(CURRENT_SCHEMA->use_schemas, (Generic)yymsp[-1].minor.yy0.symbol); -} -#line 3451 "expparse.c" - break; - case 165: /* use_head ::= TOK_USE TOK_FROM TOK_IDENTIFIER */ -#line 1397 "expparse.y" -{ - interface_schema = yymsp[0].minor.yy0.symbol; - interface_func = SCHEMAadd_use; -} -#line 3459 "expparse.c" - break; - case 170: /* interval ::= TOK_LEFT_CURL simple_expression rel_op simple_expression rel_op simple_expression right_curl */ -#line 1420 "expparse.y" -{ - Expression tmp1, tmp2; - - yygotominor.yy401 = (Expression)0; - tmp1 = BIN_EXPcreate(yymsp[-4].minor.yy126, yymsp[-5].minor.yy401, yymsp[-3].minor.yy401); - tmp2 = BIN_EXPcreate(yymsp[-2].minor.yy126, yymsp[-3].minor.yy401, yymsp[-1].minor.yy401); - yygotominor.yy401 = BIN_EXPcreate(OP_AND, tmp1, tmp2); -} -#line 3471 "expparse.c" - break; - case 171: /* set_or_bag_of_entity ::= defined_type */ - case 289: /* type ::= defined_type */ yytestcase(yyruleno==289); -#line 1432 "expparse.y" -{ - yygotominor.yy378.type = yymsp[0].minor.yy297; - yygotominor.yy378.body = 0; -} -#line 3480 "expparse.c" - break; - case 172: /* set_or_bag_of_entity ::= TOK_SET TOK_OF defined_type */ -#line 1437 "expparse.y" -{ - yygotominor.yy378.type = 0; - yygotominor.yy378.body = TYPEBODYcreate(set_); - yygotominor.yy378.body->base = yymsp[0].minor.yy297; - -} -#line 3490 "expparse.c" - break; - case 173: /* set_or_bag_of_entity ::= TOK_SET bound_spec TOK_OF defined_type */ -#line 1444 "expparse.y" -{ - yygotominor.yy378.type = 0; - yygotominor.yy378.body = TYPEBODYcreate(set_); - yygotominor.yy378.body->base = yymsp[0].minor.yy297; - yygotominor.yy378.body->upper = yymsp[-2].minor.yy253.upper_limit; - yygotominor.yy378.body->lower = yymsp[-2].minor.yy253.lower_limit; -} -#line 3501 "expparse.c" - break; - case 174: /* set_or_bag_of_entity ::= TOK_BAG bound_spec TOK_OF defined_type */ -#line 1452 "expparse.y" -{ - yygotominor.yy378.type = 0; - yygotominor.yy378.body = TYPEBODYcreate(bag_); - yygotominor.yy378.body->base = yymsp[0].minor.yy297; - yygotominor.yy378.body->upper = yymsp[-2].minor.yy253.upper_limit; - yygotominor.yy378.body->lower = yymsp[-2].minor.yy253.lower_limit; -} -#line 3512 "expparse.c" - break; - case 175: /* set_or_bag_of_entity ::= TOK_BAG TOK_OF defined_type */ -#line 1460 "expparse.y" -{ - yygotominor.yy378.type = 0; - yygotominor.yy378.body = TYPEBODYcreate(bag_); - yygotominor.yy378.body->base = yymsp[0].minor.yy297; -} -#line 3521 "expparse.c" - break; - case 178: /* inverse_attr ::= attribute_decl TOK_COLON set_or_bag_of_entity TOK_FOR TOK_IDENTIFIER semicolon */ -#line 1487 "expparse.y" -{ - if (yymsp[-3].minor.yy378.type) { - yygotominor.yy91 = VARcreate(yymsp[-5].minor.yy401, yymsp[-3].minor.yy378.type); - } else { - Type t = TYPEcreate_from_body_anonymously(yymsp[-3].minor.yy378.body); - SCOPEadd_super(t); - yygotominor.yy91 = VARcreate(yymsp[-5].minor.yy401, t); - } - - yygotominor.yy91->flags.attribute = true; - yygotominor.yy91->inverse_symbol = yymsp[-1].minor.yy0.symbol; -} -#line 3537 "expparse.c" - break; - case 182: /* list_type ::= TOK_LIST bound_spec TOK_OF unique attribute_type */ -#line 1521 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(list_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - yygotominor.yy477->flags.unique = yymsp[-1].minor.yy252.unique; - yygotominor.yy477->lower = yymsp[-3].minor.yy253.lower_limit; - yygotominor.yy477->upper = yymsp[-3].minor.yy253.upper_limit; -} -#line 3548 "expparse.c" - break; - case 183: /* list_type ::= TOK_LIST TOK_OF unique attribute_type */ -#line 1529 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(list_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - yygotominor.yy477->flags.unique = yymsp[-1].minor.yy252.unique; -} -#line 3557 "expparse.c" - break; - case 184: /* literal ::= TOK_INTEGER_LITERAL */ -#line 1536 "expparse.y" -{ - if (yymsp[0].minor.yy0.iVal == 0) { - yygotominor.yy401 = LITERAL_ZERO; - } else if (yymsp[0].minor.yy0.iVal == 1) { - yygotominor.yy401 = LITERAL_ONE; - } else { - yygotominor.yy401 = EXPcreate_simple(Type_Integer); - yygotominor.yy401->u.integer = (int)yymsp[0].minor.yy0.iVal; - resolved_all(yygotominor.yy401); - } -} -#line 3572 "expparse.c" - break; - case 185: /* literal ::= TOK_REAL_LITERAL */ -#line 1548 "expparse.y" -{ - /* if rVal (a double) is nonzero and has magnitude <= the smallest non-denormal float, print a warning */ - if( ( fabs( yymsp[0].minor.yy0.rVal ) <= FLT_MIN ) && ( fabs( yymsp[0].minor.yy0.rVal ) > 0 ) ) { - Symbol sym; - sym.line = yylineno; - sym.filename = current_filename; - ERRORreport_with_symbol(WARN_SMALL_REAL, &sym, yymsp[0].minor.yy0.rVal ); - } - if( fabs( yymsp[0].minor.yy0.rVal ) < DBL_MIN ) { - yygotominor.yy401 = LITERAL_ZERO; - } else { - yygotominor.yy401 = EXPcreate_simple(Type_Real); - yygotominor.yy401->u.real = yymsp[0].minor.yy0.rVal; - resolved_all(yygotominor.yy401); - } -} -#line 3592 "expparse.c" - break; - case 186: /* literal ::= TOK_STRING_LITERAL */ -#line 1565 "expparse.y" -{ - yygotominor.yy401 = EXPcreate_simple(Type_String); - yygotominor.yy401->symbol.name = yymsp[0].minor.yy0.string; - resolved_all(yygotominor.yy401); -} -#line 3601 "expparse.c" - break; - case 187: /* literal ::= TOK_STRING_LITERAL_ENCODED */ -#line 1571 "expparse.y" -{ - yygotominor.yy401 = EXPcreate_simple(Type_String_Encoded); - yygotominor.yy401->symbol.name = yymsp[0].minor.yy0.string; - resolved_all(yygotominor.yy401); -} -#line 3610 "expparse.c" - break; - case 188: /* literal ::= TOK_LOGICAL_LITERAL */ -#line 1577 "expparse.y" -{ - yygotominor.yy401 = EXPcreate_simple(Type_Logical); - yygotominor.yy401->u.logical = yymsp[0].minor.yy0.logical; - resolved_all(yygotominor.yy401); -} -#line 3619 "expparse.c" - break; - case 189: /* literal ::= TOK_BINARY_LITERAL */ -#line 1583 "expparse.y" -{ - yygotominor.yy401 = EXPcreate_simple(Type_Binary); - yygotominor.yy401->symbol.name = yymsp[0].minor.yy0.binary; - resolved_all(yygotominor.yy401); -} -#line 3628 "expparse.c" - break; - case 192: /* local_variable ::= id_list TOK_COLON parameter_type semicolon */ -#line 1599 "expparse.y" -{ - Expression e; - Variable v; - LISTdo(yymsp[-3].minor.yy371, sym, Symbol *) - - /* convert symbol to name-expression */ - - e = EXPcreate(Type_Attribute); - e->symbol = *sym; SYMBOL_destroy(sym); - v = VARcreate(e, yymsp[-1].minor.yy297); - v->offset = local_var_count++; - DICTdefine(CURRENT_SCOPE->symbol_table, e->symbol.name, (Generic)v, &e->symbol, OBJ_VARIABLE); - LISTod; - LISTfree(yymsp[-3].minor.yy371); -} -#line 3647 "expparse.c" - break; - case 193: /* local_variable ::= id_list TOK_COLON parameter_type local_initializer semicolon */ -#line 1616 "expparse.y" -{ - Expression e; - Variable v; - LISTdo(yymsp[-4].minor.yy371, sym, Symbol *) - e = EXPcreate(Type_Attribute); - e->symbol = *sym; SYMBOL_destroy(sym); - v = VARcreate(e, yymsp[-2].minor.yy297); - v->offset = local_var_count++; - v->initializer = yymsp[-1].minor.yy401; - DICTdefine(CURRENT_SCOPE->symbol_table, e->symbol.name, (Generic)v, - &e->symbol, OBJ_VARIABLE); - LISTod; - LISTfree(yymsp[-4].minor.yy371); -} -#line 3665 "expparse.c" - break; - case 197: /* local_decl_rules_on ::= */ -#line 1640 "expparse.y" -{ - tag_count = 0; /* don't signal an error if we find a generic_type */ - local_var_count = 0; /* used to keep local var decl's in the same order */ -} -#line 3673 "expparse.c" - break; - case 198: /* local_decl_rules_off ::= */ -#line 1646 "expparse.y" -{ - tag_count = -1; /* signal an error if we find a generic_type */ -} -#line 3680 "expparse.c" - break; - case 199: /* defined_type ::= TOK_IDENTIFIER */ -#line 1651 "expparse.y" -{ - yygotominor.yy297 = TYPEcreate_name(yymsp[0].minor.yy0.symbol); - SCOPEadd_super(yygotominor.yy297); - SYMBOL_destroy(yymsp[0].minor.yy0.symbol); -} -#line 3689 "expparse.c" - break; - case 200: /* defined_type_list ::= defined_type */ -#line 1658 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy297); - -} -#line 3698 "expparse.c" - break; - case 201: /* defined_type_list ::= defined_type_list TOK_COMMA defined_type */ -#line 1664 "expparse.y" -{ - yygotominor.yy371 = yymsp[-2].minor.yy371; - LISTadd_last(yygotominor.yy371, - (Generic)yymsp[0].minor.yy297); -} -#line 3707 "expparse.c" - break; - case 204: /* optional_or_unique ::= */ -#line 1681 "expparse.y" -{ - yygotominor.yy252.unique = 0; - yygotominor.yy252.optional = 0; -} -#line 3715 "expparse.c" - break; - case 205: /* optional_or_unique ::= TOK_OPTIONAL */ -#line 1686 "expparse.y" -{ - yygotominor.yy252.unique = 0; - yygotominor.yy252.optional = 1; -} -#line 3723 "expparse.c" - break; - case 206: /* optional_or_unique ::= TOK_UNIQUE */ -#line 1691 "expparse.y" -{ - yygotominor.yy252.unique = 1; - yygotominor.yy252.optional = 0; -} -#line 3731 "expparse.c" - break; - case 207: /* optional_or_unique ::= TOK_OPTIONAL TOK_UNIQUE */ - case 208: /* optional_or_unique ::= TOK_UNIQUE TOK_OPTIONAL */ yytestcase(yyruleno==208); -#line 1696 "expparse.y" -{ - yygotominor.yy252.unique = 1; - yygotominor.yy252.optional = 1; -} -#line 3740 "expparse.c" - break; - case 209: /* optional_fixed ::= */ -#line 1707 "expparse.y" -{ - yygotominor.yy252.fixed = 0; -} -#line 3747 "expparse.c" - break; - case 210: /* optional_fixed ::= TOK_FIXED */ -#line 1711 "expparse.y" -{ - yygotominor.yy252.fixed = 1; -} -#line 3754 "expparse.c" - break; - case 211: /* precision_spec ::= */ -#line 1716 "expparse.y" -{ - yygotominor.yy401 = (Expression)0; -} -#line 3761 "expparse.c" - break; - case 212: /* precision_spec ::= TOK_LEFT_PAREN expression TOK_RIGHT_PAREN */ - case 304: /* unary_expression ::= TOK_LEFT_PAREN expression TOK_RIGHT_PAREN */ yytestcase(yyruleno==304); -#line 1720 "expparse.y" -{ - yygotominor.yy401 = yymsp[-1].minor.yy401; -} -#line 3769 "expparse.c" - break; - case 213: /* proc_call_statement ::= procedure_id actual_parameters semicolon */ -#line 1730 "expparse.y" -{ - yygotominor.yy332 = PCALLcreate(yymsp[-1].minor.yy371); - yygotominor.yy332->symbol = *(yymsp[-2].minor.yy275); -} -#line 3777 "expparse.c" - break; - case 214: /* proc_call_statement ::= procedure_id semicolon */ -#line 1735 "expparse.y" -{ - yygotominor.yy332 = PCALLcreate((Linked_List)0); - yygotominor.yy332->symbol = *(yymsp[-1].minor.yy275); -} -#line 3785 "expparse.c" - break; - case 215: /* procedure_decl ::= procedure_header action_body TOK_END_PROCEDURE semicolon */ -#line 1742 "expparse.y" -{ - PROCput_body(CURRENT_SCOPE, yymsp[-2].minor.yy371); - ALGput_full_text(CURRENT_SCOPE, yymsp[-3].minor.yy507, SCANtell()); - POP_SCOPE(); -} -#line 3794 "expparse.c" - break; - case 216: /* procedure_header ::= TOK_PROCEDURE ph_get_line ph_push_scope formal_parameter_list semicolon */ -#line 1750 "expparse.y" -{ - Procedure p = CURRENT_SCOPE; - p->u.proc->parameters = yymsp[-1].minor.yy371; - p->u.proc->pcount = LISTget_length(yymsp[-1].minor.yy371); - p->u.proc->tag_count = tag_count; - tag_count = -1; /* done with parameters, no new tags can be defined */ - yygotominor.yy507 = yymsp[-3].minor.yy507; -} -#line 3806 "expparse.c" - break; - case 217: /* ph_push_scope ::= TOK_IDENTIFIER */ -#line 1760 "expparse.y" -{ - Procedure p = ALGcreate(OBJ_PROCEDURE); - tag_count = 0; - - if (print_objects_while_running & OBJ_PROCEDURE_BITS) { - fprintf( stderr, "parse: %s (procedure)\n", yymsp[0].minor.yy0.symbol->name); - } - - PUSH_SCOPE(p, yymsp[0].minor.yy0.symbol, OBJ_PROCEDURE); -} -#line 3820 "expparse.c" - break; - case 221: /* group_ref ::= TOK_BACKSLASH TOK_IDENTIFIER */ -#line 1786 "expparse.y" -{ - yygotominor.yy401 = BIN_EXPcreate(OP_GROUP, (Expression)0, (Expression)0); - yygotominor.yy401->e.op2 = EXPcreate(Type_Identifier); - yygotominor.yy401->e.op2->symbol = *yymsp[0].minor.yy0.symbol; - SYMBOL_destroy(yymsp[0].minor.yy0.symbol); -} -#line 3830 "expparse.c" - break; - case 222: /* qualifier ::= TOK_DOT TOK_IDENTIFIER */ -#line 1794 "expparse.y" -{ - yygotominor.yy46.expr = yygotominor.yy46.first = BIN_EXPcreate(OP_DOT, (Expression)0, (Expression)0); - yygotominor.yy46.expr->e.op2 = EXPcreate(Type_Identifier); - yygotominor.yy46.expr->e.op2->symbol = *yymsp[0].minor.yy0.symbol; - SYMBOL_destroy(yymsp[0].minor.yy0.symbol); -} -#line 3840 "expparse.c" - break; - case 223: /* qualifier ::= TOK_BACKSLASH TOK_IDENTIFIER */ -#line 1801 "expparse.y" -{ - yygotominor.yy46.expr = yygotominor.yy46.first = BIN_EXPcreate(OP_GROUP, (Expression)0, (Expression)0); - yygotominor.yy46.expr->e.op2 = EXPcreate(Type_Identifier); - yygotominor.yy46.expr->e.op2->symbol = *yymsp[0].minor.yy0.symbol; - SYMBOL_destroy(yymsp[0].minor.yy0.symbol); -} -#line 3850 "expparse.c" - break; - case 224: /* qualifier ::= TOK_LEFT_BRACKET simple_expression TOK_RIGHT_BRACKET */ -#line 1810 "expparse.y" -{ - yygotominor.yy46.expr = yygotominor.yy46.first = BIN_EXPcreate(OP_ARRAY_ELEMENT, (Expression)0, - (Expression)0); - yygotominor.yy46.expr->e.op2 = yymsp[-1].minor.yy401; -} -#line 3859 "expparse.c" - break; - case 225: /* qualifier ::= TOK_LEFT_BRACKET simple_expression TOK_COLON simple_expression TOK_RIGHT_BRACKET */ -#line 1819 "expparse.y" -{ - yygotominor.yy46.expr = yygotominor.yy46.first = TERN_EXPcreate(OP_SUBCOMPONENT, (Expression)0, - (Expression)0, (Expression)0); - yygotominor.yy46.expr->e.op2 = yymsp[-3].minor.yy401; - yygotominor.yy46.expr->e.op3 = yymsp[-1].minor.yy401; -} -#line 3869 "expparse.c" - break; - case 226: /* query_expression ::= query_start expression TOK_RIGHT_PAREN */ -#line 1827 "expparse.y" -{ - yygotominor.yy401 = yymsp[-2].minor.yy401; - yygotominor.yy401->u.query->expression = yymsp[-1].minor.yy401; - POP_SCOPE(); -} -#line 3878 "expparse.c" - break; - case 227: /* query_start ::= TOK_QUERY TOK_LEFT_PAREN TOK_IDENTIFIER TOK_ALL_IN expression TOK_SUCH_THAT */ -#line 1835 "expparse.y" -{ - yygotominor.yy401 = QUERYcreate(yymsp[-3].minor.yy0.symbol, yymsp[-1].minor.yy401); - SYMBOL_destroy(yymsp[-3].minor.yy0.symbol); - PUSH_SCOPE(yygotominor.yy401->u.query->scope, (Symbol *)0, OBJ_QUERY); -} -#line 3887 "expparse.c" - break; - case 228: /* rel_op ::= TOK_LESS_THAN */ -#line 1842 "expparse.y" -{ - yygotominor.yy126 = OP_LESS_THAN; -} -#line 3894 "expparse.c" - break; - case 229: /* rel_op ::= TOK_GREATER_THAN */ -#line 1846 "expparse.y" -{ - yygotominor.yy126 = OP_GREATER_THAN; -} -#line 3901 "expparse.c" - break; - case 230: /* rel_op ::= TOK_EQUAL */ -#line 1850 "expparse.y" -{ - yygotominor.yy126 = OP_EQUAL; -} -#line 3908 "expparse.c" - break; - case 231: /* rel_op ::= TOK_LESS_EQUAL */ -#line 1854 "expparse.y" -{ - yygotominor.yy126 = OP_LESS_EQUAL; -} -#line 3915 "expparse.c" - break; - case 232: /* rel_op ::= TOK_GREATER_EQUAL */ -#line 1858 "expparse.y" -{ - yygotominor.yy126 = OP_GREATER_EQUAL; -} -#line 3922 "expparse.c" - break; - case 233: /* rel_op ::= TOK_NOT_EQUAL */ -#line 1862 "expparse.y" -{ - yygotominor.yy126 = OP_NOT_EQUAL; -} -#line 3929 "expparse.c" - break; - case 234: /* rel_op ::= TOK_INST_EQUAL */ -#line 1866 "expparse.y" -{ - yygotominor.yy126 = OP_INST_EQUAL; -} -#line 3936 "expparse.c" - break; - case 235: /* rel_op ::= TOK_INST_NOT_EQUAL */ -#line 1870 "expparse.y" -{ - yygotominor.yy126 = OP_INST_NOT_EQUAL; -} -#line 3943 "expparse.c" - break; - case 236: /* repeat_statement ::= TOK_REPEAT increment_control while_control until_control semicolon statement_rep TOK_END_REPEAT semicolon */ -#line 1878 "expparse.y" -{ - yygotominor.yy332 = LOOPcreate(CURRENT_SCOPE, yymsp[-5].minor.yy401, yymsp[-4].minor.yy401, yymsp[-2].minor.yy371); - - /* matching PUSH_SCOPE is in increment_control */ - POP_SCOPE(); -} -#line 3953 "expparse.c" - break; - case 237: /* repeat_statement ::= TOK_REPEAT while_control until_control semicolon statement_rep TOK_END_REPEAT semicolon */ -#line 1886 "expparse.y" -{ - yygotominor.yy332 = LOOPcreate((struct Scope_ *)0, yymsp[-5].minor.yy401, yymsp[-4].minor.yy401, yymsp[-2].minor.yy371); -} -#line 3960 "expparse.c" - break; - case 238: /* return_statement ::= TOK_RETURN semicolon */ -#line 1891 "expparse.y" -{ - yygotominor.yy332 = RETcreate((Expression)0); -} -#line 3967 "expparse.c" - break; - case 239: /* return_statement ::= TOK_RETURN TOK_LEFT_PAREN expression TOK_RIGHT_PAREN semicolon */ -#line 1896 "expparse.y" -{ - yygotominor.yy332 = RETcreate(yymsp[-2].minor.yy401); -} -#line 3974 "expparse.c" - break; - case 241: /* rule_decl ::= rule_header action_body where_rule TOK_END_RULE semicolon */ -#line 1907 "expparse.y" -{ - RULEput_body(CURRENT_SCOPE, yymsp[-3].minor.yy371); - RULEput_where(CURRENT_SCOPE, yymsp[-2].minor.yy371); - ALGput_full_text(CURRENT_SCOPE, yymsp[-4].minor.yy507, SCANtell()); - POP_SCOPE(); -} -#line 3984 "expparse.c" - break; - case 242: /* rule_formal_parameter ::= TOK_IDENTIFIER */ -#line 1915 "expparse.y" -{ - Expression e; - Type t; - - /* it's true that we know it will be an entity_ type later */ - TypeBody tb = TYPEBODYcreate(set_); - tb->base = TYPEcreate_name(yymsp[0].minor.yy0.symbol); - SCOPEadd_super(tb->base); - t = TYPEcreate_from_body_anonymously(tb); - SCOPEadd_super(t); - e = EXPcreate_from_symbol(t, yymsp[0].minor.yy0.symbol); - yygotominor.yy91 = VARcreate(e, t); - yygotominor.yy91->flags.attribute = true; - yygotominor.yy91->flags.parameter = true; - - /* link it in to the current scope's dict */ - DICTdefine(CURRENT_SCOPE->symbol_table, yymsp[0].minor.yy0.symbol->name, (Generic)yygotominor.yy91, - yymsp[0].minor.yy0.symbol, OBJ_VARIABLE); -} -#line 4007 "expparse.c" - break; - case 243: /* rule_formal_parameter_list ::= rule_formal_parameter */ -#line 1936 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy91); -} -#line 4015 "expparse.c" - break; - case 244: /* rule_formal_parameter_list ::= rule_formal_parameter_list TOK_COMMA rule_formal_parameter */ -#line 1942 "expparse.y" -{ - yygotominor.yy371 = yymsp[-2].minor.yy371; - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy91); -} -#line 4023 "expparse.c" - break; - case 245: /* rule_header ::= rh_start rule_formal_parameter_list TOK_RIGHT_PAREN semicolon */ -#line 1949 "expparse.y" -{ - CURRENT_SCOPE->u.rule->parameters = yymsp[-2].minor.yy371; - - yygotominor.yy507 = yymsp[-3].minor.yy507; -} -#line 4032 "expparse.c" - break; - case 246: /* rh_start ::= TOK_RULE rh_get_line TOK_IDENTIFIER TOK_FOR TOK_LEFT_PAREN */ -#line 1957 "expparse.y" -{ - Rule r = ALGcreate(OBJ_RULE); - - if (print_objects_while_running & OBJ_RULE_BITS) { - fprintf( stderr, "parse: %s (rule)\n", yymsp[-2].minor.yy0.symbol->name); - } - - PUSH_SCOPE(r, yymsp[-2].minor.yy0.symbol, OBJ_RULE); - - yygotominor.yy507 = yymsp[-3].minor.yy507; -} -#line 4047 "expparse.c" - break; - case 250: /* schema_decl ::= schema_header schema_body TOK_END_SCHEMA semicolon */ -#line 1984 "expparse.y" -{ - POP_SCOPE(); -} -#line 4054 "expparse.c" - break; - case 252: /* schema_header ::= TOK_SCHEMA TOK_IDENTIFIER semicolon */ -#line 1993 "expparse.y" -{ - Schema schema = ( Schema ) DICTlookup(CURRENT_SCOPE->symbol_table, yymsp[-1].minor.yy0.symbol->name); - - if (print_objects_while_running & OBJ_SCHEMA_BITS) { - fprintf( stderr, "parse: %s (schema)\n", yymsp[-1].minor.yy0.symbol->name); - } - - if (EXPRESSignore_duplicate_schemas && schema) { - SCANskip_to_end_schema(parseData.scanner); - PUSH_SCOPE_DUMMY(); - } else { - schema = SCHEMAcreate(); - LISTadd_last(PARSEnew_schemas, (Generic)schema); - PUSH_SCOPE(schema, yymsp[-1].minor.yy0.symbol, OBJ_SCHEMA); - } -} -#line 4074 "expparse.c" - break; - case 253: /* select_type ::= TOK_SELECT TOK_LEFT_PAREN defined_type_list TOK_RIGHT_PAREN */ -#line 2012 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(select_); - yygotominor.yy477->list = yymsp[-1].minor.yy371; -} -#line 4082 "expparse.c" - break; - case 255: /* set_type ::= TOK_SET bound_spec TOK_OF attribute_type */ -#line 2023 "expparse.y" -{ - yygotominor.yy477 = TYPEBODYcreate(set_); - yygotominor.yy477->base = yymsp[0].minor.yy297; - yygotominor.yy477->lower = yymsp[-2].minor.yy253.lower_limit; - yygotominor.yy477->upper = yymsp[-2].minor.yy253.upper_limit; -} -#line 4092 "expparse.c" - break; - case 257: /* skip_statement ::= TOK_SKIP semicolon */ -#line 2036 "expparse.y" -{ - yygotominor.yy332 = STATEMENT_SKIP; -} -#line 4099 "expparse.c" - break; - case 258: /* statement ::= alias_statement */ - case 259: /* statement ::= assignment_statement */ yytestcase(yyruleno==259); - case 260: /* statement ::= case_statement */ yytestcase(yyruleno==260); - case 261: /* statement ::= compound_statement */ yytestcase(yyruleno==261); - case 262: /* statement ::= escape_statement */ yytestcase(yyruleno==262); - case 263: /* statement ::= if_statement */ yytestcase(yyruleno==263); - case 264: /* statement ::= proc_call_statement */ yytestcase(yyruleno==264); - case 265: /* statement ::= repeat_statement */ yytestcase(yyruleno==265); - case 266: /* statement ::= return_statement */ yytestcase(yyruleno==266); - case 267: /* statement ::= skip_statement */ yytestcase(yyruleno==267); -#line 2041 "expparse.y" -{ - yygotominor.yy332 = yymsp[0].minor.yy332; -} -#line 4115 "expparse.c" - break; - case 270: /* statement_rep ::= statement statement_rep */ -#line 2090 "expparse.y" -{ - yygotominor.yy371 = yymsp[0].minor.yy371; - LISTadd_first(yygotominor.yy371, (Generic)yymsp[-1].minor.yy332); -} -#line 4123 "expparse.c" - break; - case 271: /* subsuper_decl ::= */ -#line 2100 "expparse.y" -{ - yygotominor.yy242.subtypes = EXPRESSION_NULL; - yygotominor.yy242.abstract = false; - yygotominor.yy242.supertypes = LIST_NULL; -} -#line 4132 "expparse.c" - break; - case 272: /* subsuper_decl ::= supertype_decl */ -#line 2106 "expparse.y" -{ - yygotominor.yy242.subtypes = yymsp[0].minor.yy385.subtypes; - yygotominor.yy242.abstract = yymsp[0].minor.yy385.abstract; - yygotominor.yy242.supertypes = LIST_NULL; -} -#line 4141 "expparse.c" - break; - case 273: /* subsuper_decl ::= subtype_decl */ -#line 2112 "expparse.y" -{ - yygotominor.yy242.supertypes = yymsp[0].minor.yy371; - yygotominor.yy242.abstract = false; - yygotominor.yy242.subtypes = EXPRESSION_NULL; -} -#line 4150 "expparse.c" - break; - case 274: /* subsuper_decl ::= supertype_decl subtype_decl */ -#line 2118 "expparse.y" -{ - yygotominor.yy242.subtypes = yymsp[-1].minor.yy385.subtypes; - yygotominor.yy242.abstract = yymsp[-1].minor.yy385.abstract; - yygotominor.yy242.supertypes = yymsp[0].minor.yy371; -} -#line 4159 "expparse.c" - break; - case 276: /* supertype_decl ::= TOK_ABSTRACT TOK_SUPERTYPE */ -#line 2131 "expparse.y" -{ - yygotominor.yy385.subtypes = (Expression)0; - yygotominor.yy385.abstract = true; -} -#line 4167 "expparse.c" - break; - case 277: /* supertype_decl ::= TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN */ -#line 2137 "expparse.y" -{ - yygotominor.yy385.subtypes = yymsp[-1].minor.yy401; - yygotominor.yy385.abstract = false; -} -#line 4175 "expparse.c" - break; - case 278: /* supertype_decl ::= TOK_ABSTRACT TOK_SUPERTYPE TOK_OF TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN */ -#line 2143 "expparse.y" -{ - yygotominor.yy385.subtypes = yymsp[-1].minor.yy401; - yygotominor.yy385.abstract = true; -} -#line 4183 "expparse.c" - break; - case 279: /* supertype_expression ::= supertype_factor */ -#line 2149 "expparse.y" -{ - yygotominor.yy401 = yymsp[0].minor.yy385.subtypes; -} -#line 4190 "expparse.c" - break; - case 280: /* supertype_expression ::= supertype_expression TOK_AND supertype_factor */ -#line 2153 "expparse.y" -{ - yygotominor.yy401 = BIN_EXPcreate(OP_AND, yymsp[-2].minor.yy401, yymsp[0].minor.yy385.subtypes); -} -#line 4197 "expparse.c" - break; - case 281: /* supertype_expression ::= supertype_expression TOK_ANDOR supertype_factor */ -#line 2158 "expparse.y" -{ - yygotominor.yy401 = BIN_EXPcreate(OP_ANDOR, yymsp[-2].minor.yy401, yymsp[0].minor.yy385.subtypes); -} -#line 4204 "expparse.c" - break; - case 283: /* supertype_expression_list ::= supertype_expression_list TOK_COMMA supertype_expression */ -#line 2169 "expparse.y" -{ - LISTadd_last(yymsp[-2].minor.yy371, (Generic)yymsp[0].minor.yy401); - yygotominor.yy371 = yymsp[-2].minor.yy371; -} -#line 4212 "expparse.c" - break; - case 284: /* supertype_factor ::= identifier */ -#line 2175 "expparse.y" -{ - yygotominor.yy385.subtypes = yymsp[0].minor.yy401; -} -#line 4219 "expparse.c" - break; - case 285: /* supertype_factor ::= oneof_op TOK_LEFT_PAREN supertype_expression_list TOK_RIGHT_PAREN */ -#line 2180 "expparse.y" -{ - yygotominor.yy385.subtypes = EXPcreate(Type_Oneof); - yygotominor.yy385.subtypes->u.list = yymsp[-1].minor.yy371; -} -#line 4227 "expparse.c" - break; - case 286: /* supertype_factor ::= TOK_LEFT_PAREN supertype_expression TOK_RIGHT_PAREN */ -#line 2185 "expparse.y" -{ - yygotominor.yy385.subtypes = yymsp[-1].minor.yy401; -} -#line 4234 "expparse.c" - break; - case 287: /* type ::= aggregation_type */ - case 288: /* type ::= basic_type */ yytestcase(yyruleno==288); - case 290: /* type ::= select_type */ yytestcase(yyruleno==290); -#line 2190 "expparse.y" -{ - yygotominor.yy378.type = 0; - yygotominor.yy378.body = yymsp[0].minor.yy477; -} -#line 4244 "expparse.c" - break; - case 292: /* type_item_body ::= type */ -#line 2215 "expparse.y" -{ - CURRENT_SCOPE->u.type->head = yymsp[0].minor.yy378.type; - CURRENT_SCOPE->u.type->body = yymsp[0].minor.yy378.body; -} -#line 4252 "expparse.c" - break; - case 294: /* ti_start ::= TOK_IDENTIFIER TOK_EQUAL */ -#line 2223 "expparse.y" -{ - Type t = TYPEcreate_name(yymsp[-1].minor.yy0.symbol); - PUSH_SCOPE(t, yymsp[-1].minor.yy0.symbol, OBJ_TYPE); -} -#line 4260 "expparse.c" - break; - case 296: /* td_start ::= TOK_TYPE type_item where_rule_OPT */ -#line 2234 "expparse.y" -{ - CURRENT_SCOPE->where = yymsp[0].minor.yy371; - POP_SCOPE(); - yygotominor.yy0 = yymsp[-2].minor.yy0; -} -#line 4269 "expparse.c" - break; - case 297: /* general_ref ::= assignable group_ref */ -#line 2241 "expparse.y" -{ - yymsp[0].minor.yy401->e.op1 = yymsp[-1].minor.yy401; - yygotominor.yy401 = yymsp[0].minor.yy401; -} -#line 4277 "expparse.c" - break; - case 307: /* unary_expression ::= TOK_NOT unary_expression */ -#line 2284 "expparse.y" -{ - yygotominor.yy401 = UN_EXPcreate(OP_NOT, yymsp[0].minor.yy401); -} -#line 4284 "expparse.c" - break; - case 309: /* unary_expression ::= TOK_MINUS unary_expression */ -#line 2292 "expparse.y" -{ - yygotominor.yy401 = UN_EXPcreate(OP_NEGATE, yymsp[0].minor.yy401); -} -#line 4291 "expparse.c" - break; - case 310: /* unique ::= */ -#line 2297 "expparse.y" -{ - yygotominor.yy252.unique = 0; -} -#line 4298 "expparse.c" - break; - case 311: /* unique ::= TOK_UNIQUE */ -#line 2301 "expparse.y" -{ - yygotominor.yy252.unique = 1; -} -#line 4305 "expparse.c" - break; - case 315: /* labelled_attrib_list ::= qualified_attr_list semicolon */ -#line 2328 "expparse.y" -{ - LISTadd_first(yymsp[-1].minor.yy371, (Generic)EXPRESSION_NULL); - yygotominor.yy371 = yymsp[-1].minor.yy371; -} -#line 4313 "expparse.c" - break; - case 316: /* labelled_attrib_list ::= TOK_IDENTIFIER TOK_COLON qualified_attr_list semicolon */ -#line 2334 "expparse.y" -{ - LISTadd_first(yymsp[-1].minor.yy371, (Generic)yymsp[-3].minor.yy0.symbol); - yygotominor.yy371 = yymsp[-1].minor.yy371; -} -#line 4321 "expparse.c" - break; - case 317: /* labelled_attrib_list_list ::= labelled_attrib_list */ -#line 2341 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy371); -} -#line 4329 "expparse.c" - break; - case 318: /* labelled_attrib_list_list ::= labelled_attrib_list_list labelled_attrib_list */ -#line 2347 "expparse.y" -{ - LISTadd_last(yymsp[-1].minor.yy371, (Generic)yymsp[0].minor.yy371); - yygotominor.yy371 = yymsp[-1].minor.yy371; -} -#line 4337 "expparse.c" - break; - case 321: /* until_control ::= */ - case 330: /* while_control ::= */ yytestcase(yyruleno==330); -#line 2362 "expparse.y" -{ - yygotominor.yy401 = 0; -} -#line 4345 "expparse.c" - break; - case 323: /* where_clause ::= expression semicolon */ -#line 2371 "expparse.y" -{ - yygotominor.yy234 = WHERE_new(); - yygotominor.yy234->label = SYMBOLcreate("", yylineno, current_filename); - yygotominor.yy234->expr = yymsp[-1].minor.yy401; -} -#line 4354 "expparse.c" - break; - case 324: /* where_clause ::= TOK_IDENTIFIER TOK_COLON expression semicolon */ -#line 2377 "expparse.y" -{ - yygotominor.yy234 = WHERE_new(); - yygotominor.yy234->label = yymsp[-3].minor.yy0.symbol; - yygotominor.yy234->expr = yymsp[-1].minor.yy401; - - if (!CURRENT_SCOPE->symbol_table) { - CURRENT_SCOPE->symbol_table = DICTcreate(25); - } - - DICTdefine(CURRENT_SCOPE->symbol_table, yymsp[-3].minor.yy0.symbol->name, (Generic)yygotominor.yy234, - yymsp[-3].minor.yy0.symbol, OBJ_WHERE); -} -#line 4370 "expparse.c" - break; - case 325: /* where_clause_list ::= where_clause */ -#line 2391 "expparse.y" -{ - yygotominor.yy371 = LISTcreate(); - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy234); -} -#line 4378 "expparse.c" - break; - case 326: /* where_clause_list ::= where_clause_list where_clause */ -#line 2396 "expparse.y" -{ - yygotominor.yy371 = yymsp[-1].minor.yy371; - LISTadd_last(yygotominor.yy371, (Generic)yymsp[0].minor.yy234); -} -#line 4386 "expparse.c" - break; - default: - /* (4) action_body_item_rep ::= */ yytestcase(yyruleno==4); - /* (41) block_list ::= */ yytestcase(yyruleno==41); - /* (62) constant_body_list ::= */ yytestcase(yyruleno==62); - /* (86) express_file ::= schema_decl_list */ yytestcase(yyruleno==86); - /* (159) parened_rename_list ::= TOK_LEFT_PAREN rename_list TOK_RIGHT_PAREN */ yytestcase(yyruleno==159); - /* (168) interface_specification_list ::= */ yytestcase(yyruleno==168); - /* (194) local_body ::= */ yytestcase(yyruleno==194); - /* (196) local_decl ::= TOK_LOCAL local_decl_rules_on local_body TOK_END_LOCAL semicolon local_decl_rules_off */ yytestcase(yyruleno==196); - /* (293) type_item ::= ti_start type_item_body semicolon */ yytestcase(yyruleno==293); - break; - }; - yygoto = yyRuleInfo[yyruleno].lhs; - yysize = yyRuleInfo[yyruleno].nrhs; - yypParser->yyidx -= yysize; - yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto); - if( yyact < YYNSTATE ){ -#ifdef NDEBUG - /* If we are not debugging and the reduce action popped at least - ** one element off the stack, then we can push the new element back - ** onto the stack here, and skip the stack overflow test in yy_shift(). - ** That gives a significant speed improvement. */ - if( yysize ){ - yypParser->yyidx++; - yymsp -= yysize-1; - yymsp->stateno = (YYACTIONTYPE)yyact; - yymsp->major = (YYCODETYPE)yygoto; - yymsp->minor = yygotominor; - }else -#endif - { - yy_shift(yypParser,yyact,yygoto,&yygotominor); - } - }else{ - assert( yyact == YYNSTATE + YYNRULE + 1 ); - yy_accept(yypParser); - } -} - -/* -** The following code executes when the parse fails -*/ -#ifndef YYNOERRORRECOVERY -static void yy_parse_failed( - yyParser *yypParser /* The parser */ -){ - ParseARG_FETCH; -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt); - } -#endif - while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); - /* Here code is inserted which will be executed whenever the - ** parser fails */ - ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} -#endif /* YYNOERRORRECOVERY */ - -/* -** The following code executes when a syntax error first occurs. -*/ -static void yy_syntax_error( - yyParser *yypParser, /* The parser */ - int yymajor, /* The major type of the error token */ - YYMINORTYPE yyminor /* The minor type of the error token */ -){ - ParseARG_FETCH; -#define TOKEN (yyminor.yy0) -#line 2424 "expparse.y" - - Symbol sym; - - (void) yymajor; /* quell unused param warning */ - (void) yyminor; - yyerrstatus++; - - sym.line = yylineno; - sym.filename = current_filename; - - ERRORreport_with_symbol(SYNTAX, &sym, "Syntax error", - CURRENT_SCOPE_TYPE_PRINTABLE, CURRENT_SCOPE_NAME); -#line 4470 "expparse.c" - ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ -} - -/* -** The following is executed when the parser accepts -*/ -static void yy_accept( - yyParser *yypParser /* The parser */ -){ - ParseARG_FETCH; -#ifndef NDEBUG - if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); - } -#endif - while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser); - /* Here code is inserted which will be executed whenever the - ** parser accepts */ - ParseARG_STORE; /* Suppress warning about unused %extra_argument variable */ +/* +** The following is executed when the parser accepts +*/ +static void yy_accept( + yyParser *yypParser /* The parser */ +){ + yyparseARG_FETCH; +#ifndef NDEBUG + if( yyTraceFILE ){ + fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt); + } +#endif +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt = -1; +#endif + assert( yypParser->yytos==yypParser->yystack ); + /* Here code is inserted which will be executed whenever the + ** parser accepts */ +/*********** Begin %parse_accept code *****************************************/ +/*********** End %parse_accept code *******************************************/ + yyparseARG_STORE; /* Suppress warning about unused %extra_argument variable */ } /* The main parser program. ** The first argument is a pointer to a structure obtained from -** "ParseAlloc" which describes the current state of the parser. +** "yyparseAlloc" which describes the current state of the parser. ** The second argument is the major token number. The third is ** the minor token. The fourth optional argument is whatever the ** user wants (and specified in the grammar) and is available for @@ -4507,57 +8861,59 @@ static void yy_accept( ** Outputs: ** None. */ -void Parse( +void yyparse( void *yyp, /* The parser */ int yymajor, /* The major token code number */ - ParseTOKENTYPE yyminor /* The value for the token */ - ParseARG_PDECL /* Optional %extra_argument parameter */ + yyparseTOKENTYPE yyminor /* The value for the token */ + yyparseARG_PDECL /* Optional %extra_argument parameter */ ){ YYMINORTYPE yyminorunion; - int yyact; /* The parser action. */ + unsigned int yyact; /* The parser action. */ +#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) int yyendofinput; /* True if we are at the end of input */ +#endif #ifdef YYERRORSYMBOL int yyerrorhit = 0; /* True if yymajor has invoked an error */ #endif yyParser *yypParser; /* The parser */ - /* (re)initialize the parser, if necessary */ yypParser = (yyParser*)yyp; - if( yypParser->yyidx<0 ){ -#if YYSTACKDEPTH<=0 - if( yypParser->yystksz <=0 ){ - /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/ - yyminorunion = yyzerominor; - yyStackOverflow(yypParser, &yyminorunion); - return; - } -#endif - yypParser->yyidx = 0; - yypParser->yyerrcnt = -1; - yypParser->yystack[0].stateno = 0; - yypParser->yystack[0].major = 0; - } - yyminorunion.yy0 = yyminor; + assert( yypParser->yytos!=0 ); +#if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY) yyendofinput = (yymajor==0); - ParseARG_STORE; +#endif + yyparseARG_STORE; #ifndef NDEBUG if( yyTraceFILE ){ - fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]); + int stateno = yypParser->yytos->stateno; + if( stateno < YY_MIN_REDUCE ){ + fprintf(yyTraceFILE,"%sInput '%s' in state %d\n", + yyTracePrompt,yyTokenName[yymajor],stateno); + }else{ + fprintf(yyTraceFILE,"%sInput '%s' with pending reduce %d\n", + yyTracePrompt,yyTokenName[yymajor],stateno-YY_MIN_REDUCE); + } } #endif do{ yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor); - if( yyact= YY_MIN_REDUCE ){ + yy_reduce(yypParser,yyact-YY_MIN_REDUCE,yymajor,yyminor); + }else if( yyact <= YY_MAX_SHIFTREDUCE ){ + yy_shift(yypParser,yyact,yymajor,yyminor); +#ifndef YYNOERRORRECOVERY yypParser->yyerrcnt--; +#endif yymajor = YYNOCODE; - }else if( yyact < YYNSTATE + YYNRULE ){ - yy_reduce(yypParser,yyact-YYNSTATE); + }else if( yyact==YY_ACCEPT_ACTION ){ + yypParser->yytos--; + yy_accept(yypParser); + return; }else{ assert( yyact == YY_ERROR_ACTION ); + yyminorunion.yy0 = yyminor; #ifdef YYERRORSYMBOL int yymx; #endif @@ -4587,9 +8943,9 @@ void Parse( ** */ if( yypParser->yyerrcnt<0 ){ - yy_syntax_error(yypParser,yymajor,yyminorunion); + yy_syntax_error(yypParser,yymajor,yyminor); } - yymx = yypParser->yystack[yypParser->yyidx].major; + yymx = yypParser->yytos->major; if( yymx==YYERRORSYMBOL || yyerrorhit ){ #ifndef NDEBUG if( yyTraceFILE ){ @@ -4597,26 +8953,26 @@ void Parse( yyTracePrompt,yyTokenName[yymajor]); } #endif - yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion); + yy_destructor(yypParser, (YYCODETYPE)yymajor, &yyminorunion); yymajor = YYNOCODE; }else{ - while( - yypParser->yyidx >= 0 && - yymx != YYERRORSYMBOL && - (yyact = yy_find_reduce_action( - yypParser->yystack[yypParser->yyidx].stateno, - YYERRORSYMBOL)) >= YYNSTATE + while( yypParser->yytos >= yypParser->yystack + && yymx != YYERRORSYMBOL + && (yyact = yy_find_reduce_action( + yypParser->yytos->stateno, + YYERRORSYMBOL)) >= YY_MIN_REDUCE ){ yy_pop_parser_stack(yypParser); } - if( yypParser->yyidx < 0 || yymajor==0 ){ + if( yypParser->yytos < yypParser->yystack || yymajor==0 ){ yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yy_parse_failed(yypParser); +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt = -1; +#endif yymajor = YYNOCODE; }else if( yymx!=YYERRORSYMBOL ){ - YYMINORTYPE u2; - u2.YYERRSYMDT = 0; - yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2); + yy_shift(yypParser,yyact,YYERRORSYMBOL,yyminor); } } yypParser->yyerrcnt = 3; @@ -4629,7 +8985,7 @@ void Parse( ** Applications can set this macro (for example inside %include) if ** they intend to abandon the parse upon the first syntax error seen. */ - yy_syntax_error(yypParser,yymajor,yyminorunion); + yy_syntax_error(yypParser,yymajor, yyminor); yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); yymajor = YYNOCODE; @@ -4644,16 +9000,31 @@ void Parse( ** three input tokens have been successfully shifted. */ if( yypParser->yyerrcnt<=0 ){ - yy_syntax_error(yypParser,yymajor,yyminorunion); + yy_syntax_error(yypParser,yymajor, yyminor); } yypParser->yyerrcnt = 3; yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion); if( yyendofinput ){ yy_parse_failed(yypParser); +#ifndef YYNOERRORRECOVERY + yypParser->yyerrcnt = -1; +#endif } yymajor = YYNOCODE; #endif } - }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 ); + }while( yymajor!=YYNOCODE && yypParser->yytos>yypParser->yystack ); +#ifndef NDEBUG + if( yyTraceFILE ){ + yyStackEntry *i; + char cDiv = '['; + fprintf(yyTraceFILE,"%sReturn. Stack=",yyTracePrompt); + for(i=&yypParser->yystack[1]; i<=yypParser->yytos; i++){ + fprintf(yyTraceFILE,"%c%s", cDiv, yyTokenName[i->major]); + cDiv = ' '; + } + fprintf(yyTraceFILE,"]\n"); + } +#endif return; } diff --git a/src/express/generated/expparse.h b/src/express/generated/expparse.h index 10355af9c..f6a6abf8e 100644 --- a/src/express/generated/expparse.h +++ b/src/express/generated/expparse.h @@ -1,120 +1,172 @@ -#define TOK_EQUAL 1 -#define TOK_GREATER_EQUAL 2 -#define TOK_GREATER_THAN 3 -#define TOK_IN 4 -#define TOK_INST_EQUAL 5 -#define TOK_INST_NOT_EQUAL 6 -#define TOK_LESS_EQUAL 7 -#define TOK_LESS_THAN 8 -#define TOK_LIKE 9 -#define TOK_NOT_EQUAL 10 -#define TOK_MINUS 11 -#define TOK_PLUS 12 -#define TOK_OR 13 -#define TOK_XOR 14 -#define TOK_DIV 15 -#define TOK_MOD 16 -#define TOK_REAL_DIV 17 -#define TOK_TIMES 18 -#define TOK_AND 19 -#define TOK_ANDOR 20 -#define TOK_CONCAT_OP 21 -#define TOK_EXP 22 -#define TOK_NOT 23 -#define TOK_DOT 24 -#define TOK_BACKSLASH 25 -#define TOK_LEFT_BRACKET 26 -#define TOK_LEFT_PAREN 27 -#define TOK_RIGHT_PAREN 28 -#define TOK_RIGHT_BRACKET 29 -#define TOK_COLON 30 -#define TOK_COMMA 31 -#define TOK_AGGREGATE 32 -#define TOK_OF 33 -#define TOK_IDENTIFIER 34 -#define TOK_ALIAS 35 -#define TOK_FOR 36 -#define TOK_END_ALIAS 37 -#define TOK_ARRAY 38 -#define TOK_ASSIGNMENT 39 -#define TOK_BAG 40 -#define TOK_BOOLEAN 41 -#define TOK_INTEGER 42 -#define TOK_REAL 43 -#define TOK_NUMBER 44 -#define TOK_LOGICAL 45 -#define TOK_BINARY 46 -#define TOK_STRING 47 -#define TOK_BY 48 -#define TOK_LEFT_CURL 49 -#define TOK_RIGHT_CURL 50 -#define TOK_OTHERWISE 51 -#define TOK_CASE 52 -#define TOK_END_CASE 53 -#define TOK_BEGIN 54 -#define TOK_END 55 -#define TOK_PI 56 -#define TOK_E 57 -#define TOK_CONSTANT 58 -#define TOK_END_CONSTANT 59 -#define TOK_DERIVE 60 -#define TOK_END_ENTITY 61 -#define TOK_ENTITY 62 -#define TOK_ENUMERATION 63 -#define TOK_ESCAPE 64 -#define TOK_SELF 65 -#define TOK_OPTIONAL 66 -#define TOK_VAR 67 -#define TOK_END_FUNCTION 68 -#define TOK_FUNCTION 69 -#define TOK_BUILTIN_FUNCTION 70 -#define TOK_LIST 71 -#define TOK_SET 72 -#define TOK_GENERIC 73 -#define TOK_QUESTION_MARK 74 -#define TOK_IF 75 -#define TOK_THEN 76 -#define TOK_END_IF 77 -#define TOK_ELSE 78 -#define TOK_INCLUDE 79 -#define TOK_STRING_LITERAL 80 -#define TOK_TO 81 -#define TOK_AS 82 -#define TOK_REFERENCE 83 -#define TOK_FROM 84 -#define TOK_USE 85 -#define TOK_INVERSE 86 -#define TOK_INTEGER_LITERAL 87 -#define TOK_REAL_LITERAL 88 -#define TOK_STRING_LITERAL_ENCODED 89 -#define TOK_LOGICAL_LITERAL 90 -#define TOK_BINARY_LITERAL 91 -#define TOK_LOCAL 92 -#define TOK_END_LOCAL 93 -#define TOK_ONEOF 94 -#define TOK_UNIQUE 95 -#define TOK_FIXED 96 -#define TOK_END_PROCEDURE 97 -#define TOK_PROCEDURE 98 -#define TOK_BUILTIN_PROCEDURE 99 -#define TOK_QUERY 100 -#define TOK_ALL_IN 101 -#define TOK_SUCH_THAT 102 -#define TOK_REPEAT 103 -#define TOK_END_REPEAT 104 -#define TOK_RETURN 105 -#define TOK_END_RULE 106 -#define TOK_RULE 107 -#define TOK_END_SCHEMA 108 -#define TOK_SCHEMA 109 -#define TOK_SELECT 110 -#define TOK_SEMICOLON 111 -#define TOK_SKIP 112 -#define TOK_SUBTYPE 113 -#define TOK_ABSTRACT 114 -#define TOK_SUPERTYPE 115 -#define TOK_END_TYPE 116 -#define TOK_TYPE 117 -#define TOK_UNTIL 118 -#define TOK_WHERE 119 -#define TOK_WHILE 120 +#define T_INVALID 1 +#define T_DOCROOT 2 +#define T_RULE_REF 3 +#define T_RULE_LABEL_REF 4 +#define T_EQ 5 +#define T_NEQ 6 +#define T_LTEQ 7 +#define T_GTEQ 8 +#define T_LT 9 +#define T_GT 10 +#define T_INST_EQ 11 +#define T_INST_NEQ 12 +#define T_IN 13 +#define T_LIKE 14 +#define T_PLUS 15 +#define T_MINUS 16 +#define T_OR 17 +#define T_XOR 18 +#define T_ANDOR 19 +#define T_TIMES 20 +#define T_RDIV 21 +#define T_IDIV 22 +#define T_MOD 23 +#define T_AND 24 +#define T_CONCAT 25 +#define T_EXP 26 +#define UNARY_OP 27 +#define T_LBRKT 28 +#define T_RBRKT 29 +#define T_LPAREN 30 +#define T_RPAREN 31 +#define T_ONEOF 32 +#define T_DOT 33 +#define T_BACKSLASH 34 +#define T_SIMPLE_ID 35 +#define T_SCHEMA_REF 36 +#define T_FUNCTION_REF 37 +#define T_PROCEDURE_REF 38 +#define T_TYPE_REF 39 +#define T_ENTITY_REF 40 +#define T_PARAMETER_REF 41 +#define T_VARIABLE_REF 42 +#define T_CONSTANT_REF 43 +#define T_ENUMERATION_REF 44 +#define T_SIMPLE_REF 45 +#define T_ABSTRACT 46 +#define T_SUPERTYPE 47 +#define T_SEMICOLON 48 +#define T_COMMA 49 +#define T_AGGREGATE 50 +#define T_OF 51 +#define T_COLON 52 +#define T_ALIAS 53 +#define T_FOR 54 +#define T_END_ALIAS 55 +#define T_ARRAY 56 +#define T_OPTIONAL 57 +#define T_UNIQUE 58 +#define T_ASSIGN 59 +#define T_BAG 60 +#define T_BINARY 61 +#define T_BOOLEAN 62 +#define T_CONST_E 63 +#define T_PI 64 +#define T_SELF 65 +#define T_QMARK 66 +#define T_ABS 67 +#define T_ACOS 68 +#define T_ASIN 69 +#define T_ATAN 70 +#define T_BLENGTH 71 +#define T_COS 72 +#define T_EXISTS 73 +#define T_FORMAT 74 +#define T_HIBOUND 75 +#define T_HIINDEX 76 +#define T_LENGTH 77 +#define T_LOBOUND 78 +#define T_LOINDEX 79 +#define T_LOG 80 +#define T_LOG2 81 +#define T_LOG10 82 +#define T_NVL 83 +#define T_ODD 84 +#define T_ROLESOF 85 +#define T_SIN 86 +#define T_SIZEOF 87 +#define T_SQRT 88 +#define T_TAN 89 +#define T_TYPEOF 90 +#define T_USEDIN 91 +#define T_VALUE 92 +#define T_VALUE_IN 93 +#define T_VALUE_UNIQUE 94 +#define T_INSERT 95 +#define T_REMOVE 96 +#define T_OTHERWISE 97 +#define T_CASE 98 +#define T_END_CASE 99 +#define T_BEGIN 100 +#define T_END 101 +#define T_CONSTANT 102 +#define T_END_CONSTANT 103 +#define T_DERIVE 104 +#define T_END_ENTITY 105 +#define T_ENTITY 106 +#define T_BASED_ON 107 +#define T_WITH 108 +#define T_EXTENSIBLE 109 +#define T_ENUMERATION 110 +#define T_ESCAPE 111 +#define T_END_FUNCTION 112 +#define T_FUNCTION 113 +#define T_LIST 114 +#define T_SET 115 +#define T_GENERIC_ENTITY 116 +#define T_GENERIC 117 +#define T_IF 118 +#define T_THEN 119 +#define T_ELSE 120 +#define T_END_IF 121 +#define T_TO 122 +#define T_BY 123 +#define T_INTEGER 124 +#define T_LCURL 125 +#define T_RCURL 126 +#define T_INVERSE 127 +#define T_BINARY_LITERAL 128 +#define T_INTEGER_LITERAL 129 +#define T_REAL_LITERAL 130 +#define T_LOCAL 131 +#define T_END_LOCAL 132 +#define T_FALSE 133 +#define T_TRUE 134 +#define T_UNKNOWN 135 +#define T_LOGICAL 136 +#define T_AS 137 +#define T_NUMBER 138 +#define T_END_PROCEDURE 139 +#define T_PROCEDURE 140 +#define T_VAR 141 +#define T_QUERY 142 +#define T_ALL_IN 143 +#define T_PIPE 144 +#define T_REAL 145 +#define T_RENAMED 146 +#define T_REFERENCE 147 +#define T_FROM 148 +#define T_REPEAT 149 +#define T_END_REPEAT 150 +#define T_RETURN 151 +#define T_END_RULE 152 +#define T_RULE 153 +#define T_SCHEMA 154 +#define T_END_SCHEMA 155 +#define T_SELECT 156 +#define T_NOT 157 +#define T_SKIP 158 +#define T_STRING_LITERAL 159 +#define T_ENCODED_STRING_LITERAL 160 +#define T_STRING 161 +#define T_END_SUBTYPE_CONSTRAINT 162 +#define T_SUBTYPE_CONSTRAINT 163 +#define T_SUBTYPE 164 +#define T_TOTAL_OVER 165 +#define T_TYPE 166 +#define T_END_TYPE 167 +#define T_UNTIL 168 +#define T_USE 169 +#define T_WHERE 170 +#define T_WHILE 171 +#define T_FIXED 172 diff --git a/src/express/generated/expscan.c b/src/express/generated/expscan.c index b78b863a5..faba2369b 100644 --- a/src/express/generated/expscan.c +++ b/src/express/generated/expscan.c @@ -1,1717 +1,11846 @@ -/* Generated by re2c 0.13.5 */ -/* -* Lex source for Fed-X lexical analyzer. -* -* This software was developed by U.S. Government employees as part of -* their official duties and is not subject to copyright. -* -* $Log: expscan.l,v $ -* Revision 1.12 1997/05/29 20:17:34 sauderd -* Made some changes to Symbol (to be Symbol_) and false and true to be False -* and True. These changes affect the generated expscan.c file so that it will -* compile. -* -* Revision 1.11 1994/11/22 18:32:39 clark -* Part 11 IS; group reference -* -* Revision 1.10 1994/05/12 17:22:23 libes -* added #ifdefs for flex -* -* Revision 1.9 1994/05/12 17:18:10 libes -* made flex understand multiple files -* -* Revision 1.8 1994/05/11 19:50:00 libes -* numerous fixes -* -* Revision 1.7 1993/10/15 18:47:26 libes -* CADDETC certified -* -* Revision 1.5 1993/02/22 21:46:33 libes -* fixed unmatched_open_comment handler -* -* Revision 1.4 1992/08/18 17:11:36 libes -* rm'd extraneous error messages -* -* Revision 1.3 1992/06/08 18:05:20 libes -* prettied up interface to print_objects_when_running -* -* Revision 1.2 1992/05/31 08:30:54 libes -* multiple files -* -* Revision 1.1 1992/05/28 03:52:25 libes -* Initial revision -* -* Revision 1.4 1992/05/05 19:49:03 libes -* final alpha -* -* Revision 1.3 1992/02/12 07:02:49 libes -* do sub/supertypes -* -* Revision 1.2 1992/02/09 00:49:04 libes -* does ref/use correctly -* -* Revision 1.1 1992/02/05 08:40:30 libes -* Initial revision -* -* Revision 1.0.1.1 1992/01/22 02:47:57 libes -* copied from ~pdes -* -* Revision 4.9 1991/06/14 20:49:12 libes -* removed old infinity, added backslash -* -* Revision 4.8.1.1 1991/05/16 04:07:57 libes -* made scanner (under lex) understand hooks for doing include directive -* -* Revision 4.8.1.0 1991/05/16 01:10:15 libes -* branch for fixes to old code -* -* Revision 4.8 1991/05/03 21:09:02 libes -* Added sanity check to make sure lex/flex match -DLEX/FLEX -* -* Revision 4.7 1991/05/02 05:49:18 libes -* fixed bug in testing for exceeding open_comment[nesting_level] -* -* Revision 4.6 1991/04/29 19:44:40 libes -* Print all open comments rather than just one. -* -* Revision 4.5 1991/04/29 15:39:02 libes -* Changed commenting style (back) as per SNC who claims that N9 meant to -* say that tail remarks cannot occur in an open comment, nor can nested -* comments begin in a tail remark. -* -* Revision 4.4 1991/04/29 15:01:46 libes -* Add bounds checking to nesting level history -* -* Revision 4.3 1991/04/26 20:12:50 libes -* Made scanner work with lex -* Simulated exclusive states with inclusive states -* Fixed line counting -* Speeded up whitespace matching -* Convert unknown chars to whitespace -* Disabled default rule matching (enabled "jamming") -* Enabled detection/diagnostics of unterminated comments and strings literals -* Enabled detection/diagnostics of unexpected close comments -* Disabled detection/diagnostics of nested comments -* -* Revision 4.2 1990/12/18 14:00:04 clark -* Cosmetic changes -* -* Revision 4.1 90/09/13 16:29:00 clark -* BPR 2.1 alpha -* */ -#include "express/basic.h" -#include "express/error.h" -#include "express/lexact.h" -#include "express/express.h" -#include "expparse.h" -#include "expscan.h" -enum { INITIAL, code, comment, return_end_schema }; -extern int yylineno; -extern bool yyeof; -static int nesting_level = 0; -/* can't imagine this will ever be more than 2 or 3 - DEL */ -#define MAX_NESTED_COMMENTS 20 -static struct Symbol_ open_comment[MAX_NESTED_COMMENTS]; -static_inline -int -SCANnextchar(char* buffer) -{ -extern bool SCANread(void); -#ifdef keep_nul -static int escaped = 0; -#endif -if (SCANtext_ready || SCANread()) { -#ifdef keep_nul -if (!*SCANcurrent) { -buffer[0] = SCAN_ESCAPE; -*SCANcurrent = '0'; -return 1; -} else if ((*SCANcurrent == SCAN_ESCAPE) && !escaped) { -escaped = 1; -buffer[0] = SCAN_ESCAPE; -return 1; -} -SCANbuffer.numRead--; -#endif -buffer[0] = *(SCANcurrent++); -if (!isascii(buffer[0])) { -ERRORreport_with_line(NONASCII_CHAR,yylineno, -0xff & buffer[0]); -buffer[0] = ' '; /* substitute space */ -} -return 1; -} else -return 0; -} -#define NEWLINE (yylineno++) -/* when lex looks ahead over a newline, error messages get thrown off */ -/* Fortunately, we know when that occurs, so adjust for it by this hack */ -#define LINENO_FUDGE (yylineno - 1) -/* added for re-initializing parser -snc 22-Apr-1992 */ -void -SCAN_lex_init(char *filename, FILE *fp) { -/* return to initial scan buffer */ -SCAN_current_buffer = 0; -*(SCANcurrent = SCANbuffer.text) = '\0'; -SCANbuffer.readEof = false; -SCANbuffer.file = fp; -SCANbuffer.filename = (filename ? filename : ""); -current_filename = SCANbuffer.filename; -} -#define PERPLEX_USING_CONDITIONS - - -/* S C A N N E R _ T E M P L A T E . C - * BRL-CAD - * - * Copyright (c) 1990-2011 United States Government as represented by - * the U.S. Army Research Laboratory. - * - * Copyright (c) 1990 The Regents of the University of California. - * - * 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, 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. - * - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * 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. - */ -/* Parts of this file are based on sources from the flex project. - * - * This code is derived from software contributed to Berkeley by - * Vern Paxson. - * - * The United States Government has rights in this work pursuant - * to contract no. DE-AC03-76SF00098 between the United States - * Department of Energy and the University of California. - */ -#include +/* Generated by re2c 1.0.3 on Sat Oct 20 22:52:46 2018 */ +#line 1 "/home/chorler/projects/src/stepcode/src/express/expscan.l" #include #include -#include - -/* --- from flex's flexdef.h --- */ -void buf_init(struct Buf * buf, size_t elem_size); -void buf_destroy(struct Buf * buf); -struct Buf *buf_append(struct Buf * buf, const void *ptr, int n_elem); -struct Buf *buf_concat(struct Buf* dest, const struct Buf* src); -struct Buf *buf_strappend(struct Buf *, const char *str); -struct Buf *buf_strnappend(struct Buf *, const char *str, int nchars); -struct Buf *buf_strdefine(struct Buf * buf, const char *str, const char *def); -struct Buf *buf_prints(struct Buf *buf, const char *fmt, const char* s); -struct Buf *buf_m4_define(struct Buf *buf, const char* def, const char* val); -struct Buf *buf_m4_undefine(struct Buf *buf, const char* def); -struct Buf *buf_print_strings(struct Buf * buf, FILE* out); -struct Buf *buf_linedir(struct Buf *buf, const char* filename, int lineno); - -/* --- from flex's misc.c --- */ -static void* -allocate_array(int size, size_t element_size) -{ - return malloc(element_size * size); -} - -static void* -reallocate_array(void *array, int size, size_t element_size) -{ - return realloc(array, element_size * size); -} - -/* --- from flex's buf.c --- */ -/* Take note: The buffer object is sometimes used as a String buffer (one - * continuous string), and sometimes used as a list of strings, usually line by - * line. - * - * The type is specified in buf_init by the elt_size. If the elt_size is - * sizeof(char), then the buffer should be treated as string buffer. If the - * elt_size is sizeof(char*), then the buffer should be treated as a list of - * strings. - * - * Certain functions are only appropriate for one type or the other. - */ -struct Buf* -buf_print_strings(struct Buf * buf, FILE* out) -{ - int i; - - if(!buf || !out) { - return buf; - } - - for (i = 0; i < buf->nelts; i++) { - const char *s = ((char**)buf->elts)[i]; - if(s) { - fprintf(out, "%s", s); - } - } - return buf; -} +#include "sc_memmgr.h" -/* Append a "%s" formatted string to a string buffer */ -struct Buf* -buf_prints(struct Buf *buf, const char *fmt, const char *s) -{ - char *t; +#include "expparse.h" +#include "lexsupport.h" - t = (char*)malloc(strlen(fmt) + strlen(s) + 1); - sprintf(t, fmt, s); - buf = buf_strappend(buf, t); - free(t); - return buf; -} +#line 12 "expscan.c" +enum YYCONDTYPE { + yycP1, + yycCOMMENT, + yycP2, + yycTYPE, + yycENUM, + yycENTITY, + yycARG_LIST, + yycRULE, + yycQUERY, + yycREDECL, + yycSTMT, + yycINV_FOR_STMT, + yycP3, + yycSEARCH_SCOPE, + yycID_CUR_SCOPE, + yycID_LIST, + yycENUM_ID_LIST, + yycLABEL_OPT, + yycENUM_REF, + yycENTITY_REF, + yycDOT_ATTR, + yycCONSTANT, + yycLOCAL, + yycINV_FOR, + yycSUBTYPE_CONS, +}; +#line 9 "/home/chorler/projects/src/stepcode/src/express/expscan.l" -int numDigits(int n) -{ - int digits; - /* take absolute value of n */ - n = n >= 0 ? n : -n; +void yy_push_state(int new_state, struct exp_scanner *scanner); +int yy_exch_state(int new_state, struct exp_scanner *scanner); +void yy_pop_state(struct exp_scanner *scanner); +int yy_top_state(struct exp_scanner *scanner); - if (n == 0) { - return 1; - } +void brkt_push(struct intList *nesting); +int brkt_pop(struct intList *nesting); - for (digits = 0; n > 0; digits++) { - n /= 10; - } +void lexdebug(int state, unsigned char symbol); - return digits; -} +#define IBUFSZ 128 -/** Append a line directive to the string buffer. - * @param buf A string buffer. - * @param filename file name - * @param lineno line number - * @return buf - */ -struct Buf* -buf_linedir(struct Buf *buf, const char* filename, int lineno) +int yylex(struct exp_scanner *pScanner, struct YYSTYPE *plval) { - char *t; - const char fmt[] = "#line %d \"%s\"\n"; + int scanner_modes[] = {yycP1, yycP2, yycP3}; + size_t midx; + unsigned char ibuffer[IBUFSZ]; + unsigned char *id; + unsigned char *yyt1;unsigned char *yyt2; + int *brkt_nesting; + struct scope_def *sp, *scope; + int idx, tok, ibufchk = 0; + struct YYSTATE *pState = pScanner->state; - t = (char*)malloc(strlen(fmt) + strlen(filename) + numDigits(lineno) + 1); - sprintf(t, fmt, lineno, filename); - buf = buf_strappend(buf, t); - free(t); - return buf; -} - - -/** Append the contents of @a src to @a dest. - * @param @a dest the destination buffer - * @param @a dest the source buffer - * @return @a dest - */ -struct Buf* -buf_concat(struct Buf* dest, const struct Buf* src) -{ - buf_append(dest, src->elts, src->nelts); - return dest; -} - - -/* Appends n characters in str to buf. */ -struct Buf* -buf_strnappend(struct Buf *buf, const char *str, int n) -{ - buf_append(buf, str, n + 1); - - /* "undo" the '\0' character that buf_append() already copied. */ - buf->nelts--; - - return buf; -} - -/* Appends characters in str to buf. */ -struct Buf* -buf_strappend(struct Buf *buf, const char *str) -{ - return buf_strnappend(buf, str, strlen(str)); -} - -/* appends "#define str def\n" */ -struct Buf* -buf_strdefine(struct Buf *buf, const char *str, const char *def) -{ - buf_strappend(buf, "#define "); - buf_strappend(buf, " "); - buf_strappend(buf, str); - buf_strappend(buf, " "); - buf_strappend(buf, def); - buf_strappend(buf, "\n"); - return buf; -} - -/** Pushes "m4_define( [[def]], [[val]])m4_dnl" to end of buffer. - * @param buf A buffer as a list of strings. - * @param def The m4 symbol to define. - * @param val The definition; may be NULL. - * @return buf - */ -struct Buf* -buf_m4_define(struct Buf *buf, const char* def, const char* val) -{ - const char *fmt = "m4_define( [[%s]], [[%s]])m4_dnl\n"; - char *str; - - val = val ? val : ""; - str = (char*)malloc(strlen(fmt) + strlen(def) + strlen(val) + 2); - - sprintf(str, fmt, def, val); - buf_append(buf, &str, 1); - return buf; -} - -/** Pushes "m4_undefine([[def]])m4_dnl" to end of buffer. - * @param buf A buffer as a list of strings. - * @param def The m4 symbol to undefine. - * @return buf - */ -struct Buf* -buf_m4_undefine(struct Buf *buf, const char* def) -{ - const char *fmt = "m4_undefine( [[%s]])m4_dnl\n"; - char *str; - - str = (char*)malloc(strlen(fmt) + strlen(def) + 2); - - sprintf(str, fmt, def); - buf_append(buf, &str, 1); - return buf; -} - -/* create buf with 0 elements, each of size elem_size. */ -void -buf_init(struct Buf *buf, size_t elem_size) -{ - buf->elts = (void*)0; - buf->nelts = 0; - buf->elt_size = elem_size; - buf->nmax = 0; -} - -/* frees memory */ -void -buf_destroy(struct Buf *buf) -{ - if (buf && buf->elts) { - free(buf->elts); - } - if (buf) - buf->elts = (void*)0; -} - -/* appends ptr[] to buf, grow if necessary. - * n_elem is number of elements in ptr[], NOT bytes. - * returns buf. - * We grow by mod(512) boundaries. - */ -struct Buf* -buf_append(struct Buf *buf, const void *ptr, int n_elem) -{ - int n_alloc = 0; - - if (!ptr || n_elem == 0) { - return buf; - } - - /* May need to alloc more. */ - if (n_elem + buf->nelts > buf->nmax) { - /* exact amount needed... */ - n_alloc = (n_elem + buf->nelts) * buf->elt_size; - - /* ...plus some extra */ - if (((n_alloc * buf->elt_size) % 512) != 0 && buf->elt_size < 512) { - n_alloc += (512 - ((n_alloc * buf->elt_size) % 512)) / buf->elt_size; - } - if (!buf->elts) { - buf->elts = allocate_array(n_alloc, buf->elt_size); - } else { - buf->elts = reallocate_array(buf->elts, n_alloc, buf->elt_size); - } - buf->nmax = n_alloc; - } - memcpy((char*)buf->elts + buf->nelts * buf->elt_size, ptr, - n_elem * buf->elt_size); - - buf->nelts += n_elem; - - return buf; -} - -/* --- */ -/* input buffering support - * note that these routines assume buf->elt_size == sizeof(char) - */ - -/* get pointer to the start of the first element */ -static char* -bufferFirstElt(struct Buf *buf) -{ - return (char*)buf->elts; -} - -/* get pointer to the start of the last element */ -static char* -bufferLastElt(struct Buf *buf) -{ - if (buf->nelts < 1) { - return NULL; - } - return bufferFirstElt(buf) + buf->nelts - 1; -} - -static void -bufferAppendChar(struct Buf *buf, char c) -{ - char *cp = &c; - buf_append(buf, cp, 1); -} - -/* Copy up to n input characters to the end of scanner buffer. If EOF is - * encountered before n characters are copied, scanner->atEOI flag is set. - */ -static void -bufferAppend(perplex_t scanner, size_t n) -{ - struct Buf *buf; - FILE *in; - size_t i; - int c; - char *bufStart; - size_t markerOffset, tokenStartOffset, cursorOffset; - - buf = scanner->buffer; - in = scanner->inFile; - - /* save marker offsets */ - bufStart = (char*)buf->elts; - cursorOffset = (size_t)(scanner->cursor - bufStart); - markerOffset = (size_t)(scanner->marker - bufStart); - tokenStartOffset = (size_t)(scanner->tokenStart - bufStart); + plval->scope_idx = -1; + + #line 744 "/home/chorler/projects/src/stepcode/src/express/expscan.l" - /* remove last (null) element */ - buf->nelts--; - for (i = 0; i < n; i++) { - if ((c = fgetc(in)) == EOF) { - scanner->atEOI = 1; - break; - } - bufferAppendChar(buf, c); + switch(pScanner->mode) { + case yycP3: + goto lbl_p3; + case yycP1: + goto lbl_prescan; + case yycP2: + yyerror("internal error - scanner should not be able to reach mode P2 here!", pScanner->lineno); + default: + yyerror("invalid scanning mode!", pScanner->lineno); } + +lbl_prescan: + for (midx=0; midx < sizeof(scanner_modes); midx++ ) { + yylexReset(pScanner, scanner_modes[midx]); + pScanner->lineno = 1; - /* (scanner->null - eltSize) should be the last input element, - * we put a literal null after this element for debugging - */ - bufferAppendChar(buf, '\0'); - scanner->null = bufferLastElt(buf); - - /* update markers in case append caused buffer to be reallocated */ - bufStart = (char*)buf->elts; - scanner->cursor = bufStart + cursorOffset; - scanner->marker = bufStart + markerOffset; - scanner->tokenStart = bufStart + tokenStartOffset; -} - -/* Appends up to n characters of input to scanner buffer. */ -static void -bufferFill(perplex_t scanner, size_t n) +lbl_p3: + while (pScanner->cur < pScanner->lim) { + if (ibufchk >= IBUFSZ) + yyerror("id buffer overflow - undefined behaviour!", pScanner->lineno); + + pScanner->tok = pScanner->cur; + + +#line 96 "expscan.c" { - struct Buf *buf; - size_t totalElts, usedElts, freeElts; - - if (scanner->atEOI) { - /* nothing to add to buffer */ - return; - } - - buf = scanner->buffer; - - totalElts = (size_t)buf->nmax; - usedElts = (size_t)buf->nelts; - freeElts = totalElts - usedElts; - - /* not enough room for append, shift buffer contents to avoid realloc */ - if (n > freeElts) { - void *bufFirst, *scannerFirst, *tokenStart, *marker, *null; - size_t bytesInUse, shiftSize; - - tokenStart = (void*)scanner->tokenStart; - marker = (void*)scanner->marker; - null = (void*)scanner->null; - - bufFirst = bufferFirstElt(buf); - - /* Find first buffer element still in use by scanner. Will be - * tokenStart unless backtracking marker is in use. - */ - scannerFirst = tokenStart; - if (marker >= bufFirst && marker < tokenStart) { - scannerFirst = marker; + unsigned char yych; + unsigned int yyaccept = 0; + switch (yy_top_state(pScanner)) { + case yycP1: goto yyc_P1; + case yycCOMMENT: goto yyc_COMMENT; + case yycP2: goto yyc_P2; + case yycTYPE: goto yyc_TYPE; + case yycENUM: goto yyc_ENUM; + case yycENTITY: goto yyc_ENTITY; + case yycARG_LIST: goto yyc_ARG_LIST; + case yycRULE: goto yyc_RULE; + case yycQUERY: goto yyc_QUERY; + case yycREDECL: goto yyc_REDECL; + case yycSTMT: goto yyc_STMT; + case yycINV_FOR_STMT: goto yyc_INV_FOR_STMT; + case yycP3: goto yyc_P3; + case yycSEARCH_SCOPE: goto yyc_SEARCH_SCOPE; + case yycID_CUR_SCOPE: goto yyc_ID_CUR_SCOPE; + case yycID_LIST: goto yyc_ID_LIST; + case yycENUM_ID_LIST: goto yyc_ENUM_ID_LIST; + case yycLABEL_OPT: goto yyc_LABEL_OPT; + case yycENUM_REF: goto yyc_ENUM_REF; + case yycENTITY_REF: goto yyc_ENTITY_REF; + case yycDOT_ATTR: goto yyc_DOT_ATTR; + case yycCONSTANT: goto yyc_CONSTANT; + case yycLOCAL: goto yyc_LOCAL; + case yycINV_FOR: goto yyc_INV_FOR; + case yycSUBTYPE_CONS: goto yyc_SUBTYPE_CONS; } - - /* bytes of input being used by scanner */ - bytesInUse = (size_t)null - (size_t)scannerFirst + 1; - - /* copy in-use elements to start of buffer */ - memmove(bufFirst, scannerFirst, bytesInUse); - - /* update number of elements */ - buf->nelts = bytesInUse / buf->elt_size; - - /* update markers */ - shiftSize = (size_t)scannerFirst - (size_t)bufFirst; - scanner->marker -= shiftSize; - scanner->cursor -= shiftSize; - scanner->null -= shiftSize; - scanner->tokenStart -= shiftSize; - } - bufferAppend(scanner, n); -} - -static char* -getTokenText(perplex_t scanner) -{ - int tokenChars = scanner->cursor - scanner->tokenStart; - - if (scanner->tokenText != NULL) { - free(scanner->tokenText); - } - - scanner->tokenText = (char*)malloc(sizeof(char) * (tokenChars + 1)); - - memcpy(scanner->tokenText, scanner->tokenStart, tokenChars); - scanner->tokenText[tokenChars] = '\0'; - - return scanner->tokenText; -} - -/* scanner helpers */ -#define UPDATE_START scanner->tokenStart = scanner->cursor; -#define IGNORE_TOKEN UPDATE_START; continue; -#define yytext getTokenText(scanner) -#define yyextra scanner->extra - -static perplex_t -newScanner() -{ - perplex_t scanner; - scanner = (perplex_t)calloc(1, sizeof(struct perplex)); - - return scanner; -} - -static void -initBuffer(perplex_t scanner) -{ - scanner->buffer = (struct Buf*)malloc(sizeof(struct Buf)); - buf_init(scanner->buffer, sizeof(char)); -} - -/* public functions */ - -perplex_t -perplexStringScanner(char *firstChar, size_t numChars) -{ - size_t i; - struct Buf *buf; - perplex_t scanner = newScanner(); - - scanner->inFile = NULL; - - initBuffer(scanner); - buf = scanner->buffer; - - /* copy string to buffer */ - for (i = 0; i < numChars; i++) { - bufferAppendChar(buf, firstChar[i]); - } - bufferAppendChar(buf, '\0'); - - scanner->marker = scanner->cursor = bufferFirstElt(buf); - scanner->null = bufferLastElt(buf); - scanner->atEOI = 1; - - return scanner; -} - -perplex_t -perplexFileScanner(FILE *input) -{ - char *bufFirst; - perplex_t scanner = newScanner(); - - scanner->inFile = input; - - initBuffer(scanner); - bufferAppendChar(scanner->buffer, '\0'); - - bufFirst = bufferFirstElt(scanner->buffer); - scanner->null = scanner->marker = scanner->cursor = bufFirst; - - return scanner; -} - -void -perplexFree(perplex_t scanner) -{ - if (scanner->buffer != NULL) { - buf_destroy(scanner->buffer); - free(scanner->buffer); - } - - free(scanner); -} - -void -perplexSetExtra(perplex_t scanner, void *extra) -{ - scanner->extra = extra; -} - -void* -perplexGetExtra(perplex_t scanner) -{ - return scanner->extra; -} - -/* Make c the next character to be scanned. - * - * This performs an insert, leaving the input buffer prior to the cursor -* unchanged. - */ -void -perplexUnput(perplex_t scanner, char c) -{ - struct Buf *buf; - char *curr, *cursor, *bufStart; - size_t markerOffset, tokenStartOffset, cursorOffset; - - buf = scanner->buffer; - - /* save marker offsets */ - bufStart = bufferFirstElt(buf); - cursorOffset = (size_t)(scanner->cursor - bufStart); - markerOffset = (size_t)(scanner->marker - bufStart); - tokenStartOffset = (size_t)(scanner->tokenStart - bufStart); - - /* append character to create room for shift */ - bufferAppendChar(buf, '\0'); - scanner->null = bufferLastElt(buf); - - /* update markers in case append caused buffer to be reallocated */ - bufStart = bufferFirstElt(buf); - scanner->cursor = bufStart + cursorOffset; - scanner->marker = bufStart + markerOffset; - scanner->tokenStart = bufStart + tokenStartOffset; - - /* input from cursor to null is shifted to the right */ - cursor = scanner->cursor; - for (curr = scanner->null; curr != cursor; curr--) { - curr[0] = curr[-1]; - } - - /* insert c */ - *curr = c; -} - -#ifdef PERPLEX_USING_CONDITIONS -/* start-condition support */ -static void -setCondition(perplex_t scanner, int cond) -{ - scanner->condition = cond; -} - -static int -getCondition(perplex_t scanner) -{ - return scanner->condition; -} - -/* required re2c macros */ -#define YYGETCONDITION getCondition(scanner) -#define YYSETCONDITION(c) setCondition(scanner, c) -#endif - -/* required re2c macro */ -#define YYFILL(n) bufferFill(scanner, n) - -/* scanner */ -static int PERPLEX_PRIVATE_LEXER; - -int -PERPLEX_PUBLIC_LEXER { - int ret; - - UPDATE_START; - - scanner->tokenText = NULL; - - ret = PERPLEX_LEXER_private(scanner); - - if (scanner->tokenText != NULL) { - free(scanner->tokenText); - scanner->tokenText = NULL; - } - - return ret; -} - -static int -PERPLEX_PRIVATE_LEXER { - char yych; - - PERPLEX_ON_ENTER; - - while (1) { - if (scanner->atEOI && scanner->cursor >= scanner->null) { - return YYEOF; +/****************** P1 *****************/ +yyc_P1: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy5; + case '\n': goto yy8; + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '+': + case ',': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy10; + case '\'': goto yy13; + case '(': goto yy15; + case ')': + case '*': goto yy17; + case '-': goto yy18; + default: goto yy3; } - +yy3: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" { - unsigned int yyaccept = 0; - switch (YYGETCONDITION) { - case 0: goto yyc_0; - case code: goto yyc_code; - case comment: goto yyc_comment; - case return_end_schema: goto yyc_return_end_schema; - } -/* *********************************** */ -yyc_0: - - YYSETCONDITION(code); - { -} -/* *********************************** */ -yyc_code: - if ((scanner->null - scanner->cursor) < 4) YYFILL(4); - yych = *scanner->cursor; - switch (yych) { - case '\t': - case ' ': goto yy8; - case '\n': goto yy9; - case '"': goto yy11; - case '$': - case '&': - case '@': - case '^': - case '~': goto yy12; - case '%': goto yy14; - case '\'': goto yy15; - case '(': goto yy16; - case ')': goto yy18; - case '*': goto yy20; - case '+': goto yy22; - case ',': goto yy24; - case '-': goto yy26; - case '.': goto yy28; - case '/': goto yy30; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy32; - case ':': goto yy34; - case ';': goto yy36; - case '<': goto yy38; - case '=': goto yy40; - case '>': goto yy42; - case '?': goto yy44; - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': goto yy46; - case '[': goto yy48; - case '\\': goto yy50; - case ']': goto yy52; - case '_': goto yy54; - case '{': goto yy56; - case '|': goto yy58; - case '}': goto yy60; - default: goto yy6; - } + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 237 "expscan.c" yy5: - { -IGNORE_TOKEN; } -yy6: - ++scanner->cursor; + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy5; + default: goto yy7; + } yy7: - { -IGNORE_TOKEN; } +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 249 "expscan.c" yy8: - yych = *++scanner->cursor; - goto yy127; -yy9: - ++scanner->cursor; - { -NEWLINE; -IGNORE_TOKEN; -} -yy11: - yyaccept = 0; - yych = *(scanner->marker = ++scanner->cursor); - goto yy121; + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 254 "expscan.c" +yy10: + yych = *++pScanner->cur; + switch (yych) { + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '+': + case ',': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy10; + default: goto yy12; + } yy12: - ++scanner->cursor; +#line 72 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 352 "expscan.c" yy13: - { -ERRORreport_with_line(UNEXPECTED_CHARACTER,yylineno,yytext[0]); -IGNORE_TOKEN; -} + yyaccept = 0; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy20; + default: goto yy14; + } yy14: - yych = *++scanner->cursor; - switch (yych) { - case '0': - case '1': goto yy117; - default: goto yy13; - } +#line 70 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yyerror("invalid string literal! '%.*s'", pScanner->lineno, 20, pScanner->cur); } +#line 460 "expscan.c" yy15: - yyaccept = 0; - yych = *(scanner->marker = ++scanner->cursor); - goto yy112; + yych = *++pScanner->cur; + switch (yych) { + case '*': goto yy24; + default: goto yy16; + } yy16: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case '*': goto yy109; - default: goto yy17; - } +#line 74 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 470 "expscan.c" yy17: - { -return TOK_LEFT_PAREN; } + ++pScanner->cur; + goto yy16; yy18: - ++scanner->cursor; - { -return TOK_RIGHT_PAREN; } + yych = *++pScanner->cur; + switch (yych) { + case '-': goto yy26; + default: goto yy16; + } +yy19: + yych = *++pScanner->cur; yy20: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case ')': goto yy105; - case '*': goto yy107; - default: goto yy21; - } + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy19; + case '\'': goto yy22; + default: goto yy21; + } yy21: - { -return TOK_TIMES; } + pScanner->cur = pScanner->mrk; + switch (yyaccept) { + case 0: goto yy14; + case 1: goto yy23; + default: goto yy27; + } yy22: - ++scanner->cursor; - { -return TOK_PLUS; } + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\'': goto yy19; + default: goto yy23; + } +yy23: +#line 68 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 601 "expscan.c" yy24: - ++scanner->cursor; - { -return TOK_COMMA; } + ++pScanner->cur; +#line 55 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + yy_push_state(yycCOMMENT, pScanner); + continue; + } +#line 610 "expscan.c" yy26: - yyaccept = 1; - yych = *(scanner->marker = ++scanner->cursor); - switch (yych) { - case '-': goto yy101; - default: goto yy27; - } + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy29; + default: goto yy27; + } yy27: - { -return TOK_MINUS; } +#line 66 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yyerror("invalid characters in tail remark! '%.*s'", pScanner->lineno, 20, pScanner->cur); } +#line 718 "expscan.c" yy28: - ++scanner->cursor; - { -return TOK_DOT; } + yych = *++pScanner->cur; +yy29: + switch (yych) { + case '\t': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy28; + case '\n': goto yy30; + default: goto yy21; + } yy30: - ++scanner->cursor; - { -return TOK_REAL_DIV; } -yy32: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case '.': goto yy94; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy92; - default: goto yy33; - } -yy33: - { -return SCANprocess_integer_literal(yytext); -} + ++pScanner->cur; + pScanner->cur -= 1; +#line 61 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; + } +#line 831 "expscan.c" +/****************** COMMENT *****************/ +yyc_COMMENT: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy36; + case '\n': goto yy39; + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy41; + case '(': goto yy44; + case ')': goto yy46; + case '*': goto yy47; + default: goto yy34; + } yy34: - yyaccept = 2; - yych = *(scanner->marker = ++scanner->cursor); - switch (yych) { - case '<': goto yy84; - case '=': goto yy85; - default: goto yy35; - } -yy35: - { -return TOK_COLON; } + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 942 "expscan.c" yy36: - yyaccept = 3; - yych = *(scanner->marker = ++scanner->cursor); - switch (yych) { - case '\t': - case ' ': goto yy76; - case '-': goto yy79; - default: goto yy37; - } -yy37: - { -return SCANprocess_semicolon(yytext, 0); } + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy36; + default: goto yy38; + } yy38: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case '*': goto yy74; - case '=': goto yy72; - case '>': goto yy70; - default: goto yy39; - } +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 954 "expscan.c" yy39: - { -return TOK_LESS_THAN; } -yy40: - ++scanner->cursor; - { -return TOK_EQUAL; } -yy42: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case '=': goto yy68; - default: goto yy43; - } + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 959 "expscan.c" +yy41: + yych = *++pScanner->cur; + switch (yych) { + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy41; + default: goto yy43; + } yy43: - { -return TOK_GREATER_THAN; } +#line 90 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; + } +#line 1062 "expscan.c" yy44: - ++scanner->cursor; - { -return TOK_QUESTION_MARK; } + yych = *++pScanner->cur; + switch (yych) { + case '*': goto yy50; + default: goto yy45; + } +yy45: +#line 94 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; + } +#line 1075 "expscan.c" yy46: - ++scanner->cursor; - yych = *scanner->cursor; - goto yy67; + ++pScanner->cur; + goto yy45; yy47: - { -return SCANprocess_identifier_or_keyword(yytext); -} -yy48: - ++scanner->cursor; - { -return TOK_LEFT_BRACKET; } + yych = *++pScanner->cur; + switch (yych) { + case ')': goto yy52; + case '*': goto yy47; + default: goto yy49; + } +yy49: +#line 86 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + continue; + } +#line 1092 "expscan.c" yy50: - ++scanner->cursor; - { -return TOK_BACKSLASH; } + ++pScanner->cur; +#line 76 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + yy_push_state(yycCOMMENT, pScanner); + continue; + } +#line 1101 "expscan.c" yy52: - ++scanner->cursor; - { -return TOK_RIGHT_BRACKET; } -yy54: - ++scanner->cursor; - yych = *scanner->cursor; - goto yy65; -yy55: - { -ERRORreport_with_line(BAD_IDENTIFIER, yylineno, yytext); -return SCANprocess_identifier_or_keyword(yytext); -} + ++pScanner->cur; +#line 81 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + memset(pScanner->tok, ' ', pScanner->cur - pScanner->tok); + yy_pop_state(pScanner); + continue; + } +#line 1110 "expscan.c" +/****************** P2 *****************/ +yyc_P2: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy58; + case '\n': goto yy61; + case '\'': goto yy63; + case 'A': + case 'B': + case 'C': + case 'D': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'Q': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'q': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy64; + case 'E': + case 'e': goto yy67; + case 'F': + case 'f': goto yy68; + case 'P': + case 'p': goto yy69; + case 'R': + case 'r': goto yy70; + case 'S': + case 's': goto yy71; + case 'T': + case 't': goto yy72; + default: goto yy56; + } yy56: - ++scanner->cursor; - { -return TOK_LEFT_CURL; } + ++pScanner->cur; +yy57: +#line 174 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 1179 "expscan.c" yy58: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case '|': goto yy62; - default: goto yy59; - } -yy59: - { -return TOK_SUCH_THAT; } + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy58; + default: goto yy60; + } yy60: - ++scanner->cursor; - { -return TOK_RIGHT_CURL; } -yy62: - ++scanner->cursor; - { -return TOK_CONCAT_OP; } +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 1191 "expscan.c" +yy61: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 1196 "expscan.c" +yy63: + yyaccept = 0; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy74; + default: goto yy57; + } yy64: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; + yych = *++pScanner->cur; yy65: - switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - case '_': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': goto yy64; - default: goto yy55; - } + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy64; + default: goto yy66; + } yy66: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; +#line 173 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 1373 "expscan.c" yy67: - switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': - case 'A': - case 'B': - case 'C': - case 'D': - case 'E': - case 'F': - case 'G': - case 'H': - case 'I': - case 'J': - case 'K': - case 'L': - case 'M': - case 'N': - case 'O': - case 'P': - case 'Q': - case 'R': - case 'S': - case 'T': - case 'U': - case 'V': - case 'W': - case 'X': - case 'Y': - case 'Z': - case '_': - case 'a': - case 'b': - case 'c': - case 'd': - case 'e': - case 'f': - case 'g': - case 'h': - case 'i': - case 'j': - case 'k': - case 'l': - case 'm': - case 'n': - case 'o': - case 'p': - case 'q': - case 'r': - case 's': - case 't': - case 'u': - case 'v': - case 'w': - case 'x': - case 'y': - case 'z': goto yy66; - default: goto yy47; - } + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy78; + default: goto yy65; + } yy68: - ++scanner->cursor; - { -return TOK_GREATER_EQUAL; } + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy79; + default: goto yy65; + } +yy69: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy80; + default: goto yy65; + } yy70: - ++scanner->cursor; - { -return TOK_NOT_EQUAL; } + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy81; + default: goto yy65; + } +yy71: + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy82; + default: goto yy65; + } yy72: - ++scanner->cursor; - { -return TOK_LESS_EQUAL; } + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy83; + default: goto yy65; + } +yy73: + yych = *++pScanner->cur; yy74: - ++scanner->cursor; - { -return TOK_ALL_IN; } + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy73; + case '\'': goto yy76; + default: goto yy75; + } +yy75: + pScanner->cur = pScanner->mrk; + switch (yyaccept) { + case 0: goto yy57; + case 1: goto yy77; + default: goto yy66; + } yy76: - ++scanner->cursor; - if ((scanner->null - scanner->cursor) < 2) YYFILL(2); - yych = *scanner->cursor; - switch (yych) { - case '\t': - case ' ': goto yy76; - case '-': goto yy79; - default: goto yy78; - } + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\'': goto yy73; + default: goto yy77; + } +yy77: +#line 172 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 1537 "expscan.c" yy78: - scanner->cursor = scanner->marker; - switch (yyaccept) { - case 0: goto yy7; - case 1: goto yy27; - case 2: goto yy35; - case 3: goto yy37; - case 4: goto yy96; - case 5: goto yy114; - } + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy84; + case 'T': + case 't': goto yy85; + default: goto yy65; + } yy79: - yych = *++scanner->cursor; - switch (yych) { - case '-': goto yy80; - default: goto yy78; - } + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy86; + default: goto yy65; + } yy80: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; - switch (yych) { - case '\n': goto yy82; - default: goto yy80; - } + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy87; + default: goto yy65; + } +yy81: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy88; + default: goto yy65; + } yy82: - ++scanner->cursor; - { -NEWLINE; -return SCANprocess_semicolon(yytext, 1); -} + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy89; + default: goto yy65; + } +yy83: + yych = *++pScanner->cur; + switch (yych) { + case 'P': + case 'p': goto yy90; + default: goto yy65; + } yy84: - yych = *++scanner->cursor; - switch (yych) { - case '>': goto yy89; - default: goto yy78; - } + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy91; + default: goto yy65; + } yy85: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case ':': goto yy87; - default: goto yy86; - } + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy92; + default: goto yy65; + } yy86: - { -return TOK_ASSIGNMENT; } + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy93; + default: goto yy65; + } yy87: - ++scanner->cursor; - { -return TOK_INST_EQUAL; } + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy94; + default: goto yy65; + } +yy88: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy95; + default: goto yy65; + } yy89: - yych = *++scanner->cursor; - switch (yych) { - case ':': goto yy90; - default: goto yy78; - } + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy96; + default: goto yy65; + } yy90: - ++scanner->cursor; - { -return TOK_INST_NOT_EQUAL; } + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy97; + default: goto yy65; + } +yy91: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy98; + case 'F': + case 'f': goto yy99; + case 'P': + case 'p': goto yy100; + case 'R': + case 'r': goto yy101; + case 'S': + case 's': goto yy102; + case 'T': + case 't': goto yy103; + default: goto yy65; + } yy92: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; - switch (yych) { - case '.': goto yy94; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy92; - default: goto yy33; - } + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy104; + default: goto yy65; + } +yy93: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy105; + default: goto yy65; + } yy94: - yyaccept = 4; - scanner->marker = ++scanner->cursor; - if ((scanner->null - scanner->cursor) < 3) YYFILL(3); - yych = *scanner->cursor; - switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy94; - case 'E': - case 'e': goto yy97; - default: goto yy96; - } + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy106; + default: goto yy65; + } +yy95: + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy107; + default: goto yy65; + } yy96: - { -return SCANprocess_real_literal(yytext); -} + yych = *++pScanner->cur; + switch (yych) { + case 'M': + case 'm': goto yy109; + default: goto yy65; + } yy97: - yych = *++scanner->cursor; - switch (yych) { - case '+': - case '-': goto yy98; - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy99; - default: goto yy78; - } + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy110; + default: goto yy65; + } yy98: - yych = *++scanner->cursor; - switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy99; - default: goto yy78; - } + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy112; + default: goto yy65; + } yy99: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; - switch (yych) { - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': goto yy99; - default: goto yy96; - } + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy113; + default: goto yy65; + } +yy100: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy114; + default: goto yy65; + } yy101: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; - switch (yych) { - case '\n': goto yy103; - default: goto yy101; - } + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy115; + default: goto yy65; + } +yy102: + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy116; + default: goto yy65; + } yy103: - ++scanner->cursor; - { -NEWLINE; -SCANsave_comment(yytext); -IGNORE_TOKEN; -} + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy117; + default: goto yy65; + } +yy104: + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy118; + default: goto yy65; + } yy105: - ++scanner->cursor; - { -ERRORreport_with_line(UNMATCHED_CLOSE_COMMENT, yylineno); -IGNORE_TOKEN; -} + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy119; + default: goto yy65; + } +yy106: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy120; + default: goto yy65; + } yy107: - ++scanner->cursor; - { -return TOK_EXP; } + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy107; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy121; + default: goto yy75; + } yy109: - ++scanner->cursor; - YYSETCONDITION(comment); - { -if (nesting_level cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy124; + default: goto yy65; + } +yy110: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy110; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy125; + default: goto yy75; + } yy112: - switch (yych) { - case '\n': goto yy115; - case '\'': goto yy113; - default: goto yy111; - } + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy128; + default: goto yy65; + } yy113: - yyaccept = 5; - scanner->marker = ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; - switch (yych) { - case '\'': goto yy111; - default: goto yy114; - } + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy129; + default: goto yy65; + } yy114: - { -return SCANprocess_string(yytext); -} + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy130; + default: goto yy65; + } yy115: - ++scanner->cursor; - { -ERRORreport_with_line(UNTERMINATED_STRING, LINENO_FUDGE); -NEWLINE; -return SCANprocess_string(yytext); -} + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy131; + default: goto yy65; + } +yy116: + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy132; + default: goto yy65; + } yy117: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; - switch (yych) { - case '0': - case '1': goto yy117; - default: goto yy119; - } + yych = *++pScanner->cur; + switch (yych) { + case 'P': + case 'p': goto yy131; + default: goto yy65; + } +yy118: + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy133; + default: goto yy65; + } yy119: - { -return SCANprocess_binary_literal(yytext); -} + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy135; + default: goto yy65; + } yy120: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy136; + default: goto yy65; + } yy121: - switch (yych) { - case '\n': goto yy122; - case '"': goto yy124; - default: goto yy120; - } -yy122: - ++scanner->cursor; - { -ERRORreport_with_line(UNTERMINATED_STRING, LINENO_FUDGE); -NEWLINE; -return SCANprocess_encoded_string(yytext); -} + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy121; + default: goto yy123; + } +yy123: + id = yyt1; +#line 133 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_RULE_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "RULE", OBJ_RULE_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } +#line 2039 "expscan.c" yy124: - ++scanner->cursor; - { -return SCANprocess_encoded_string(yytext); -} -yy126: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy137; + default: goto yy65; + } +yy125: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy125; + default: goto yy127; + } yy127: - switch (yych) { - case '\t': - case ' ': goto yy126; - default: goto yy5; - } -/* *********************************** */ -yyc_comment: - if ((scanner->null - scanner->cursor) < 2) YYFILL(2); - yych = *scanner->cursor; - switch (yych) { - case '\t': - case ' ': goto yy132; - case '\n': goto yy133; - case '(': goto yy135; - case ')': goto yy137; - case '*': goto yy138; - default: goto yy131; - } + id = yyt1; +#line 155 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_TYPE_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "TYPE", OBJ_TYPE_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } +#line 2132 "expscan.c" +yy128: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy139; + default: goto yy65; + } +yy129: + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy140; + default: goto yy65; + } yy130: - { -IGNORE_TOKEN; } + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy141; + default: goto yy65; + } yy131: - yych = *++scanner->cursor; - goto yy144; + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy142; + default: goto yy65; + } yy132: - yych = *++scanner->cursor; - switch (yych) { - case '\t': - case ' ': goto yy145; - default: goto yy144; - } + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy143; + default: goto yy65; + } yy133: - ++scanner->cursor; - { -NEWLINE; -IGNORE_TOKEN; -} + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy133; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy144; + default: goto yy75; + } yy135: - ++scanner->cursor; - switch ((yych = *scanner->cursor)) { - case '*': goto yy141; - default: goto yy136; - } + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy147; + default: goto yy65; + } yy136: - { -IGNORE_TOKEN; } + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy148; + default: goto yy65; + } yy137: - yych = *++scanner->cursor; - goto yy136; -yy138: - yych = *++scanner->cursor; - switch (yych) { - case ')': goto yy139; - default: goto yy136; - } + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy137; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy149; + default: goto yy75; + } yy139: - ++scanner->cursor; - { -if (0 == --nesting_level) { -YYSETCONDITION(code); -} -IGNORE_TOKEN; -} + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy152; + default: goto yy65; + } +yy140: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy153; + default: goto yy65; + } yy141: - ++scanner->cursor; - { -if (nesting_level cur; + switch (yych) { + case 'E': + case 'e': goto yy154; + default: goto yy65; + } +yy142: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case ';': goto yy155; + default: goto yy65; + } yy143: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; + yych = *++pScanner->cur; + switch (yych) { + case 'M': + case 'm': goto yy157; + default: goto yy65; + } yy144: - switch (yych) { - case '\n': - case '(': - case ')': - case '*': goto yy130; - default: goto yy143; - } -yy145: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; - switch (yych) { - case '\t': - case ' ': goto yy145; - case '\n': - case '(': - case ')': - case '*': goto yy130; - default: goto yy143; - } -/* *********************************** */ -yyc_return_end_schema: - if ((scanner->null - scanner->cursor) < 2) YYFILL(2); - yych = *scanner->cursor; - switch (yych) { - case '\t': - case ' ': goto yy152; - case '\n': goto yy153; - case '(': goto yy155; - case 'X': - case 'x': goto yy156; - default: goto yy150; - } + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy144; + default: goto yy146; + } +yy146: + id = yyt1; +#line 144 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_ENTITY_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "ENTITY", OBJ_ENTITY_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } +#line 2428 "expscan.c" +yy147: + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy158; + default: goto yy65; + } +yy148: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy160; + default: goto yy65; + } yy149: - { -IGNORE_TOKEN; } -yy150: - ++scanner->cursor; + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy149; + default: goto yy151; + } yy151: - { -IGNORE_TOKEN; } + id = yyt1; +#line 100 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_SCHEMA_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "SCHEMA", OBJ_SCHEMA_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } +#line 2528 "expscan.c" yy152: - yych = *++scanner->cursor; - goto yy161; + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy142; + default: goto yy65; + } yy153: - ++scanner->cursor; - { -NEWLINE; -IGNORE_TOKEN; -} + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy161; + default: goto yy65; + } +yy154: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy162; + default: goto yy65; + } yy155: - yych = *++scanner->cursor; - switch (yych) { - case '*': goto yy158; - default: goto yy151; - } -yy156: - ++scanner->cursor; - YYSETCONDITION(code); - { -return TOK_END_SCHEMA; -} + ++pScanner->cur; + pScanner->cur -= 1; +#line 167 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + scope_pop(pState, pScanner); + continue; + } +#line 2558 "expscan.c" +yy157: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy142; + default: goto yy65; + } yy158: - ++scanner->cursor; - YYSETCONDITION(comment); - { -if (nesting_level cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy158; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy163; + default: goto yy75; + } yy160: - ++scanner->cursor; - if (scanner->null <= scanner->cursor) YYFILL(1); - yych = *scanner->cursor; + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy166; + default: goto yy65; + } yy161: - switch (yych) { - case '\t': - case ' ': goto yy160; - default: goto yy149; - } + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy168; + default: goto yy65; + } +yy162: + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy169; + default: goto yy65; } +yy163: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy163; + default: goto yy165; + } +yy165: + id = yyt1; +#line 111 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_FUNCTION_REF, pScanner); - } -} + idx = scope_alloc(pState->scope_stack, "FUNCTION", OBJ_FUNCTION_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); -/* start code */ -void -SCANskip_to_end_schema(perplex_t scanner) -{ -while (yylex(scanner) != TOK_END_SCHEMA); -perplexUnput(scanner, 'X'); /* any old character */ -YYSETCONDITION(return_end_schema); + continue; + } +#line 2735 "expscan.c" +yy166: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy166; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy170; + default: goto yy75; + } +yy168: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy142; + default: goto yy65; + } +yy169: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy131; + default: goto yy65; + } +yy170: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy170; + default: goto yy172; + } +yy172: + id = yyt1; +#line 122 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - id, id); + add_symbol(pState->scope_stack->entry + pScanner->scope_top, ibuffer, T_PROCEDURE_REF, pScanner); + + idx = scope_alloc(pState->scope_stack, "PROCEDURE", OBJ_PROCEDURE_BITS); + scope_push(pState, idx, pScanner); + sp = pState->scope_stack->entry + idx; + sp->symbol.name = strndup(id, pScanner->cur - id); + + continue; + } +#line 2895 "expscan.c" +/****************** TYPE *****************/ +yyc_TYPE: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy176; + case '\n': goto yy179; + case ';': goto yy181; + case '=': goto yy183; + case 'E': + case 'e': goto yy185; + case 'W': + case 'w': goto yy187; + default: goto yy175; + } +yy175: +#line 200 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_push_state(yycSTMT, pScanner); continue; } +#line 2915 "expscan.c" +yy176: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy176; + default: goto yy178; + } +yy178: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 2927 "expscan.c" +yy179: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 2932 "expscan.c" +yy181: + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy188; + case 'E': + case 'e': + yyt1 = pScanner->cur; + goto yy190; + case 'W': + case 'w': + yyt1 = pScanner->cur; + goto yy191; + default: goto yy182; + } +yy182: +#line 189 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_SEMICOLON; + } +#line 2960 "expscan.c" +yy183: + ++pScanner->cur; +#line 177 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_EQ; } +#line 2965 "expscan.c" +yy185: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy192; + case 'X': + case 'x': goto yy193; + default: goto yy186; + } +yy186: + pScanner->cur = pScanner->mrk; + if (yyaccept == 0) { + goto yy175; + } else { + goto yy182; + } +yy187: + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy194; + default: goto yy186; + } +yy188: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy188; + case 'E': + case 'e': goto yy190; + case 'W': + case 'w': goto yy191; + default: goto yy186; + } +yy190: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy195; + default: goto yy186; + } +yy191: + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy196; + default: goto yy186; + } +yy192: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy197; + case 'U': + case 'u': goto yy198; + default: goto yy186; + } +yy193: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy199; + default: goto yy186; + } +yy194: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy200; + default: goto yy186; + } +yy195: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy201; + default: goto yy186; + } +yy196: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy202; + default: goto yy186; + } +yy197: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy203; + default: goto yy186; + } +yy198: + yych = *++pScanner->cur; + switch (yych) { + case 'M': + case 'm': goto yy204; + default: goto yy186; + } +yy199: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy205; + default: goto yy186; + } +yy200: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy206; + default: goto yy186; + } +yy201: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy207; + default: goto yy186; + } +yy202: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy208; + default: goto yy186; + } +yy203: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy209; + default: goto yy186; + } +yy204: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy210; + default: goto yy186; + } +yy205: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy211; + default: goto yy186; + } +yy206: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy212; + default: goto yy186; + } +yy207: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy213; + default: goto yy186; + } +yy208: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy214; + default: goto yy186; + } +yy209: + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy216; + default: goto yy186; + } +yy210: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy217; + default: goto yy186; + } +yy211: + yych = *++pScanner->cur; + switch (yych) { + case 'S': + case 's': goto yy218; + default: goto yy186; + } +yy212: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy219; + default: goto yy186; + } +yy213: + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy221; + default: goto yy186; + } +yy214: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 188 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 3177 "expscan.c" +yy216: + yych = *++pScanner->cur; + switch (yych) { + case 'P': + case 'p': goto yy222; + default: goto yy186; + } +yy217: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy223; + default: goto yy186; + } +yy218: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy224; + default: goto yy186; + } +yy219: + ++pScanner->cur; + pScanner->cur -= 1; +#line 183 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_WHERE; + } +#line 3208 "expscan.c" +yy221: + yych = *++pScanner->cur; + switch (yych) { + case 'P': + case 'p': goto yy225; + default: goto yy186; + } +yy222: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy226; + default: goto yy186; + } +yy223: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy227; + default: goto yy186; + } +yy224: + yych = *++pScanner->cur; + switch (yych) { + case 'B': + case 'b': goto yy228; + default: goto yy186; + } +yy225: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy229; + default: goto yy186; + } +yy226: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case ';': goto yy231; + default: goto yy186; + } +yy227: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy233; + default: goto yy186; + } +yy228: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy234; + default: goto yy186; + } +yy229: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 194 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 3273 "expscan.c" +yy231: + ++pScanner->cur; + pScanner->cur -= 1; +#line 195 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_pop_state(pScanner); + scope_pop(pState, pScanner); + return T_END_TYPE; + } +#line 3283 "expscan.c" +yy233: + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy235; + default: goto yy186; + } +yy234: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy236; + default: goto yy186; + } +yy235: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy237; + default: goto yy186; + } +yy236: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy238; + default: goto yy186; + } +yy237: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy240; + default: goto yy186; + } +yy238: + ++pScanner->cur; + pScanner->cur -= 1; +#line 182 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_EXTENSIBLE; } +#line 3328 "expscan.c" +yy240: + ++pScanner->cur; + pScanner->cur -= 1; +#line 178 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_push_state(yycENUM, pScanner); + return T_ENUMERATION; + } +#line 3337 "expscan.c" +/****************** ENUM *****************/ +yyc_ENUM: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy245; + case '\n': goto yy248; + case '(': goto yy250; + case ')': goto yy252; + default: goto yy244; + } +yy244: + (void)(yycP3); + goto yyc_P3; +yy245: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy245; + default: goto yy247; + } +yy247: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 3364 "expscan.c" +yy248: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 3369 "expscan.c" +yy250: + ++pScanner->cur; +#line 202 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_push_state(yycENUM_ID_LIST, pScanner); return T_LPAREN; } +#line 3374 "expscan.c" +yy252: + ++pScanner->cur; +#line 203 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_pop_state(pScanner); return T_RPAREN; } +#line 3379 "expscan.c" +/****************** ENTITY *****************/ +yyc_ENTITY: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy257; + case '\n': goto yy260; + case ':': goto yy262; + case ';': goto yy264; + case 'D': + case 'd': goto yy266; + case 'E': + case 'e': goto yy267; + case 'I': + case 'i': goto yy268; + case 'U': + case 'u': goto yy269; + case 'W': + case 'w': goto yy270; + default: goto yy256; + } +yy256: + (void)(yycP3); + goto yyc_P3; +yy257: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy257; + default: goto yy259; + } +yy259: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 3416 "expscan.c" +yy260: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 3421 "expscan.c" +yy262: + yych = *++pScanner->cur; + switch (yych) { + case '<': + case '=': goto yy263; + default: goto yy271; + } +yy263: + pScanner->cur = pScanner->mrk; + if (yyaccept == 0) { + goto yy256; + } else { + goto yy265; + } +yy264: + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy273; + case 'D': + case 'd': + yyt1 = pScanner->cur; + goto yy275; + case 'E': + case 'e': + yyt1 = pScanner->cur; + goto yy276; + case 'I': + case 'i': + yyt1 = pScanner->cur; + goto yy277; + case 'U': + case 'u': + yyt1 = pScanner->cur; + goto yy278; + case 'W': + case 'w': + yyt1 = pScanner->cur; + goto yy279; + default: goto yy265; + } +yy265: +#line 256 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + if (pScanner->scope_aux) { + scope_push(pState, pScanner->scope_aux, pScanner); + pScanner->scope_aux = 0; + } + if (!pScanner->in_rules_clause) { + yy_push_state(yycID_LIST, pScanner); + } else { + yy_push_state(yycLABEL_OPT, pScanner); + } + return T_SEMICOLON; + } +#line 3482 "expscan.c" +yy266: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy280; + default: goto yy263; + } +yy267: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy281; + default: goto yy263; + } +yy268: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy282; + default: goto yy263; + } +yy269: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy283; + default: goto yy263; + } +yy270: + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy284; + default: goto yy263; + } +yy271: + ++pScanner->cur; + pScanner->cur -= 1; +#line 238 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + if (pScanner->in_inverse_clause || pScanner->in_explicit_attr) { + pScanner->scope_aux = scope_pop(pState, pScanner); + } + if (!pScanner->in_inverse_clause) { + yy_push_state(yycSTMT, pScanner); + } else { + yy_push_state(yycINV_FOR_STMT, pScanner); + } + return T_COLON; + } +#line 3533 "expscan.c" +yy273: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy273; + case 'D': + case 'd': goto yy275; + case 'E': + case 'e': goto yy276; + case 'I': + case 'i': goto yy277; + case 'U': + case 'u': goto yy278; + case 'W': + case 'w': goto yy279; + default: goto yy263; + } +yy275: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy285; + default: goto yy263; + } +yy276: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy286; + default: goto yy263; + } +yy277: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy287; + default: goto yy263; + } +yy278: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy288; + default: goto yy263; + } +yy279: + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy289; + default: goto yy263; + } +yy280: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy290; + default: goto yy263; + } +yy281: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy291; + default: goto yy263; + } +yy282: + yych = *++pScanner->cur; + switch (yych) { + case 'V': + case 'v': goto yy292; + default: goto yy263; + } +yy283: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy293; + default: goto yy263; + } +yy284: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy294; + default: goto yy263; + } +yy285: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy295; + default: goto yy263; + } +yy286: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy296; + default: goto yy263; + } +yy287: + yych = *++pScanner->cur; + switch (yych) { + case 'V': + case 'v': goto yy297; + default: goto yy263; + } +yy288: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy298; + default: goto yy263; + } +yy289: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy299; + default: goto yy263; + } +yy290: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy300; + default: goto yy263; + } +yy291: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy301; + default: goto yy263; + } +yy292: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy302; + default: goto yy263; + } +yy293: + yych = *++pScanner->cur; + switch (yych) { + case 'Q': + case 'q': goto yy303; + default: goto yy263; + } +yy294: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy304; + default: goto yy263; + } +yy295: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy305; + default: goto yy263; + } +yy296: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy306; + default: goto yy263; + } +yy297: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy307; + default: goto yy263; + } +yy298: + yych = *++pScanner->cur; + switch (yych) { + case 'Q': + case 'q': goto yy308; + default: goto yy263; + } +yy299: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy309; + default: goto yy263; + } +yy300: + yych = *++pScanner->cur; + switch (yych) { + case 'V': + case 'v': goto yy310; + default: goto yy263; + } +yy301: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy311; + default: goto yy263; + } +yy302: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy312; + default: goto yy263; + } +yy303: + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy313; + default: goto yy263; + } +yy304: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy314; + default: goto yy263; + } +yy305: + yych = *++pScanner->cur; + switch (yych) { + case 'V': + case 'v': goto yy309; + default: goto yy263; + } +yy306: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy315; + default: goto yy263; + } +yy307: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy316; + default: goto yy263; + } +yy308: + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy309; + default: goto yy263; + } +yy309: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy317; + default: goto yy263; + } +yy310: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy318; + default: goto yy263; + } +yy311: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy319; + default: goto yy263; + } +yy312: + yych = *++pScanner->cur; + switch (yych) { + case 'S': + case 's': goto yy320; + default: goto yy263; + } +yy313: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy321; + default: goto yy263; + } +yy314: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy322; + default: goto yy263; + } +yy315: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy324; + default: goto yy263; + } +yy316: + yych = *++pScanner->cur; + switch (yych) { + case 'S': + case 's': goto yy309; + default: goto yy263; + } +yy317: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case ';': goto yy325; + default: goto yy263; + } +yy318: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy327; + default: goto yy263; + } +yy319: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy329; + default: goto yy263; + } +yy320: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy330; + default: goto yy263; + } +yy321: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy331; + default: goto yy263; + } +yy322: + ++pScanner->cur; + pScanner->cur -= 1; +#line 230 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = false; + pScanner->in_rules_clause = true; + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_WHERE; + } +#line 3901 "expscan.c" +yy324: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy333; + default: goto yy263; + } +yy325: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 249 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + if (pScanner->scope_aux) { + scope_push(pState, pScanner->scope_aux, pScanner); + pScanner->scope_aux = 0; + } + return T_SEMICOLON; + } +#line 3920 "expscan.c" +yy327: + ++pScanner->cur; + pScanner->cur -= 1; +#line 206 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = false; + pScanner->in_rules_clause = false; + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycID_LIST, pScanner); + return T_DERIVE; + } +#line 3933 "expscan.c" +yy329: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy334; + default: goto yy263; + } +yy330: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy335; + default: goto yy263; + } +yy331: + ++pScanner->cur; + pScanner->cur -= 1; +#line 222 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = false; + pScanner->in_rules_clause = true; + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_UNIQUE; + } +#line 3962 "expscan.c" +yy333: + yych = *++pScanner->cur; + switch (yych) { + case 'I': + case 'i': goto yy337; + default: goto yy263; + } +yy334: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy338; + default: goto yy263; + } +yy335: + ++pScanner->cur; + pScanner->cur -= 1; +#line 214 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->in_explicit_attr = false; + pScanner->in_inverse_clause = true; + pScanner->in_rules_clause = false; + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycID_LIST, pScanner); + return T_INVERSE; + } +#line 3989 "expscan.c" +yy337: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy339; + default: goto yy263; + } +yy338: + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy340; + default: goto yy263; + } +yy339: + yych = *++pScanner->cur; + switch (yych) { + case 'Y': + case 'y': goto yy317; + default: goto yy263; + } +yy340: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case ';': goto yy341; + default: goto yy263; + } +yy341: + ++pScanner->cur; + pScanner->cur -= 1; +#line 268 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + scope_pop(pState, pScanner); + yy_pop_state(pScanner); + return T_END_ENTITY; + } +#line 4030 "expscan.c" +/****************** ARG_LIST *****************/ +yyc_ARG_LIST: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy346; + case '\n': goto yy349; + case '(': + case ';': goto yy351; + case ')': goto yy353; + case 'V': + case 'v': goto yy355; + default: goto yy345; + } +yy345: + (void)(yycP3); + goto yyc_P3; +yy346: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy346; + default: goto yy348; + } +yy348: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 4060 "expscan.c" +yy349: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 4065 "expscan.c" +yy351: + ++pScanner->cur; +#line 275 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + /* TODO: bracket_count */ + pScanner->id_ref_typ = T_PARAMETER_REF; + yy_push_state(yycID_LIST, pScanner); + return ( *pScanner->tok == '(' ) ? T_LPAREN : T_SEMICOLON; + } +#line 4075 "expscan.c" +yy353: + ++pScanner->cur; +#line 281 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + /* TODO: bracket_count */ + yy_pop_state(pScanner); + return T_RPAREN; + } +#line 4084 "expscan.c" +yy355: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy357; + default: goto yy356; + } +yy356: + pScanner->cur = pScanner->mrk; + goto yy345; +yy357: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy358; + default: goto yy356; + } +yy358: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy359; + default: goto yy356; + } +yy359: + ++pScanner->cur; + pScanner->cur -= 1; +#line 286 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->id_ref_typ = T_PARAMETER_REF; + yy_push_state(yycID_LIST, pScanner); + return T_VAR; + } +#line 4120 "expscan.c" +/****************** RULE *****************/ +yyc_RULE: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy364; + case '\n': goto yy367; + case ';': goto yy369; + case 'E': + case 'e': goto yy371; + case 'W': + case 'w': goto yy373; + default: goto yy363; + } +yy363: +#line 317 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_push_state(yycSTMT, pScanner); continue; } +#line 4139 "expscan.c" +yy364: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy364; + default: goto yy366; + } +yy366: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 4151 "expscan.c" +yy367: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 4156 "expscan.c" +yy369: + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy374; + case 'E': + case 'e': + yyt1 = pScanner->cur; + goto yy376; + case 'W': + case 'w': + yyt1 = pScanner->cur; + goto yy377; + default: goto yy370; + } +yy370: +#line 299 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + if (!pScanner->in_rules_clause) { + /* TODO: is this branch ever followed? */ + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycSTMT, pScanner); + } else { + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + } + return T_SEMICOLON; + } +#line 4190 "expscan.c" +yy371: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy378; + default: goto yy372; + } +yy372: + pScanner->cur = pScanner->mrk; + if (yyaccept == 0) { + goto yy363; + } else { + goto yy370; + } +yy373: + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy379; + default: goto yy372; + } +yy374: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy374; + case 'E': + case 'e': goto yy376; + case 'W': + case 'w': goto yy377; + default: goto yy372; + } +yy376: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy380; + default: goto yy372; + } +yy377: + yych = *++pScanner->cur; + switch (yych) { + case 'H': + case 'h': goto yy381; + default: goto yy372; + } +yy378: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy382; + default: goto yy372; + } +yy379: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy383; + default: goto yy372; + } +yy380: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy384; + default: goto yy372; + } +yy381: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy385; + default: goto yy372; + } +yy382: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy386; + default: goto yy372; + } +yy383: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy387; + default: goto yy372; + } +yy384: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy388; + default: goto yy372; + } +yy385: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy389; + default: goto yy372; + } +yy386: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy390; + default: goto yy372; + } +yy387: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy391; + default: goto yy372; + } +yy388: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy392; + default: goto yy372; + } +yy389: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy393; + default: goto yy372; + } +yy390: + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy394; + default: goto yy372; + } +yy391: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy395; + default: goto yy372; + } +yy392: + yych = *++pScanner->cur; + switch (yych) { + case 'U': + case 'u': goto yy397; + default: goto yy372; + } +yy393: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy398; + default: goto yy372; + } +yy394: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy400; + default: goto yy372; + } +yy395: + ++pScanner->cur; + pScanner->cur -= 1; +#line 293 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->in_rules_clause = true; + pScanner->id_ref_typ = T_RULE_LABEL_REF; + yy_push_state(yycLABEL_OPT, pScanner); + return T_WHERE; + } +#line 4370 "expscan.c" +yy397: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy401; + default: goto yy372; + } +yy398: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 310 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 4383 "expscan.c" +yy400: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy402; + default: goto yy372; + } +yy401: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy403; + default: goto yy372; + } +yy402: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case ';': goto yy405; + default: goto yy372; + } +yy403: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 311 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 4413 "expscan.c" +yy405: + ++pScanner->cur; + pScanner->cur -= 1; +#line 312 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->in_rules_clause = false; + scope_pop(pState, pScanner); + return T_END_RULE; + } +#line 4423 "expscan.c" +/****************** QUERY *****************/ +yyc_QUERY: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy410; + case '\n': goto yy413; + case '(': goto yy415; + case ')': goto yy417; + default: goto yy409; + } +yy409: + (void)(yycP3); + goto yyc_P3; +yy410: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy410; + default: goto yy412; + } +yy412: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 4450 "expscan.c" +yy413: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 4455 "expscan.c" +yy415: + ++pScanner->cur; +#line 328 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + brkt_nesting = pScanner->brkt_nesting->entry + pScanner->brkt_nesting->qty; + ++*brkt_nesting; + return T_LPAREN; + } +#line 4464 "expscan.c" +yy417: + ++pScanner->cur; +#line 319 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + brkt_nesting = pScanner->brkt_nesting->entry + pScanner->brkt_nesting->qty; + if (!--*brkt_nesting) { + brkt_pop(pScanner->brkt_nesting); + scope_pop(pState, pScanner); + yy_pop_state(pScanner); + } + return T_RPAREN; + } +#line 4477 "expscan.c" +/****************** REDECL *****************/ +yyc_REDECL: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy422; + case '\n': goto yy425; + case ',': + case ':': goto yy427; + case 'R': + case 'r': goto yy429; + default: goto yy421; + } +yy421: + (void)(yycP3); + goto yyc_P3; +yy422: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy422; + default: goto yy424; + } +yy424: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 4506 "expscan.c" +yy425: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 4511 "expscan.c" +yy427: + ++pScanner->cur; +#line 340 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { --pScanner->cur; yy_pop_state(pScanner); continue; } +#line 4516 "expscan.c" +yy429: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy431; + default: goto yy430; + } +yy430: + pScanner->cur = pScanner->mrk; + goto yy421; +yy431: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy432; + default: goto yy430; + } +yy432: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy433; + default: goto yy430; + } +yy433: + yych = *++pScanner->cur; + switch (yych) { + case 'M': + case 'm': goto yy434; + default: goto yy430; + } +yy434: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy435; + default: goto yy430; + } +yy435: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy436; + default: goto yy430; + } +yy436: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy437; + default: goto yy430; + } +yy437: + ++pScanner->cur; + pScanner->cur -= 1; +#line 335 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->id_ref_typ = T_SIMPLE_REF; + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_RENAMED; + } +#line 4580 "expscan.c" +/****************** STMT *****************/ +yyc_STMT: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy442; + case '\n': goto yy445; + case ';': goto yy447; + default: goto yy441; + } +yy441: + (void)(yycP3); + goto yyc_P3; +yy442: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy442; + default: goto yy444; + } +yy444: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 4606 "expscan.c" +yy445: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 4611 "expscan.c" +yy447: + ++pScanner->cur; +#line 343 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { --pScanner->cur; yy_pop_state(pScanner); continue; } +#line 4616 "expscan.c" +/****************** INV_FOR_STMT *****************/ +yyc_INV_FOR_STMT: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy452; + case '\n': goto yy455; + case ';': goto yy457; + case 'F': + case 'f': goto yy459; + default: goto yy451; + } +yy451: + (void)(yycP3); + goto yyc_P3; +yy452: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy452; + default: goto yy454; + } +yy454: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 4644 "expscan.c" +yy455: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 4649 "expscan.c" +yy457: + ++pScanner->cur; +#line 347 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { --pScanner->cur; yy_pop_state(pScanner); continue; } +#line 4654 "expscan.c" +yy459: + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy461; + default: goto yy460; + } +yy460: + pScanner->cur = pScanner->mrk; + goto yy451; +yy461: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy462; + default: goto yy460; + } +yy462: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy463; + default: goto yy460; + } +yy463: + ++pScanner->cur; + pScanner->cur -= 1; +#line 346 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_push_state(yycINV_FOR, pScanner); return T_FOR; } +#line 4686 "expscan.c" +/****************** P3 *****************/ +yyc_P3: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy469; + case '\n': goto yy472; + case '!': + case '#': + case '$': + case '&': + case '@': + case '^': + case '_': + case '`': goto yy474; + case '"': goto yy476; + case '%': goto yy478; + case '\'': goto yy479; + case '(': goto yy480; + case ')': goto yy482; + case '*': goto yy484; + case '+': goto yy486; + case ',': goto yy488; + case '-': goto yy490; + case '.': goto yy492; + case '/': goto yy494; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy496; + case ':': goto yy499; + case ';': goto yy501; + case '<': goto yy503; + case '=': goto yy505; + case '>': goto yy507; + case '?': goto yy509; + case 'A': + case 'a': goto yy511; + case 'B': + case 'D': + case 'H': + case 'I': + case 'J': + case 'K': + case 'M': + case 'N': + case 'O': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'b': + case 'd': + case 'h': + case 'i': + case 'j': + case 'k': + case 'm': + case 'n': + case 'o': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy513; + case 'C': + case 'c': goto yy515; + case 'E': + case 'e': goto yy516; + case 'F': + case 'f': goto yy517; + case 'G': + case 'g': goto yy518; + case 'L': + case 'l': goto yy519; + case 'P': + case 'p': goto yy520; + case 'Q': + case 'q': goto yy521; + case 'R': + case 'r': goto yy522; + case 'S': + case 's': goto yy523; + case 'T': + case 't': goto yy524; + case '[': goto yy525; + case '\\': goto yy527; + case ']': goto yy529; + case '{': goto yy531; + case '|': goto yy533; + case '}': goto yy535; + default: goto yy467; + } +yy467: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 4796 "expscan.c" +yy469: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy469; + default: goto yy471; + } +yy471: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 4808 "expscan.c" +yy472: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 4813 "expscan.c" +yy474: + ++pScanner->cur; +yy475: +#line 613 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_INVALID; } +#line 4819 "expscan.c" +yy476: + yyaccept = 0; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy537; + default: goto yy477; + } +yy477: +#line 359 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yyerror("invalid encoded string literal! '%.*s'", pScanner->lineno, 20, pScanner->cur); } +#line 4851 "expscan.c" +yy478: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': goto yy539; + default: goto yy475; + } +yy479: + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '\'': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy543; + default: goto yy475; + } +yy480: + ++pScanner->cur; +#line 591 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_LPAREN; } +#line 4967 "expscan.c" +yy482: + ++pScanner->cur; +#line 592 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_RPAREN; } +#line 4972 "expscan.c" +yy484: + yych = *++pScanner->cur; + switch (yych) { + case '*': goto yy546; + default: goto yy485; + } +yy485: +#line 580 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_TIMES; } +#line 4982 "expscan.c" +yy486: + ++pScanner->cur; +#line 578 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_PLUS; } +#line 4987 "expscan.c" +yy488: + ++pScanner->cur; +#line 598 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_COMMA; } +#line 4992 "expscan.c" +yy490: + ++pScanner->cur; +#line 579 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_MINUS; } +#line 4997 "expscan.c" +yy492: + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy548; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy550; + default: goto yy493; + } +yy493: +#line 603 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_DOT; } +#line 5067 "expscan.c" +yy494: + ++pScanner->cur; +#line 581 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_RDIV; } +#line 5072 "expscan.c" +yy496: + yych = *++pScanner->cur; + switch (yych) { + case '.': goto yy553; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy496; + default: goto yy498; + } +yy498: +#line 352 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_INTEGER_LITERAL; } +#line 5092 "expscan.c" +yy499: + yyaccept = 3; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '<': goto yy556; + case '=': goto yy557; + default: goto yy500; + } +yy500: +#line 599 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_COLON; } +#line 5104 "expscan.c" +yy501: + ++pScanner->cur; +#line 600 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 5109 "expscan.c" +yy503: + yych = *++pScanner->cur; + switch (yych) { + case '*': goto yy559; + case '=': goto yy561; + case '>': goto yy563; + default: goto yy504; + } +yy504: +#line 587 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_LT; } +#line 5121 "expscan.c" +yy505: + ++pScanner->cur; +#line 584 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_EQ; } +#line 5126 "expscan.c" +yy507: + yych = *++pScanner->cur; + switch (yych) { + case '=': goto yy565; + default: goto yy508; + } +yy508: +#line 586 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_GT; } +#line 5136 "expscan.c" +yy509: + ++pScanner->cur; +#line 611 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_QMARK; } +#line 5141 "expscan.c" +yy511: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'G': + case 'g': goto yy571; + case 'L': + case 'l': goto yy572; + default: goto yy514; + } +yy512: +#line 563 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + int i; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + for (i=0; reserved_keywords[i].kw != NULL; i++) { + if (!strcasecmp(ibuffer, reserved_keywords[i].kw)) { + return reserved_keywords[i].token; + } + } + + tok = resolve_symbol(pState, ibuffer, pScanner); + plval->cstr = strdup(ibuffer); + return tok; + } +#line 5167 "expscan.c" +yy513: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); +yy514: + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy567; + case '.': + yyt2 = pScanner->cur; + goto yy569; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy513; + default: goto yy512; + } +yy515: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy573; + default: goto yy514; + } +yy516: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy574; + default: goto yy514; + } +yy517: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'U': + case 'u': goto yy575; + default: goto yy514; + } +yy518: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy576; + default: goto yy514; + } +yy519: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy577; + default: goto yy514; + } +yy520: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy578; + default: goto yy514; + } +yy521: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'U': + case 'u': goto yy579; + default: goto yy514; + } +yy522: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy580; + case 'U': + case 'u': goto yy581; + default: goto yy514; + } +yy523: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy582; + case 'U': + case 'u': goto yy583; + default: goto yy514; + } +yy524: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'Y': + case 'y': goto yy584; + default: goto yy514; + } +yy525: + ++pScanner->cur; +#line 595 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_LBRKT; } +#line 5335 "expscan.c" +yy527: + yyaccept = 5; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy585; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy587; + default: goto yy528; + } +yy528: +#line 602 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_BACKSLASH; } +#line 5405 "expscan.c" +yy529: + ++pScanner->cur; +#line 596 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_RBRKT; } +#line 5410 "expscan.c" +yy531: + ++pScanner->cur; +#line 593 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_LCURL; } +#line 5415 "expscan.c" +yy533: + yych = *++pScanner->cur; + switch (yych) { + case '|': goto yy590; + default: goto yy534; + } +yy534: +#line 605 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_PIPE; } +#line 5425 "expscan.c" +yy535: + ++pScanner->cur; +#line 594 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_RCURL; } +#line 5430 "expscan.c" +yy537: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy592; + default: goto yy538; + } +yy538: + pScanner->cur = pScanner->mrk; + switch (yyaccept) { + case 0: goto yy477; + case 1: goto yy475; + case 2: goto yy493; + case 3: goto yy500; + case 4: goto yy512; + case 5: goto yy528; + case 6: goto yy545; + case 7: goto yy555; + case 8: goto yy657; + case 9: goto yy661; + case 10: goto yy666; + case 11: goto yy678; + case 12: goto yy696; + case 13: goto yy701; + case 14: goto yy703; + case 15: goto yy726; + case 16: goto yy734; + case 17: goto yy749; + case 18: goto yy766; + case 19: goto yy777; + case 20: goto yy780; + case 21: goto yy803; + case 22: goto yy810; + case 23: goto yy830; + default: goto yy835; + } +yy539: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': goto yy539; + default: goto yy541; + } +yy541: +#line 350 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_BINARY_LITERAL; } +#line 5497 "expscan.c" +yy542: + yych = *++pScanner->cur; +yy543: + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '!': + case '"': + case '#': + case '$': + case '%': + case '&': + case '(': + case ')': + case '*': + case '+': + case ',': + case '-': + case '.': + case '/': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case ';': + case '<': + case '=': + case '>': + case '?': + case '@': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '[': + case '\\': + case ']': + case '^': + case '_': + case '`': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + case '{': + case '|': + case '}': + case '~': goto yy542; + case '\'': goto yy544; + default: goto yy538; + } +yy544: + yyaccept = 6; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\'': goto yy542; + default: goto yy545; + } +yy545: +#line 356 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_STRING_LITERAL; } +#line 5612 "expscan.c" +yy546: + ++pScanner->cur; +#line 582 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_EXP; } +#line 5617 "expscan.c" +yy548: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy548; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy550; + default: goto yy538; + } +yy550: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy550; + default: goto yy552; + } +yy552: + pScanner->cur = yyt1; +#line 558 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_push_state(yycDOT_ATTR, pScanner); + return T_DOT; + } +#line 5754 "expscan.c" +yy553: + yyaccept = 7; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy553; + case 'E': + case 'e': goto yy593; + default: goto yy555; + } +yy555: +#line 354 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_REAL_LITERAL; } +#line 5776 "expscan.c" +yy556: + yych = *++pScanner->cur; + switch (yych) { + case '>': goto yy594; + default: goto yy538; + } +yy557: + yych = *++pScanner->cur; + switch (yych) { + case ':': goto yy595; + default: goto yy558; + } +yy558: +#line 606 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_ASSIGN; } +#line 5792 "expscan.c" +yy559: + ++pScanner->cur; +#line 604 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_ALL_IN; } +#line 5797 "expscan.c" +yy561: + ++pScanner->cur; +#line 589 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_LTEQ; } +#line 5802 "expscan.c" +yy563: + ++pScanner->cur; +#line 585 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_NEQ; } +#line 5807 "expscan.c" +yy565: + ++pScanner->cur; +#line 588 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_GTEQ; } +#line 5812 "expscan.c" +yy567: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy538; + } +yy569: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy569; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy597; + default: goto yy538; + } +yy571: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'G': + case 'g': goto yy598; + default: goto yy514; + } +yy572: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy599; + default: goto yy514; + } +yy573: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy600; + default: goto yy514; + } +yy574: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'D': + case 'd': goto yy601; + case 'T': + case 't': goto yy602; + default: goto yy514; + } +yy575: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy603; + default: goto yy514; + } +yy576: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy604; + default: goto yy514; + } +yy577: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy605; + default: goto yy514; + } +yy578: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy606; + default: goto yy514; + } +yy579: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy607; + default: goto yy514; + } +yy580: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'P': + case 'p': goto yy608; + default: goto yy514; + } +yy581: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'L': + case 'l': goto yy609; + default: goto yy514; + } +yy582: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'H': + case 'h': goto yy610; + default: goto yy514; + } +yy583: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'B': + case 'b': goto yy611; + default: goto yy514; + } +yy584: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'P': + case 'p': goto yy612; + default: goto yy514; + } +yy585: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy585; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy587; + default: goto yy538; + } +yy587: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy587; + default: goto yy589; + } +yy589: + pScanner->cur = yyt1; +#line 537 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_push_state(yycENTITY_REF, pScanner); + return T_BACKSLASH; + } +#line 6134 "expscan.c" +yy590: + ++pScanner->cur; +#line 607 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_CONCAT; } +#line 6139 "expscan.c" +yy592: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy613; + default: goto yy538; + } +yy593: + yych = *++pScanner->cur; + switch (yych) { + case '+': + case '-': goto yy614; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy615; + default: goto yy538; + } +yy594: + yych = *++pScanner->cur; + switch (yych) { + case ':': goto yy617; + default: goto yy538; + } +yy595: + ++pScanner->cur; +#line 608 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_INST_EQ; } +#line 6194 "expscan.c" +yy597: + yych = *++pScanner->cur; + switch (yych) { + case '.': goto yy538; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy623; + default: goto yy622; + } +yy598: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy625; + default: goto yy514; + } +yy599: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy626; + default: goto yy514; + } +yy600: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'S': + case 's': goto yy627; + default: goto yy514; + } +yy601: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '_': goto yy628; + default: goto yy514; + } +yy602: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy629; + default: goto yy514; + } +yy603: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy630; + default: goto yy514; + } +yy604: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy631; + default: goto yy514; + } +yy605: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy632; + default: goto yy514; + } +yy606: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy633; + default: goto yy514; + } +yy607: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy634; + default: goto yy514; + } +yy608: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy635; + default: goto yy514; + } +yy609: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy636; + default: goto yy514; + } +yy610: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy637; + default: goto yy514; + } +yy611: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy638; + default: goto yy514; + } +yy612: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy639; + default: goto yy514; + } +yy613: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy640; + default: goto yy538; + } +yy614: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy615; + default: goto yy538; + } +yy615: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': goto yy615; + default: goto yy555; + } +yy617: + ++pScanner->cur; +#line 609 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_INST_NEQ; } +#line 6444 "expscan.c" +yy619: + ++pScanner->cur; +yy620: + pScanner->cur = yyt2; +#line 528 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + tok = resolve_symbol(pState, ibuffer, pScanner); + if (tok == T_TYPE_REF) + yy_push_state(yycENUM_REF, pScanner); + return tok; + } +#line 6457 "expscan.c" +yy621: + yych = *++pScanner->cur; +yy622: + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy621; + case '.': goto yy620; + default: goto yy619; + } +yy623: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy621; + case '.': goto yy620; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy623; + default: goto yy619; + } +yy625: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy641; + default: goto yy514; + } +yy626: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'S': + case 's': goto yy642; + default: goto yy514; + } +yy627: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy643; + default: goto yy514; + } +yy628: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy644; + case 'F': + case 'f': goto yy645; + case 'P': + case 'p': goto yy646; + case 'R': + case 'r': goto yy647; + case 'S': + case 's': goto yy648; + default: goto yy514; + } +yy629: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy649; + default: goto yy514; + } +yy630: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy650; + default: goto yy514; + } +yy631: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy651; + default: goto yy514; + } +yy632: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'L': + case 'l': goto yy652; + default: goto yy514; + } +yy633: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy653; + default: goto yy514; + } +yy634: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'Y': + case 'y': goto yy654; + default: goto yy514; + } +yy635: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy655; + default: goto yy514; + } +yy636: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy656; + default: goto yy514; + } +yy637: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'M': + case 'm': goto yy658; + default: goto yy514; + } +yy638: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'Y': + case 'y': goto yy659; + default: goto yy514; + } +yy639: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy660; + default: goto yy514; + } +yy640: + yych = *++pScanner->cur; + switch (yych) { + case '"': goto yy662; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': goto yy537; + default: goto yy538; + } +yy641: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'G': + case 'g': goto yy664; + default: goto yy514; + } +yy642: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy665; + default: goto yy514; + } +yy643: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy667; + default: goto yy514; + } +yy644: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'L': + case 'l': goto yy668; + default: goto yy514; + } +yy645: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'U': + case 'u': goto yy669; + default: goto yy514; + } +yy646: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy670; + default: goto yy514; + } +yy647: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy671; + default: goto yy514; + } +yy648: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy672; + case 'U': + case 'u': goto yy673; + default: goto yy514; + } +yy649: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'Y': + case 'y': goto yy674; + default: goto yy514; + } +yy650: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy675; + default: goto yy514; + } +yy651: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy676; + default: goto yy514; + } +yy652: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy677; + default: goto yy514; + } +yy653: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'D': + case 'd': goto yy679; + default: goto yy514; + } +yy654: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = yyt2 = pScanner->cur; + goto yy680; + case '(': + yyt1 = pScanner->cur; + goto yy682; + default: goto yy514; + } +yy655: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy684; + default: goto yy514; + } +yy656: + yyaccept = 8; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy657; + } +yy657: + pScanner->cur -= 1; +#line 425 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_RULE_BITS; + yy_push_state(yycRULE, pScanner); + yy_push_state(yycSTMT, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_RULE; + } +#line 6864 "expscan.c" +yy658: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy685; + default: goto yy514; + } +yy659: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'P': + case 'p': goto yy686; + default: goto yy514; + } +yy660: + yyaccept = 9; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy661; + } +yy661: + pScanner->cur -= 1; +#line 371 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_TYPE_BITS; + yy_push_state(yycTYPE, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_TYPE; + } +#line 6901 "expscan.c" +yy662: + ++pScanner->cur; +#line 358 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_ENCODED_STRING_LITERAL; } +#line 6906 "expscan.c" +yy664: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy687; + default: goto yy514; + } +yy665: + yyaccept = 10; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy666; + } +yy666: + pScanner->cur -= 1; +#line 433 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + idx = scope_alloc(pState->scope_stack, "ALIAS", OBJ_ALIAS_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "QANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + pScanner->anon_scope_cnt++; + + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_ALIAS; + } +#line 6942 "expscan.c" +yy667: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy688; + default: goto yy514; + } +yy668: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy689; + default: goto yy514; + } +yy669: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy690; + default: goto yy514; + } +yy670: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy691; + default: goto yy514; + } +yy671: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'P': + case 'p': goto yy692; + default: goto yy514; + } +yy672: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'H': + case 'h': goto yy693; + default: goto yy514; + } +yy673: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'B': + case 'b': goto yy694; + default: goto yy514; + } +yy674: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy695; + default: goto yy514; + } +yy675: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy697; + default: goto yy514; + } +yy676: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy698; + default: goto yy514; + } +yy677: + yyaccept = 11; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy678; + } +yy678: + pScanner->cur -= 1; +#line 520 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycLOCAL, pScanner); + yy_push_state(yycID_LIST, pScanner); + return T_LOCAL; + } +#line 7047 "expscan.c" +yy679: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'U': + case 'u': goto yy699; + default: goto yy514; + } +yy680: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy680; + case '(': goto yy682; + case '.': goto yy569; + default: goto yy538; + } +yy682: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 494 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + /* TODO: clean up this mess! */ + idx = scope_alloc(pState->scope_stack, "QUERY", OBJ_QUERY_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "QRY_ANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + + brkt_push(pScanner->brkt_nesting); + brkt_nesting = pScanner->brkt_nesting->entry + pScanner->brkt_nesting->qty; + ++*brkt_nesting; + + pScanner->anon_scope_cnt++; + + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycQUERY, pScanner); + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_QUERY; + } +#line 7091 "expscan.c" +yy684: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = yyt2 = pScanner->cur; + goto yy700; + default: goto yy514; + } +yy685: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy702; + default: goto yy514; + } +yy686: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy704; + default: goto yy514; + } +yy687: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy705; + default: goto yy514; + } +yy688: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy706; + default: goto yy514; + } +yy689: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy707; + default: goto yy514; + } +yy690: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy708; + default: goto yy514; + } +yy691: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy709; + default: goto yy514; + } +yy692: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy710; + default: goto yy514; + } +yy693: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy711; + default: goto yy514; + } +yy694: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy712; + default: goto yy514; + } +yy695: + yyaccept = 12; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy696; + } +yy696: + pScanner->cur -= 1; +#line 378 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_ENTITY_BITS; + pScanner->id_ref_typ = T_SIMPLE_REF; + pScanner->in_inverse_clause = false; + pScanner->in_explicit_attr = true; + pScanner->in_rules_clause = false; + pScanner->scope_aux = 0; + + yy_push_state(yycENTITY, pScanner); + yy_push_state(yycSTMT, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + + return T_ENTITY; + } +#line 7216 "expscan.c" +yy697: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy713; + default: goto yy514; + } +yy698: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = yyt2 = pScanner->cur; + goto yy714; + case ':': + yyt1 = pScanner->cur; + goto yy716; + case '_': goto yy717; + default: goto yy514; + } +yy699: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy718; + default: goto yy514; + } +yy700: + yyaccept = 13; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy719; + case '.': goto yy569; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy721; + default: goto yy701; + } +yy701: + pScanner->cur -= 1; +#line 479 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + idx = scope_alloc(pState->scope_stack, "REPEAT", OBJ_REPEAT_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "REP_ANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + pScanner->anon_scope_cnt++; + return T_REPEAT; + } +#line 7325 "expscan.c" +yy702: + yyaccept = 14; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy703; + } +yy703: + pScanner->cur -= 1; +#line 361 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_SCHEMA_BITS; + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_SCHEMA; + } +#line 7345 "expscan.c" +yy704: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '_': goto yy723; + default: goto yy514; + } +yy705: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy724; + default: goto yy514; + } +yy706: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy725; + default: goto yy514; + } +yy707: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'S': + case 's': goto yy727; + default: goto yy514; + } +yy708: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy728; + default: goto yy514; + } +yy709: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy729; + default: goto yy514; + } +yy710: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy730; + default: goto yy514; + } +yy711: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'M': + case 'm': goto yy731; + default: goto yy514; + } +yy712: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'Y': + case 'y': goto yy732; + default: goto yy514; + } +yy713: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = yyt2 = pScanner->cur; + goto yy733; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy735; + default: goto yy514; + } +yy714: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy714; + case '.': goto yy569; + case ':': goto yy716; + default: goto yy538; + } +yy716: + yych = *++pScanner->cur; + switch (yych) { + case '<': + case '=': goto yy538; + default: goto yy737; + } +yy717: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy739; + default: goto yy514; + } +yy718: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy740; + default: goto yy514; + } +yy719: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy719; + case '.': goto yy569; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy721; + default: goto yy538; + } +yy721: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy741; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy721; + case ':': goto yy743; + default: goto yy538; + } +yy723: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy744; + default: goto yy514; + } +yy724: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = yyt2 = pScanner->cur; + goto yy745; + case ':': + yyt1 = pScanner->cur; + goto yy747; + default: goto yy514; + } +yy725: + yyaccept = 15; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy726; + } +yy726: + pScanner->cur -= 1; +#line 515 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_push_state(yycCONSTANT, pScanner); + return T_CONSTANT; + } +#line 7697 "expscan.c" +yy727: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy748; + case ';': goto yy750; + default: goto yy514; + } +yy728: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy751; + default: goto yy514; + } +yy729: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'D': + case 'd': goto yy752; + default: goto yy514; + } +yy730: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy753; + default: goto yy514; + } +yy731: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy754; + default: goto yy514; + } +yy732: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'P': + case 'p': goto yy755; + default: goto yy514; + } +yy733: + yyaccept = 16; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy756; + case '.': goto yy569; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy758; + default: goto yy734; + } +yy734: + pScanner->cur -= 1; +#line 399 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_FUNCTION_BITS; + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_FUNCTION; + } +#line 7822 "expscan.c" +yy735: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy760; + case '(': goto yy762; + case '.': + yyt2 = pScanner->cur; + goto yy569; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy735; + default: goto yy512; + } +yy737: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 553 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_GENERIC; + } +#line 7910 "expscan.c" +yy739: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy764; + default: goto yy514; + } +yy740: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = yyt2 = pScanner->cur; + goto yy765; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': + yyt1 = pScanner->cur; + goto yy767; + default: goto yy514; + } +yy741: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy741; + case ':': goto yy743; + default: goto yy538; + } +yy743: + yych = *++pScanner->cur; + switch (yych) { + case '=': goto yy769; + default: goto yy538; + } +yy744: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy771; + default: goto yy514; + } +yy745: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy745; + case '.': goto yy569; + case ':': goto yy747; + default: goto yy538; + } +yy747: + yych = *++pScanner->cur; + switch (yych) { + case '<': + case '=': goto yy538; + default: goto yy772; + } +yy748: + yyaccept = 17; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy749; + } +yy749: + pScanner->cur -= 1; +#line 446 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + scope_pop(pState, pScanner); + return T_END_ALIAS; + } +#line 8045 "expscan.c" +yy750: + ++pScanner->cur; + goto yy749; +yy751: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy774; + default: goto yy514; + } +yy752: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'U': + case 'u': goto yy775; + default: goto yy514; + } +yy753: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy776; + case ';': goto yy778; + default: goto yy514; + } +yy754: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy779; + case ';': goto yy781; + default: goto yy514; + } +yy755: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy782; + default: goto yy514; + } +yy756: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy756; + case '.': goto yy569; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy758; + default: goto yy538; + } +yy758: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy783; + case '(': goto yy762; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy758; + default: goto yy538; + } +yy760: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy760; + case '(': goto yy762; + case '.': goto yy569; + default: goto yy538; + } +yy762: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 393 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_FUNCTION_BITS; + yy_push_state(yycARG_LIST, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_FUNCTION; + } +#line 8255 "expscan.c" +yy764: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy785; + default: goto yy514; + } +yy765: + yyaccept = 18; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy786; + case '.': goto yy569; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy788; + default: goto yy766; + } +yy766: + pScanner->cur -= 1; +#line 415 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_PROCEDURE_BITS; + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_PROCEDURE; + } +#line 8335 "expscan.c" +yy767: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy790; + case '(': goto yy792; + case '.': + yyt2 = pScanner->cur; + goto yy569; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy767; + default: goto yy512; + } +yy769: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 466 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + idx = scope_alloc(pState->scope_stack, "REPEAT", OBJ_REPEAT_BITS); + scope = pState->scope_stack->entry + idx; + + ibufchk = snprintf(ibuffer, sizeof(ibuffer), "REP_ANON_%08lX", pScanner->anon_scope_cnt); + scope->symbol.name = strdup(ibuffer); + scope_push(pState, idx, pScanner); + pScanner->anon_scope_cnt++; + + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_REPEAT; + } +#line 8432 "expscan.c" +yy771: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy794; + default: goto yy514; + } +yy772: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 548 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_AGGREGATE; + } +#line 8449 "expscan.c" +yy774: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy795; + default: goto yy514; + } +yy775: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy796; + default: goto yy514; + } +yy776: + yyaccept = 19; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy777; + } +yy777: + pScanner->cur -= 1; +#line 489 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + scope_pop(pState, pScanner); + return T_END_REPEAT; + } +#line 8484 "expscan.c" +yy778: + ++pScanner->cur; + goto yy777; +yy779: + yyaccept = 20; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy780; + } +yy780: + pScanner->cur -= 1; +#line 366 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + scope_pop(pState, pScanner); + return T_END_SCHEMA; + } +#line 8506 "expscan.c" +yy781: + ++pScanner->cur; + goto yy780; +yy782: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '_': goto yy797; + default: goto yy514; + } +yy783: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy783; + case '(': goto yy762; + default: goto yy538; + } +yy785: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy798; + default: goto yy514; + } +yy786: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy786; + case '.': goto yy569; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy788; + default: goto yy538; + } +yy788: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy799; + case '(': goto yy792; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy788; + default: goto yy538; + } +yy790: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy790; + case '(': goto yy792; + case '.': goto yy569; + default: goto yy538; + } +yy792: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 409 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->scope_typ = OBJ_PROCEDURE_BITS; + yy_push_state(yycARG_LIST, pScanner); + yy_push_state(yycSEARCH_SCOPE, pScanner); + return T_PROCEDURE; + } +#line 8691 "expscan.c" +yy794: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'S': + case 's': goto yy801; + default: goto yy514; + } +yy795: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy802; + case ';': goto yy804; + default: goto yy514; + } +yy796: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'E': + case 'e': goto yy805; + default: goto yy514; + } +yy797: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'C': + case 'c': goto yy806; + default: goto yy514; + } +yy798: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy807; + default: goto yy514; + } +yy799: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy799; + case '(': goto yy792; + default: goto yy538; + } +yy801: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy808; + default: goto yy514; + } +yy802: + yyaccept = 21; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy803; + } +yy803: + pScanner->cur -= 1; +#line 404 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + scope_pop(pState, pScanner); + return T_END_FUNCTION; + } +#line 8773 "expscan.c" +yy804: + ++pScanner->cur; + goto yy803; +yy805: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy809; + case ';': goto yy811; + default: goto yy514; + } +yy806: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'O': + case 'o': goto yy812; + default: goto yy514; + } +yy807: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'Y': + case 'y': goto yy813; + default: goto yy514; + } +yy808: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy814; + default: goto yy514; + } +yy809: + yyaccept = 22; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy810; + } +yy810: + pScanner->cur -= 1; +#line 420 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + scope_pop(pState, pScanner); + return T_END_PROCEDURE; + } +#line 8832 "expscan.c" +yy811: + ++pScanner->cur; + goto yy810; +yy812: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy815; + default: goto yy514; + } +yy813: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = yyt2 = pScanner->cur; + goto yy816; + case ':': + yyt1 = pScanner->cur; + goto yy818; + default: goto yy514; + } +yy814: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy819; + default: goto yy514; + } +yy815: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'S': + case 's': goto yy820; + default: goto yy514; + } +yy816: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy816; + case '.': goto yy569; + case ':': goto yy818; + default: goto yy538; + } +yy818: + yych = *++pScanner->cur; + switch (yych) { + case '<': + case '=': goto yy538; + default: goto yy821; + } +yy819: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy823; + default: goto yy514; + } +yy820: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy824; + default: goto yy514; + } +yy821: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 543 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_GENERIC_ENTITY; + } +#line 8917 "expscan.c" +yy823: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy825; + default: goto yy514; + } +yy824: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'R': + case 'r': goto yy826; + default: goto yy514; + } +yy825: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy827; + default: goto yy514; + } +yy826: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'A': + case 'a': goto yy828; + default: goto yy514; + } +yy827: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy829; + default: goto yy514; + } +yy828: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'I': + case 'i': goto yy831; + default: goto yy514; + } +yy829: + yyaccept = 23; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy830; + } +yy830: + pScanner->cur -= 1; +#line 451 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + /* _ref not supported, as only used in remarks */ + pScanner->id_ref_typ = T_INVALID; + + yy_push_state(yycSUBTYPE_CONS, pScanner); + yy_push_state(yycID_CUR_SCOPE, pScanner); + return T_SUBTYPE_CONSTRAINT; + } +#line 8992 "expscan.c" +yy831: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy832; + default: goto yy514; + } +yy832: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'T': + case 't': goto yy833; + default: goto yy514; + } +yy833: + yyaccept = 4; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt2 = pScanner->cur; + goto yy834; + case ';': goto yy836; + default: goto yy514; + } +yy834: + yyaccept = 24; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy567; + case '.': goto yy569; + default: goto yy835; + } +yy835: + pScanner->cur -= 1; +#line 460 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + /* TODO: not clear, rework? - the Entity scope is pushed in */ + scope_pop(pState, pScanner); + return T_END_SUBTYPE_CONSTRAINT; + } +#line 9041 "expscan.c" +yy836: + ++pScanner->cur; + goto yy835; +/****************** SEARCH_SCOPE *****************/ +yyc_SEARCH_SCOPE: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy841; + case '\n': goto yy844; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy846; + default: goto yy839; + } +yy839: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 9113 "expscan.c" +yy841: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy841; + default: goto yy843; + } +yy843: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 9125 "expscan.c" +yy844: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 9130 "expscan.c" +yy846: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy846; + default: goto yy848; + } +yy848: +#line 618 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + idx = scope_find(pState, pScanner->scope_typ, ibuffer, pScanner); + scope_push(pState, idx, pScanner); + yy_pop_state(pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } +#line 9209 "expscan.c" +/****************** ID_CUR_SCOPE *****************/ +yyc_ID_CUR_SCOPE: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy853; + case '\n': goto yy856; + case '(': + case ':': goto yy858; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy860; + default: goto yy851; + } +yy851: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 9280 "expscan.c" +yy853: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy853; + default: goto yy855; + } +yy855: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 9292 "expscan.c" +yy856: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 9297 "expscan.c" +yy858: + ++pScanner->cur; +#line 635 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return ( *pScanner->tok == '(' ) ? T_LPAREN : T_COLON; } +#line 9302 "expscan.c" +yy860: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy860; + default: goto yy862; + } +yy862: +#line 627 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, pScanner->id_ref_typ, pScanner); + yy_pop_state(pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } +#line 9381 "expscan.c" +/****************** ID_LIST *****************/ +yyc_ID_LIST: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy866; + case '\n': goto yy869; + case ',': goto yy871; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy873; + case 'S': + case 's': goto yy876; + default: goto yy865; + } +yy865: +#line 646 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_pop_state(pScanner); continue; } +#line 9448 "expscan.c" +yy866: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy866; + default: goto yy868; + } +yy868: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 9460 "expscan.c" +yy869: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 9465 "expscan.c" +yy871: + ++pScanner->cur; +#line 645 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_COMMA; } +#line 9470 "expscan.c" +yy873: + yych = *++pScanner->cur; +yy874: + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy877; + case ')': + case ',': + case ':': + yyt1 = pScanner->cur; + goto yy879; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy873; + default: goto yy875; + } +yy875: + pScanner->cur = pScanner->mrk; + goto yy865; +yy876: + yych = *++pScanner->cur; + switch (yych) { + case 'E': + case 'e': goto yy881; + default: goto yy874; + } +yy877: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy877; + case ')': + case ',': + case ':': goto yy879; + default: goto yy875; + } +yy879: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 637 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, pScanner->id_ref_typ, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } +#line 9584 "expscan.c" +yy881: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy882; + default: goto yy874; + } +yy882: + yych = *++pScanner->cur; + switch (yych) { + case 'F': + case 'f': goto yy883; + default: goto yy874; + } +yy883: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy884; + case '\\': + yyt1 = pScanner->cur; + goto yy886; + default: goto yy874; + } +yy884: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy884; + case ')': + case ',': + case ':': goto yy879; + case '\\': goto yy886; + default: goto yy875; + } +yy886: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 644 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_push_state(yycREDECL, pScanner); return T_SELF; } +#line 9631 "expscan.c" +/****************** ENUM_ID_LIST *****************/ +yyc_ENUM_ID_LIST: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy892; + case '\n': goto yy895; + case ')': goto yy897; + case ',': goto yy899; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy901; + default: goto yy890; + } +yy890: + ++pScanner->cur; +yy891: +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 9703 "expscan.c" +yy892: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy892; + default: goto yy894; + } +yy894: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 9715 "expscan.c" +yy895: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 9720 "expscan.c" +yy897: + ++pScanner->cur; +#line 657 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { --pScanner->cur; yy_pop_state(pScanner); continue; } +#line 9725 "expscan.c" +yy899: + ++pScanner->cur; +#line 656 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_COMMA; } +#line 9730 "expscan.c" +yy901: + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy902; + case ')': + case ',': + yyt1 = pScanner->cur; + goto yy905; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy907; + default: goto yy891; + } +yy902: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy902; + case ')': + case ',': goto yy905; + default: goto yy904; + } +yy904: + pScanner->cur = pScanner->mrk; + goto yy891; +yy905: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 648 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, T_ENUMERATION_REF, pScanner); + add_symbol(pState->scope_stack->entry + sp->parent, ibuffer, T_ENUMERATION_REF, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } +#line 9835 "expscan.c" +yy907: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy902; + case ')': + case ',': + yyt1 = pScanner->cur; + goto yy905; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy907; + default: goto yy904; + } +/****************** LABEL_OPT *****************/ +yyc_LABEL_OPT: + yych = *(pScanner->mrk = pScanner->cur); + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy912; + case '\n': goto yy915; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy917; + default: goto yy911; + } +yy911: +#line 666 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_exch_state(yycSTMT, pScanner); continue; } +#line 9979 "expscan.c" +yy912: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy912; + default: goto yy914; + } +yy914: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 9991 "expscan.c" +yy915: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 9996 "expscan.c" +yy917: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy920; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy917; + case ':': + yyt1 = pScanner->cur; + goto yy922; + default: goto yy919; + } +yy919: + pScanner->cur = pScanner->mrk; + goto yy911; +yy920: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy920; + case ':': goto yy922; + default: goto yy919; + } +yy922: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 659 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, pScanner->id_ref_typ, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } +#line 10098 "expscan.c" +/****************** ENUM_REF *****************/ +yyc_ENUM_REF: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy928; + case '\n': goto yy931; + case '.': goto yy933; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy935; + default: goto yy926; + } +yy926: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 10168 "expscan.c" +yy928: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy928; + default: goto yy930; + } +yy930: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 10180 "expscan.c" +yy931: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 10185 "expscan.c" +yy933: + ++pScanner->cur; +#line 668 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_DOT; } +#line 10190 "expscan.c" +yy935: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy935; + default: goto yy937; + } +yy937: +#line 669 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_pop_state(pScanner); + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_ENUMERATION_REF; + } +#line 10267 "expscan.c" +/****************** ENTITY_REF *****************/ +yyc_ENTITY_REF: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy942; + case '\n': goto yy945; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy947; + default: goto yy940; + } +yy940: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 10336 "expscan.c" +yy942: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy942; + default: goto yy944; + } +yy944: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 10348 "expscan.c" +yy945: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 10353 "expscan.c" +yy947: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy947; + default: goto yy949; + } +yy949: +#line 676 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_pop_state(pScanner); + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_ENTITY_REF; + } +#line 10430 "expscan.c" +/****************** DOT_ATTR *****************/ +yyc_DOT_ATTR: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy954; + case '\n': goto yy957; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy959; + default: goto yy952; + } +yy952: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 10499 "expscan.c" +yy954: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy954; + default: goto yy956; + } +yy956: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 10511 "expscan.c" +yy957: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 10516 "expscan.c" +yy959: + yych = *++pScanner->cur; + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy959; + default: goto yy961; + } +yy961: +#line 683 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_pop_state(pScanner); + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_REF; + } +#line 10593 "expscan.c" +/****************** CONSTANT *****************/ +yyc_CONSTANT: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy966; + case '\n': goto yy969; + case ':': goto yy971; + case ';': goto yy973; + case 'A': + case 'B': + case 'C': + case 'D': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy975; + case 'E': + case 'e': goto yy976; + default: goto yy964; + } +yy964: + ++pScanner->cur; +yy965: +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 10665 "expscan.c" +yy966: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy966; + default: goto yy968; + } +yy968: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 10677 "expscan.c" +yy969: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 10682 "expscan.c" +yy971: + ++pScanner->cur; +#line 690 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_push_state(yycSTMT, pScanner); return T_COLON; } +#line 10687 "expscan.c" +yy973: + yyaccept = 0; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy977; + case 'E': + case 'e': + yyt1 = pScanner->cur; + goto yy980; + default: goto yy974; + } +yy974: +#line 691 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 10707 "expscan.c" +yy975: + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy984; + default: goto yy965; + } +yy976: + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case ':': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy984; + case 'N': + case 'n': goto yy987; + default: goto yy965; + } +yy977: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy977; + case 'E': + case 'e': goto yy980; + default: goto yy979; + } +yy979: + pScanner->cur = pScanner->mrk; + switch (yyaccept) { + case 0: goto yy974; + case 1: goto yy965; + default: goto yy1011; + } +yy980: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy988; + default: goto yy979; + } +yy981: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy981; + case ':': goto yy985; + default: goto yy979; + } +yy983: + yych = *++pScanner->cur; +yy984: + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy981; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy983; + case ':': + yyt1 = pScanner->cur; + goto yy985; + default: goto yy979; + } +yy985: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 697 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + struct scope_def *sp = pState->scope_stack->entry + pScanner->scope_top; + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + add_symbol(sp, ibuffer, T_CONSTANT_REF, pScanner); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_ID; + } +#line 10980 "expscan.c" +yy987: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy989; + default: goto yy984; + } +yy988: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy990; + default: goto yy979; + } +yy989: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy991; + default: goto yy984; + } +yy990: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy992; + default: goto yy979; + } +yy991: + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy993; + default: goto yy984; + } +yy992: + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy994; + default: goto yy979; + } +yy993: + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy995; + default: goto yy984; + } +yy994: + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy996; + default: goto yy979; + } +yy995: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy997; + default: goto yy984; + } +yy996: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy998; + default: goto yy979; + } +yy997: + yych = *++pScanner->cur; + switch (yych) { + case 'S': + case 's': goto yy999; + default: goto yy984; + } +yy998: + yych = *++pScanner->cur; + switch (yych) { + case 'S': + case 's': goto yy1000; + default: goto yy979; + } +yy999: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy1001; + default: goto yy984; + } +yy1000: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy1002; + default: goto yy979; + } +yy1001: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy1003; + default: goto yy984; + } +yy1002: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy1004; + default: goto yy979; + } +yy1003: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy1005; + default: goto yy984; + } +yy1004: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy1006; + default: goto yy979; + } +yy1005: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy1007; + default: goto yy984; + } +yy1006: + yych = *++pScanner->cur; + switch (yych) { + case 'T': + case 't': goto yy1008; + default: goto yy979; + } +yy1007: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy1010; + case ';': goto yy1012; + default: goto yy984; + } +yy1008: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 692 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 11136 "expscan.c" +yy1010: + yyaccept = 2; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy981; + case ':': goto yy985; + default: goto yy1011; + } +yy1011: + pScanner->cur -= 1; +#line 693 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_pop_state(pScanner); + return T_END_CONSTANT; + } +#line 11155 "expscan.c" +yy1012: + ++pScanner->cur; + goto yy1011; +/****************** LOCAL *****************/ +yyc_LOCAL: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy1017; + case '\n': goto yy1020; + case ':': goto yy1022; + case ';': goto yy1024; + case 'E': + case 'e': goto yy1026; + default: goto yy1015; + } +yy1015: + ++pScanner->cur; +yy1016: +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 11180 "expscan.c" +yy1017: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy1017; + default: goto yy1019; + } +yy1019: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 11192 "expscan.c" +yy1020: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 11197 "expscan.c" +yy1022: + ++pScanner->cur; +#line 705 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_push_state(yycSTMT, pScanner); return T_COLON; } +#line 11202 "expscan.c" +yy1024: + yyaccept = 0; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy1027; + case 'E': + case 'e': + yyt1 = pScanner->cur; + goto yy1030; + default: goto yy1025; + } +yy1025: +#line 706 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + pScanner->id_ref_typ = T_VARIABLE_REF; + yy_push_state(yycID_LIST, pScanner); + return T_SEMICOLON; + } +#line 11226 "expscan.c" +yy1026: + yyaccept = 1; + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case 'N': + case 'n': goto yy1031; + default: goto yy1016; + } +yy1027: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy1027; + case 'E': + case 'e': goto yy1030; + default: goto yy1029; + } +yy1029: + pScanner->cur = pScanner->mrk; + if (yyaccept == 0) { + goto yy1025; + } else { + goto yy1016; + } +yy1030: + yych = *++pScanner->cur; + switch (yych) { + case 'N': + case 'n': goto yy1032; + default: goto yy1029; + } +yy1031: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy1033; + default: goto yy1029; + } +yy1032: + yych = *++pScanner->cur; + switch (yych) { + case 'D': + case 'd': goto yy1034; + default: goto yy1029; + } +yy1033: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy1035; + default: goto yy1029; + } +yy1034: + yych = *++pScanner->cur; + switch (yych) { + case '_': goto yy1036; + default: goto yy1029; + } +yy1035: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy1037; + default: goto yy1029; + } +yy1036: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy1038; + default: goto yy1029; + } +yy1037: + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy1039; + default: goto yy1029; + } +yy1038: + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy1040; + default: goto yy1029; + } +yy1039: + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy1041; + default: goto yy1029; + } +yy1040: + yych = *++pScanner->cur; + switch (yych) { + case 'C': + case 'c': goto yy1042; + default: goto yy1029; + } +yy1041: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy1043; + default: goto yy1029; + } +yy1042: + yych = *++pScanner->cur; + switch (yych) { + case 'A': + case 'a': goto yy1044; + default: goto yy1029; + } +yy1043: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy1045; + default: goto yy1029; + } +yy1044: + yych = *++pScanner->cur; + switch (yych) { + case 'L': + case 'l': goto yy1046; + default: goto yy1029; + } +yy1045: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + case ';': goto yy1048; + default: goto yy1029; + } +yy1046: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 711 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_SEMICOLON; } +#line 11371 "expscan.c" +yy1048: + ++pScanner->cur; + pScanner->cur -= 1; +#line 712 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yy_pop_state(pScanner); + return T_END_LOCAL; + } +#line 11380 "expscan.c" +/****************** INV_FOR *****************/ +yyc_INV_FOR: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy1054; + case '\n': goto yy1057; + case ';': goto yy1059; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy1061; + default: goto yy1052; + } +yy1052: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 11450 "expscan.c" +yy1054: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy1054; + default: goto yy1056; + } +yy1056: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 11462 "expscan.c" +yy1057: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 11467 "expscan.c" +yy1059: + ++pScanner->cur; +#line 727 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { --pScanner->cur; yy_pop_state(pScanner); continue; } +#line 11472 "expscan.c" +yy1061: + yych = *(pScanner->mrk = ++pScanner->cur); + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': + yyt1 = pScanner->cur; + goto yy1064; + case '.': + yyt1 = pScanner->cur; + goto yy1067; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy1061; + default: goto yy1063; + } +yy1063: +#line 722 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_SIMPLE_REF; + } +#line 11557 "expscan.c" +yy1064: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy1064; + case '.': goto yy1067; + default: goto yy1066; + } +yy1066: + pScanner->cur = pScanner->mrk; + goto yy1063; +yy1067: + ++pScanner->cur; + pScanner->cur = yyt1; +#line 717 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + plval->cstr = strdup(ibuffer); + return T_ENTITY_REF; + } +#line 11580 "expscan.c" +/****************** SUBTYPE_CONS *****************/ +yyc_SUBTYPE_CONS: + yych = *pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy1073; + case '\n': goto yy1076; + case ';': goto yy1078; + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy1080; + case 'F': + case 'f': goto yy1083; + default: goto yy1071; + } +yy1071: + ++pScanner->cur; +#line 740 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + yyerror("unregonised input: '%.*s'", pScanner->lineno, 20, pScanner->tok); + } +#line 11650 "expscan.c" +yy1073: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\r': + case ' ': goto yy1073; + default: goto yy1075; + } +yy1075: +#line 615 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { continue; } +#line 11662 "expscan.c" +yy1076: + ++pScanner->cur; +#line 616 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { pScanner->lineno++; continue; } +#line 11667 "expscan.c" +yy1078: + ++pScanner->cur; +#line 737 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { yy_pop_state(pScanner); return T_SEMICOLON; } +#line 11672 "expscan.c" +yy1080: + yych = *++pScanner->cur; +yy1081: + switch (yych) { + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case 'A': + case 'B': + case 'C': + case 'D': + case 'E': + case 'F': + case 'G': + case 'H': + case 'I': + case 'J': + case 'K': + case 'L': + case 'M': + case 'N': + case 'O': + case 'P': + case 'Q': + case 'R': + case 'S': + case 'T': + case 'U': + case 'V': + case 'W': + case 'X': + case 'Y': + case 'Z': + case '_': + case 'a': + case 'b': + case 'c': + case 'd': + case 'e': + case 'f': + case 'g': + case 'h': + case 'i': + case 'j': + case 'k': + case 'l': + case 'm': + case 'n': + case 'o': + case 'p': + case 'q': + case 'r': + case 's': + case 't': + case 'u': + case 'v': + case 'w': + case 'x': + case 'y': + case 'z': goto yy1080; + default: goto yy1082; + } +yy1082: +#line 730 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { + ibufchk = snprintf(ibuffer, IBUFSZ, "%.*s", pScanner->cur - pScanner->tok, pScanner->tok); + idx = scope_find(pState, OBJ_ENTITY_BITS, ibuffer, pScanner); + scope_push(pState, idx, pScanner); + plval->cstr = strdup(ibuffer); + return T_ENTITY_REF; + } +#line 11751 "expscan.c" +yy1083: + yych = *++pScanner->cur; + switch (yych) { + case 'O': + case 'o': goto yy1084; + default: goto yy1081; + } +yy1084: + yych = *++pScanner->cur; + switch (yych) { + case 'R': + case 'r': goto yy1085; + default: goto yy1081; + } +yy1085: + yych = *++pScanner->cur; + switch (yych) { + case '\t': + case '\n': + case '\r': + case ' ': goto yy1086; + default: goto yy1081; + } +yy1086: + ++pScanner->cur; + pScanner->cur -= 1; +#line 729 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + { return T_FOR; } +#line 11780 "expscan.c" +} +#line 780 "/home/chorler/projects/src/stepcode/src/express/expscan.l" + + } + + if (pScanner->mode == yycP3) + break; + } + + return 0; +} + +void brkt_push(struct intList *nesting) { + int *brkt_count; + nesting->qty++; + brkt_count = nesting->entry + nesting->qty; + *brkt_count = 0; +} + +int brkt_pop(struct intList *nesting) { + nesting->qty--; + return 0; +} + + +void yy_push_state(int new_state, struct exp_scanner *scanner) { + int *p; + size_t sz; + + if (scanner->cond_top + 1 < scanner->cond_stack->mlen) { + scanner->cond_stack->entry[++scanner->cond_top] = new_state; + } else { + sz = scanner->cond_stack->mlen + 10; + p = sc_realloc(scanner->cond_stack->entry, sz * sizeof(int)); + if (!p) + yyerror("condition stack overflow!", 0); + scanner->cond_stack->entry = p; + scanner->cond_stack->mlen = sz; + scanner->cond_stack->entry[++scanner->cond_top] = new_state; + } +} + +int yy_exch_state(int new_state, struct exp_scanner *scanner) { + int old_state; + + if (scanner->cond_top >= scanner->cond_stack->mlen) + yyerror("fatal, lexer condition stack is invalid!", 0); + + old_state = scanner->cond_stack->entry[scanner->cond_top]; + scanner->cond_stack->entry[scanner->cond_top] = new_state; + return old_state; +} + +void yy_pop_state(struct exp_scanner *scanner) { + if (!scanner->cond_top) + yyerror("fatal, lexer trying invalid condition stack pop!", 0); + + scanner->cond_top--; +} + +int yy_top_state(struct exp_scanner *scanner) { + return scanner->cond_stack->entry[scanner->cond_top]; +} + +void lexdebug(int state, unsigned char symbol) { + fprintf(stderr, "LEXSTATE(%i): %c\n", state, symbol); } diff --git a/src/express/generated/expscan.h b/src/express/generated/expscan.h index a9e6705cf..c206b8429 100644 --- a/src/express/generated/expscan.h +++ b/src/express/generated/expscan.h @@ -1,100 +1,30 @@ -#ifndef PERPLEX_H -#define PERPLEX_H -/* P E R P L E X _ T E M P L A T E . C - * BRL-CAD - * - * Copyright (c) 1990-2011 United States Government as represented by - * the U.S. Army Research Laboratory. - * - * Copyright (c) 1990 The Regents of the University of California. - * - * 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, 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. - * - * 3. The name of the author may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * 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. - */ -/* Parts of this file are based on sources from the flex project. - * - * This code is derived from software contributed to Berkeley by - * Vern Paxson. - * - * The United States Government has rights in this work pursuant - * to contract no. DE-AC03-76SF00098 between the United States - * Department of Energy and the University of California. - */ -/** @file perplex_template.c - * - * template for generated scanners - * - */ -#include -#include - -#define YYEOF -1 - -struct Buf { - void *elts; /* elements. */ - int nelts; /* number of elements. */ - size_t elt_size; /* in bytes. */ - int nmax; /* max capacity of elements. */ +/* Generated by re2c 1.0.3 on Sat Oct 20 22:52:46 2018 */ +#line 3 "expscan.h" + +enum YYCONDTYPE { + yycP1, + yycCOMMENT, + yycP2, + yycTYPE, + yycENUM, + yycENTITY, + yycARG_LIST, + yycRULE, + yycQUERY, + yycREDECL, + yycSTMT, + yycINV_FOR_STMT, + yycP3, + yycSEARCH_SCOPE, + yycID_CUR_SCOPE, + yycID_LIST, + yycENUM_ID_LIST, + yycLABEL_OPT, + yycENUM_REF, + yycENTITY_REF, + yycDOT_ATTR, + yycCONSTANT, + yycLOCAL, + yycINV_FOR, + yycSUBTYPE_CONS, }; - -/* scanner data */ -typedef struct perplex { - void *extra; /* application data */ - FILE *inFile; - struct Buf *buffer; - char *tokenText; - char *tokenStart; - char *cursor; - char *marker; - char *null; - int atEOI; - int condition; -} *perplex_t; - -perplex_t perplexFileScanner(FILE *input); -perplex_t perplexStringScanner(char *firstChar, size_t numChars); -void perplexFree(perplex_t scanner); - -void perplexUnput(perplex_t scanner, char c); -void perplexSetExtra(perplex_t scanner, void *extra); -void* perplexGetExtra(perplex_t scanner); - -#ifndef PERPLEX_LEXER -#define PERPLEX_LEXER yylex -#endif - -#define PERPLEX_PUBLIC_LEXER PERPLEX_LEXER(perplex_t scanner) -#define PERPLEX_PRIVATE_LEXER PERPLEX_LEXER_private(perplex_t scanner) - -#ifndef PERPLEX_ON_ENTER -#define PERPLEX_ON_ENTER /* do nothing */ -#endif - -int PERPLEX_PUBLIC_LEXER; - -#endif diff --git a/src/express/generated/verification_info.cmake b/src/express/generated/verification_info.cmake index b3d7b3608..07724606a 100644 --- a/src/express/generated/verification_info.cmake +++ b/src/express/generated/verification_info.cmake @@ -1,7 +1,7 @@ # Autogenerated verification information -set(baseline_expscan_l_md5 c86358d3e57ce6916c28a63262fad6e6) -set(baseline_expparse_y_md5 3722242f16c679c40323317833757a6d) -set(baseline_expscan_c_md5 b6b239869e4c7d169107fe45f760ffa0) -set(baseline_expscan_h_md5 3052c058a37045b43f96e4c04039bce3) -set(baseline_expparse_c_md5 c170b5e39b5fe56e2c39288fbe2b48a1) -set(baseline_expparse_h_md5 e4a5599839b2a9f7a6915a0dcc7747b0) +set(baseline_expscan_l_md5 983e80b9716781e77bf9d6d90d2eed0b) +set(baseline_expparse_y_md5 1fbdffbb42b05c89fbe1e3e5081880cb) +set(baseline_expscan_c_md5 72cddc621499c41fa06662d2663d9cee) +set(baseline_expscan_h_md5 24a4cb429db89b70ea094f4dd664206b) +set(baseline_expparse_c_md5 b72e8df2237184faf6b593204041f2f0) +set(baseline_expparse_h_md5 5cdae8aec1c3e7cdaf238e436bbd43b9) diff --git a/src/express/generated/ybreaks.txt b/src/express/generated/ybreaks.txt index cb7636ff3..8ceaeb9df 100644 --- a/src/express/generated/ybreaks.txt +++ b/src/express/generated/ybreaks.txt @@ -1,229 +1,2 @@ -expparse.y:2 -expparse.y:124 -expparse.y:2440 -expparse.y:297 -expparse.y:303 -expparse.y:320 -expparse.y:337 -expparse.y:341 -expparse.y:347 -expparse.y:353 -expparse.y:359 -expparse.y:364 -expparse.y:369 -expparse.y:379 -expparse.y:387 -expparse.y:397 -expparse.y:411 -expparse.y:423 -expparse.y:442 -expparse.y:456 -expparse.y:463 -expparse.y:475 -expparse.y:486 -expparse.y:491 -expparse.y:501 -expparse.y:506 -expparse.y:510 -expparse.y:516 -expparse.y:523 -expparse.y:529 -expparse.y:533 -expparse.y:538 -expparse.y:543 -expparse.y:547 -expparse.y:551 -expparse.y:557 -expparse.y:583 -expparse.y:593 -expparse.y:599 -expparse.y:609 -expparse.y:618 -expparse.y:628 -expparse.y:634 -expparse.y:642 -expparse.y:646 -expparse.y:653 -expparse.y:658 -expparse.y:663 -expparse.y:668 -expparse.y:675 -expparse.y:694 -expparse.y:726 -expparse.y:733 -expparse.y:738 -expparse.y:745 -expparse.y:760 -expparse.y:775 -expparse.y:786 -expparse.y:819 -expparse.y:834 -expparse.y:841 -expparse.y:855 -expparse.y:862 -expparse.y:868 -expparse.y:872 -expparse.y:878 -expparse.y:907 -expparse.y:913 -expparse.y:919 -expparse.y:925 -expparse.y:931 -expparse.y:937 -expparse.y:943 -expparse.y:949 -expparse.y:955 -expparse.y:961 -expparse.y:967 -expparse.y:973 -expparse.y:979 -expparse.y:985 -expparse.y:995 -expparse.y:1001 -expparse.y:1007 -expparse.y:1013 -expparse.y:1019 -expparse.y:1025 -expparse.y:1031 -expparse.y:1037 -expparse.y:1055 -expparse.y:1059 -expparse.y:1064 -expparse.y:1087 -expparse.y:1092 -expparse.y:1098 -expparse.y:1104 -expparse.y:1129 -expparse.y:1138 -expparse.y:1146 -expparse.y:1154 -expparse.y:1159 -expparse.y:1169 -expparse.y:1178 -expparse.y:1182 -expparse.y:1188 -expparse.y:1194 -expparse.y:1202 -expparse.y:1211 -expparse.y:1224 -expparse.y:1232 -expparse.y:1240 -expparse.y:1245 -expparse.y:1253 -expparse.y:1265 -expparse.y:1278 -expparse.y:1284 -expparse.y:1292 -expparse.y:1296 -expparse.y:1300 -expparse.y:1308 -expparse.y:1313 -expparse.y:1318 -expparse.y:1324 -expparse.y:1342 -expparse.y:1346 -expparse.y:1355 -expparse.y:1365 -expparse.y:1378 -expparse.y:1384 -expparse.y:1397 -expparse.y:1420 -expparse.y:1432 -expparse.y:1437 -expparse.y:1444 -expparse.y:1452 -expparse.y:1460 -expparse.y:1487 -expparse.y:1521 -expparse.y:1529 -expparse.y:1536 -expparse.y:1548 -expparse.y:1565 -expparse.y:1571 -expparse.y:1577 -expparse.y:1583 -expparse.y:1599 -expparse.y:1616 -expparse.y:1640 -expparse.y:1646 -expparse.y:1651 -expparse.y:1658 -expparse.y:1664 -expparse.y:1681 -expparse.y:1686 -expparse.y:1691 -expparse.y:1696 -expparse.y:1707 -expparse.y:1711 -expparse.y:1716 -expparse.y:1720 -expparse.y:1730 -expparse.y:1735 -expparse.y:1742 -expparse.y:1750 -expparse.y:1760 -expparse.y:1786 -expparse.y:1794 -expparse.y:1801 -expparse.y:1810 -expparse.y:1819 -expparse.y:1827 -expparse.y:1835 -expparse.y:1842 -expparse.y:1846 -expparse.y:1850 -expparse.y:1854 -expparse.y:1858 -expparse.y:1862 -expparse.y:1866 -expparse.y:1870 -expparse.y:1878 -expparse.y:1886 -expparse.y:1891 -expparse.y:1896 -expparse.y:1907 -expparse.y:1915 -expparse.y:1936 -expparse.y:1942 -expparse.y:1949 -expparse.y:1957 -expparse.y:1984 -expparse.y:1993 -expparse.y:2012 -expparse.y:2023 -expparse.y:2036 -expparse.y:2041 -expparse.y:2090 -expparse.y:2100 -expparse.y:2106 -expparse.y:2112 -expparse.y:2118 -expparse.y:2131 -expparse.y:2137 -expparse.y:2143 -expparse.y:2149 -expparse.y:2153 -expparse.y:2158 -expparse.y:2169 -expparse.y:2175 -expparse.y:2180 -expparse.y:2185 -expparse.y:2190 -expparse.y:2215 -expparse.y:2223 -expparse.y:2234 -expparse.y:2241 -expparse.y:2284 -expparse.y:2292 -expparse.y:2297 -expparse.y:2301 -expparse.y:2328 -expparse.y:2334 -expparse.y:2341 -expparse.y:2347 -expparse.y:2362 -expparse.y:2371 -expparse.y:2377 -expparse.y:2391 -expparse.y:2396 -expparse.y:2424 +expparse.y:159 +expparse.y:814 diff --git a/src/express/hash.c b/src/express/hash.c index 5556ade92..833403b0e 100644 --- a/src/express/hash.c +++ b/src/express/hash.c @@ -1,566 +1,470 @@ - - /* * Dynamic hashing, after CACM April 1988 pp 446-457, by Per-Ake Larson. + * https://cacm.acm.org/magazines/1988/4/9970-dynamic-hash-tables/abstract + * * Coded into C, with minor code improvements, and with hsearch(3) interface, * by ejp@ausmelb.oz, Jul 26, 1988: 13:16; * also, hcreate/hdestroy routines added to simulate hsearch(3). * - * move to local hash table, cleanup abstraction and storage allocation; - * convert to ANSII C. - * by snc (clark@cme.nbs.gov), 10-Mar-1989 - * - * these routines simulate hsearch(3) and family, with the important - * difference that the hash table is dynamic - can grow indefinitely - * beyond its original size (as supplied to hcreate()). - * - * Performance appears to be comparable to that of hsearch(3). - * The 'source-code' options referred to in hsearch(3)'s 'man' page - * are not implemented; otherwise functionality is identical. - * - * Compilation controls: - * HASH_DEBUG controls some informative traces, mainly for debugging. - * HASH_STATISTICS causes HashAccesses and HashCollisions to be maintained; - * when combined with HASH_DEBUG, these are displayed by hdestroy(). - * - * Problems & fixes to ejp@ausmelb.oz. WARNING: relies on pre-processor - * concatenation property, in probably unnecessary code 'optimisation'. - * - * snc: fixed concatenation for ANSII C, 10-Mar-1989 - * - * $Log: hash.c,v $ - * Revision 1.8 1997/10/22 16:36:49 sauderd - * Changed the use and definitions of the compiler macros MUL and DIV. They - * seem to be defined and used only within hash.h and hash.c - * - * Revision 1.7 1997/01/21 19:19:51 dar - * made C++ compatible - * - * Revision 1.6 1994/03/23 20:06:51 libes - * botched free in hash destroy - * - * Revision 1.5 1993/10/15 18:49:55 libes - * CADDETC certified - * - * Revision 1.4 1992/08/18 18:27:10 libes - * changed DEBUG to HASH_DEBUG - * - * Revision 1.3 1992/08/18 17:16:22 libes - * rm'd extraneous error messages - * - * Revision 1.2 1992/05/31 08:37:18 libes - * multiple files - * - * Revision 1.1 1992/05/28 03:56:55 libes - * Initial revision - * - * Revision 1.4 1992/05/14 10:15:04 libes - * don't remember - * - * Revision 1.3 1992/02/12 07:06:49 libes - * y - * y - * do sub/supertype - * - * Revision 1.2 1992/02/09 00:51:02 libes - * does ref/use correctly - * - * Revision 1.1 1992/02/05 08:34:24 libes - * Initial revision - * - * Revision 1.0.1.1 1992/01/22 02:40:04 libes - * copied from ~pdes - * - * Revision 1.9 1992/01/22 02:26:58 libes - * added code to test hash package - * - * Revision 1.8 1991/09/17 02:53:23 libes - * fixed bug in HASHcopy (new hash tables were coming out empty) - * - * Revision 1.7 1991/08/30 16:34:36 libes - * fixed HASHlist to use state from parameter instead of static - * - * Revision 1.6 1991/08/13 22:19:39 libes - * forgot to declare s, s2, pp, and q. Oops. - * - * Revision 1.5 1991/08/06 19:03:07 libes - * fixed bugs relating to my previous addition (delete function) - * added HASHcopy to support DICT_copy via OBJcopy - * - * Revision 1.4 1991/07/19 03:57:46 libes - * added action HASH_DELETE - * made action HASH_INSERT return failure upon duplicate entry - * - * Revision 1.3 1991/02/26 19:40:45 libes - * Added functions for visiting every member of the hash table, to duplicate - * similar functionality of linked lists. Note that current implementation - * can only walk through one hash table at a time. This can be improved, but - * the application code doesn't currently need such a feature. - * - * Revision 1.2 1990/09/06 11:06:56 clark - * BPR 2.1 alpha - * - * Revision 1.1 90/06/11 16:44:43 clark - * Initial revision - * + * ~50% rewritten by Chris Horler for STEPcode + * + * Specific implementation points (based on empirical data) + * + * - the maximum SCHEMA symbol table is probably about 4-6k entries + * - the typical symbol table is (only!) between 8 and 64 entries + * - there's no extended growth behaviour of symbol tables + * - ... + * + * REMARK: This approach is probably overly complex for such a small data set + * */ -#include +#include #include #include +#include +#include + +#ifdef HASH_DEBUG +#include +#endif +#include "bstrlib.h" #include "sc_memmgr.h" -#include "express/hash.h" -/* -** Internal routines -*/ +#include "express/hash.h" +#include "hash_impl.h" +#include "symbol_impl.h" -static inline Address HASHhash( char *, Hash_Table ); -static void HASHexpand_table( Hash_Table ); +#define SEGMENT_SZ 32 /* deliberately small segment size! */ +#define SEGMENT_WIDTH 5 /* log2(SEGMENT_SZ) */ +#define LOAD_FACTOR 1 /* ensures minimum collisions, maximum size */ +#define PRIME1 37 +#define PRIME2 1048583 -/* -** Local data -*/ +extern inline struct Symbol_ *SYMBOL_new(); +extern inline void SYMBOL_destroy(struct Symbol_ *x); -# ifdef HASH_STATISTICS -static long HashAccesses, HashCollisions; -# endif +Hash_Table +HASH_Table_new() { + return ALLOC_new(&HASH_Table_fl); +} -/* -** Code -*/ +void +HASH_Table_destroy(Hash_Table x) { + ALLOC_destroy(&HASH_Table_fl,(Freelist *)x); +} void HASHinitialize() { } Hash_Table -HASHcreate( unsigned count ) { - unsigned i; - Hash_Table table; - - /* - ** Adjust Count to be nearest higher power of 2, - ** minimum SEGMENT_SIZE, then convert into segments. - */ - i = SEGMENT_SIZE; - while( i < count ) { - i <<= 1; +HASHcreate() +{ + Hash_Table tbl; + unsigned int i; + + tbl = HASH_Table_new(); + + /* default to minimum size */ + tbl->maxp = SEGMENT_SZ; + tbl->DirectorySize = tbl->maxp >> SEGMENT_WIDTH; + + /* allocate segments */ + tbl->Directory = sc_calloc(sizeof(Segment *), tbl->DirectorySize); + if (tbl->Directory == NULL) { + HASHdestroy(tbl); + return NULL; } - count = DIV( i, SEGMENT_SIZE_SHIFT ); - table = HASH_Table_new(); -#if 0 - table->in_use = 0; -#endif - table->SegmentCount = table->p = table->KeyCount = 0; - /* - ** Allocate initial 'i' segments of buckets - */ - for( i = 0; i < count; i++ ) - CALLOC( table->Directory[i], SEGMENT_SIZE, Element ) - /*, "segment in HASHcreate");*/ - - table->SegmentCount = count; - table->maxp = MUL( count, SEGMENT_SIZE_SHIFT ); - table->MinLoadFactor = 1; - table->MaxLoadFactor = MAX_LOAD_FACTOR; -# ifdef HASH_DEBUG - fprintf( stderr, - "[HASHcreate] table %x count %d maxp %d SegmentCount %d\n", - table, - count, - table->maxp, - table->SegmentCount ); -# endif -# ifdef HASH_STATISTICS - HashAccesses = HashCollisions = 0; -# endif - return( table ); -} - -/* initialize pointer to beginning of hash table so we can step through it */ -/* on repeated calls to HASHlist - DEL */ -void -HASHlistinit( Hash_Table table, HashEntry * he ) { - he->i = he->j = 0; - he->p = 0; - he->table = table; - he->type = '*'; -#if 0 - table->in_use = 1; -#endif -} - -void -HASHlistinit_by_type( Hash_Table table, HashEntry * he, char type ) { - he->i = he->j = 0; - he->p = 0; - he->table = table; - he->type = type; -#if 0 - table->in_use = 1; + /* Allocate initial buckets */ + for (i = 0; i < tbl->DirectorySize; i++) { + tbl->Directory[i] = sc_calloc(sizeof(Segment), SEGMENT_SZ); + if (tbl->Directory[i] == NULL) { + HASHdestroy(tbl); + return NULL; + } + tbl->SegmentCount++; + } + +#ifdef HASH_DEBUG + fprintf(stderr, "[hcreate] Table %p Count %u maxp %u SegmentCount %u\n", + tbl, tbl->KeyCount, tbl->maxp, tbl->SegmentCount); #endif + return tbl; } -#if 0 -/* if you don't step to the end, you can clear the flag this way */ void -HASHlistend( HashEntry * he ) { - he->table->in_use = 0; -} +HASHdestroy(Hash_Table tbl) +{ + unsigned int i, j; +#ifdef HASH_DEBUG + float n, r; #endif - -/* provide a way to step through the hash */ -Element -HASHlist( HashEntry * he ) { - int i2 = he->i; - int j2 = he->j; - Segment s; - - he->e = 0; - - for( he->i = i2; he->i < he->table->SegmentCount; he->i++ ) { - /* test probably unnecessary */ - if( ( s = he->table->Directory[he->i] ) != NULL ) { - for( he->j = j2; he->j < SEGMENT_SIZE; he->j++ ) { - if( !he->p ) { - he->p = s[he->j]; - } - - /* if he->p is defined, prepare to return it (by - setting it to he->e) and begin looking for a new value - for he->p - */ -retry: - if( he->p ) { - if( ( he->type != '*' ) && - ( he->type != he->p->type ) ) { - he->p = he->p->next; - goto retry; - } - if( he->e ) { - return( he->e ); - } - he->e = he->p; - he->p = he->p->next; - } - - /* avoid incrementing he->j by returning here */ - if( he->p ) { - return( he->e ); - } + Segment s; + Symbol *p,*q; + + assert(tbl != NULL); + + for (i = 0; i < tbl->SegmentCount; i++) { + s = tbl->Directory[i]; + assert(s != NULL); + + for (j = 0; j < SEGMENT_SZ; j++) { + p = s[j]; + while (p != NULL) { + q = p->next; + sc_free(p); + p = q; } - j2 = 0; } + sc_free(s); } - /* if he->e was set then it is last one */ -#if 0 - he->table->in_use = 0; + + sc_free(tbl->Directory); + +#ifdef HASH_DEBUG + r = tbl->KeyCount; + n = tbl->SegmentCount << SEGMENT_WIDTH; + + fprintf( + stderr, + "[hdestroy] Count %u HashSize: %u Collisions %u ExpectedCollisions: %.2f\n", + tbl->KeyCount, + tbl->SegmentCount << SEGMENT_WIDTH, + tbl->HashCollisions, + ((r - n) + n * powf((n - 1) / n, r)) + ); #endif - return( he->e ); + + HASH_Table_destroy(tbl); } -#if 0 -/* this verifies no one else is walking through the table that we might screw up */ -/* it should be called before adding, deleting or destroying a table */ -HASH_in_use( Hash_Table table, char * action ) { - fprintf( stderr, "HASH: attempted to %s but hash table in use\n", action ); -} -#endif +/* make a complete copy of a hash table */ +/* Note that individual objects are shallow-copied. OBJcopy is not called! */ +/* But then, it isn't called when objects are inserted/deleted so this seems */ +/* reasonable - DEL */ +Hash_Table +HASHcopy( Hash_Table oldtable ) { + Hash_Table newtable; + Symbol *p, **q; + unsigned int i, j; -void -HASHdestroy( Hash_Table table ) { - Segment s; - Element p, q; - - if( table != HASH_NULL ) { - unsigned int i, j; -#if 0 - if( table->in_use ) { - HASH_in_use( table, "destroy hash table" ); - } -#endif - for( i = 0; i < table->SegmentCount; i++ ) { - /* test probably unnecessary */ - if( ( s = table->Directory[i] ) != NULL ) { - for( j = 0; j < SEGMENT_SIZE; j++ ) { - p = s[j]; - while( p != NULL ) { - q = p->next; - HASH_Element_destroy( p ); - p = q; - } - } - sc_free( table->Directory[i] ); + newtable = HASH_Table_new(); + memcpy(newtable, oldtable, sizeof *oldtable); + + newtable->Directory = sc_calloc(newtable->DirectorySize, sizeof(Segment *)); + if (!newtable->Directory) + /* HASHdestroy? */ + return NULL; + + for (i = 0; i < newtable->SegmentCount; i++) { + newtable->Directory[i] = sc_calloc(SEGMENT_SZ, sizeof(Segment)); + if (!newtable->Directory[i]) + /* HASHdestroy */ + return NULL; + + for (j = 0; j < SEGMENT_SZ; j++) { + p = oldtable->Directory[i][j]; + q = &newtable->Directory[i][j]; + while (p) { + *q = SYMBOL_new(); + memcpy(*q, p, sizeof(Symbol)); + (*q)->next = NULL; + q = &(*q)->next; + p = p->next; } } - HASH_Table_destroy( table ); -# if defined(HASH_STATISTICS) && defined(HASH_DEBUG) - fprintf( stderr, - "[hdestroy] Accesses %ld Collisions %ld\n", - HashAccesses, - HashCollisions ); -# endif } + + return newtable; } -Element -HASHsearch( Hash_Table table, Element item, Action action ) { - Address h; - Segment CurrentSegment; - int SegmentIndex; - int SegmentDir; - Segment p; - Element q; - Element deleteme; - - assert( table != HASH_NULL ); /* Kinder really than return(NULL); */ -# ifdef HASH_STATISTICS - HashAccesses++; -# endif - h = HASHhash( item->key, table ); - SegmentDir = DIV( h, SEGMENT_SIZE_SHIFT ); - SegmentIndex = MOD( h, SEGMENT_SIZE ); - /* - ** valid segment ensured by HASHhash() - */ - CurrentSegment = table->Directory[SegmentDir]; - assert( CurrentSegment != NULL ); /* bad failure if tripped */ - p = CurrentSegment + SegmentIndex; +Symbol * +HASHsearch(Hash_Table tbl, Symbol item, Action action) { + size_t h; + Segment CurrentSegment; + int SegmentIndex; + int SegmentDir; + Symbol **p, *q; + + assert(tbl != NULL); + + h = HASHhash(item.name); + if (h % tbl->maxp < tbl->p) { + h %= (tbl->maxp << 1); + } else { + h %= tbl->maxp; + } + + SegmentDir = h >> SEGMENT_WIDTH; + SegmentIndex = h % SEGMENT_SZ; + + CurrentSegment = tbl->Directory[SegmentDir]; + assert(CurrentSegment != NULL); + + p = &CurrentSegment[SegmentIndex]; q = *p; - /* - ** Follow collision chain - ** Now and after we finish this loop - ** p = &element, and - ** q = element - */ - while( q != NULL && strcmp( q->key, item->key ) ) { + + /* Follow collision chain */ + while (q != NULL && strcasecmp((char *) q->name, (char *) item.name)) { p = &q->next; q = *p; -# ifdef HASH_STATISTICS - HashCollisions++; -# endif } - /* at this point, we have either found the element or it doesn't exist */ - switch( action ) { - case HASH_FIND: - return( ( Element )q ); - case HASH_DELETE: - if( !q ) { - return( 0 ); - } - /* at this point, element exists and action == DELETE */ -#if 0 - if( table->in_use ) { - HASH_in_use( table, "insert element" ); - } + + /* TODO: remove HASH_DELETE to force compile error */ + assert(action != HASH_DELETE); + if (action == HASH_DELETE) + return NULL; + + /* found, not found - search only, alloc or fail */ + if (q != NULL || action == HASH_FIND || (q = SYMBOL_new()) == NULL) + return q; + +#ifdef HASH_DEBUG + /* check for a (new) collision */ + if (p != &CurrentSegment[SegmentIndex]) + tbl->HashCollisions++; #endif - deleteme = q; - *p = q->next; - /*STRINGfree(deleteme->key);*/ - HASH_Element_destroy( deleteme ); - --table->KeyCount; - return( deleteme ); /* of course, user shouldn't deref this! */ - case HASH_INSERT: - /* if trying to insert it (twice), let them know */ - if( q != NULL ) { - return( q ); /* was return(0);!!!!!?!?! */ - } -#if 0 - if( table->in_use ) { - HASH_in_use( table, "delete element" ); - } -#endif - /* at this point, element does not exist and action == INSERT */ - q = HASH_Element_new(); - *p = q; /* link into chain */ - /* - ** Initialize new element - */ - /* I don't see the point of copying the key!!!! */ - /* q->key = STRINGcopy(item->key);*/ - q->key = item->key; - q->data = item->data; - q->symbol = item->symbol; - q->type = item->type; - q->next = NULL; - /* - ** table over-full? - */ - if( ++table->KeyCount / MUL( table->SegmentCount, SEGMENT_SIZE_SHIFT ) > table->MaxLoadFactor ) { - HASHexpand_table( table ); /* doesn't affect q */ - } + /* link into chain, initialize new element */ + *p = q; + memcpy(q, &item, sizeof(Symbol)); + q->next = NULL; + + ++tbl->KeyCount; + + /* resize the table */ + if (tbl->KeyCount / (tbl->SegmentCount << SEGMENT_WIDTH ) >= LOAD_FACTOR) + HASHexpand_table(tbl); + + return q; +} + +void +HASHdelete(Hash_Table tbl, Symbol *item) { + size_t h; + Segment CurrentSegment; + int SegmentIndex; + int SegmentDir; + Symbol **p, *q; + + assert(tbl != NULL); + + h = HASHhash(item->name); + if (h % tbl->maxp < tbl->p) { + h %= (tbl->maxp << 1); + } else { + h %= tbl->maxp; + } + + SegmentDir = h >> SEGMENT_WIDTH; + SegmentIndex = h % SEGMENT_SZ; + + CurrentSegment = tbl->Directory[SegmentDir]; + assert(CurrentSegment != NULL); + + p = &CurrentSegment[SegmentIndex]; + q = *p; + + /* Follow collision chain */ + while (q != NULL && strcasecmp((char *) q->name, (char *) item->name)) { + p = &q->next; + q = *p; } - return( ( Element )0 ); /* was return (Element)q */ + + /* ensure no undefined assignment behaviour */ + assert(q != item); + if (!q) + return; + + *p = q->next; + memcpy(item, q, sizeof(Symbol)); + item->next = NULL; + tbl->KeyCount--; + SYMBOL_destroy(q); } + /* ** Internal routines */ +size_t HASHhash(const unsigned char *key) +{ + size_t h; + const unsigned char *k; + + /* Convert string to integer */ + for (h = 0, k = key; *k; k++) + h = h * PRIME1 ^ toupper(*k); + h %= PRIME2; + + return h; +} -static inline Address HASHhash( char * Key, Hash_Table table ) { - Address h, address; - register unsigned char * k = ( unsigned char * )Key; +/* + * tbl->p the next bucket to be split [x mod N] + * tbl->maxp the current table size [N] + * + * NOTE: the method, as it's not entirely obvious + * + * e.g. tbl->maxp == 4 [N] + * 4, 8, 12, 16 are in bucket 0 (x mod 4 == 0) + * 4, 12 are in (new) bucket 4 (x mod 8 == 4) + * 8, 16 remain in bucket 0 (x mod 8 == 0) + * + * general form + * x mod N + * -> x mod 2N + */ +void +HASHexpand_table(Hash_Table tbl) +{ + size_t NewAddress, h; +#ifdef HASH_DEBUG + int ci, cj, ck; +#endif + int OldSegmentIndex, NewSegmentIndex; + int OldSegmentDir, NewSegmentDir; + Segment OldSegment, NewSegment, *NewDirectory; + Symbol *Current,**Previous,**LastOfNew; + + /* check there's enough space for a new bucket, attempt resize */ + if (tbl->maxp + tbl->p >= (tbl->DirectorySize << SEGMENT_WIDTH)) { + NewDirectory = sc_realloc(tbl->Directory, sizeof(Segment *) * (tbl->DirectorySize << 1)); + if (!NewDirectory) + return; + tbl->Directory = NewDirectory; + memset(tbl->Directory + tbl->SegmentCount, 0, sizeof(Segment *) * tbl->DirectorySize); + tbl->DirectorySize <<= 1; + } - h = 0; /* - ** Convert string to integer + ** Locate the bucket to be split */ - /*SUPPRESS 112*/ - assert( Key ); - while( *k ) - /*SUPPRESS 8*/ { /*SUPPRESS 112*/ - h = h * PRIME1 ^ ( *k++ - ' ' ); - } - h %= PRIME2; - address = MOD( h, table->maxp ); - if( address < table->p ) { - address = MOD( h, ( table->maxp << 1 ) ); /* h % (2*table->maxp) */ + OldSegmentDir = tbl->p >> SEGMENT_WIDTH; + OldSegment = tbl->Directory[OldSegmentDir]; + OldSegmentIndex = tbl->p % SEGMENT_SZ; + /* + ** Expand address space; if necessary create a new segment + */ + NewAddress = tbl->maxp + tbl->p; + NewSegmentDir = NewAddress >> SEGMENT_WIDTH; + NewSegmentIndex = NewAddress % SEGMENT_SZ; + if (NewSegmentIndex == 0) { +#ifdef HASH_DEBUG + fprintf(stderr, "[ExpandTable] %p Count %u maxp %d SegmentCount %u Collisions %u\n", + tbl, tbl->KeyCount, tbl->maxp, tbl->SegmentCount, tbl->HashCollisions); +#endif + tbl->Directory[NewSegmentDir] = sc_calloc(sizeof(Segment), SEGMENT_SZ); + if (!tbl->Directory[NewSegmentDir]) + return; + tbl->SegmentCount++; } - return( address ); -} - -static void HASHexpand_table( Hash_Table table ) { - Segment OldSegment, NewSegment; - Element Current, *Previous, *LastOfNew; - - if( table->maxp + table->p < MUL( DIRECTORY_SIZE, SEGMENT_SIZE_SHIFT ) ) { - Address NewAddress; - int OldSegmentIndex, NewSegmentIndex; - int OldSegmentDir, NewSegmentDir; - /* - ** Locate the bucket to be split - */ - OldSegmentDir = DIV( table->p, SEGMENT_SIZE_SHIFT ); - OldSegment = table->Directory[OldSegmentDir]; - OldSegmentIndex = MOD( table->p, SEGMENT_SIZE ); - /* - ** Expand address space; if necessary create a new segment - */ - NewAddress = table->maxp + table->p; - NewSegmentDir = DIV( NewAddress, SEGMENT_SIZE_SHIFT ); - NewSegmentIndex = MOD( NewAddress, SEGMENT_SIZE ); - if( NewSegmentIndex == 0 ) { - CALLOC( table->Directory[NewSegmentDir], SEGMENT_SIZE, Element ); - } - /* "segment in HASHexpand_table");*/ - NewSegment = table->Directory[NewSegmentDir]; - /* - ** Adjust state variables - */ - table->p++; - if( table->p == table->maxp ) { - table->maxp <<= 1; /* table->maxp *= 2 */ - table->p = 0; - } - table->SegmentCount++; - /* - ** Relocate records to the new bucket - */ - Previous = &OldSegment[OldSegmentIndex]; - Current = *Previous; - LastOfNew = &NewSegment[NewSegmentIndex]; - *LastOfNew = NULL; - while( Current != NULL ) { - if( HASHhash( Current->key, table ) == NewAddress ) { - /* - ** Attach it to the end of the new chain - */ - *LastOfNew = Current; - /* - ** Remove it from old chain - */ - *Previous = Current->next; - LastOfNew = &Current->next; - Current = Current->next; - *LastOfNew = NULL; - } else { - /* - ** leave it on the old chain - */ - Previous = &Current->next; - Current = Current->next; - } + NewSegment = tbl->Directory[NewSegmentDir]; + + /* + ** Relocate records to the new bucket + */ + Previous = &OldSegment[OldSegmentIndex]; + Current = *Previous; + LastOfNew = &NewSegment[NewSegmentIndex]; + *LastOfNew = NULL; +#ifdef HASH_DEBUG + ci = cj = ck = -1; +#endif + while (Current != NULL) + { +#ifdef HASH_DEBUG + /* collisions to remove */ + ck++; +#endif + /* rehash for a factor 2 increase */ + h = HASHhash(Current->name) % (tbl->maxp << 1); + if (h == NewAddress) { + /* Attach it to the end of the new chain */ + *LastOfNew = Current; + + /* Remove it from old chain */ + *Previous = Current->next; + LastOfNew = &Current->next; + Current = Current->next; + *LastOfNew = NULL; +#ifdef HASH_DEBUG + /* collisions to add */ + ci++; +#endif + } else { + /* leave it on the old chain */ + Previous = &Current->next; + Current = Current->next; +#ifdef HASH_DEBUG + /* collisions to add */ + cj++; +#endif } } + +#ifdef HASH_DEBUG + if (ck > 0) { + tbl->HashCollisions -= ck; + if (ci > 0) + tbl->HashCollisions += ci; + if (cj > 0) + tbl->HashCollisions += cj; + } +#endif + /* increment for the next bucket */ + tbl->p++; + if (tbl->p == tbl->maxp) + { + tbl->maxp <<= 1; + tbl->p = 0; + } } -/* make a complete copy of a hash table */ -/* Note that individual objects are shallow-copied. OBJcopy is not called! */ -/* But then, it isn't called when objects are inserted/deleted so this seems */ -/* reasonable - DEL */ -Hash_Table -HASHcopy( Hash_Table oldtable ) { - Hash_Table newtable; - Segment s, s2; - Element * pp; /* old element */ - Element * qq; /* new element */ - unsigned int i, j; - newtable = HASH_Table_new(); - for( i = 0; i < oldtable->SegmentCount; i++ ) { - CALLOC( newtable->Directory[i], SEGMENT_SIZE, Element ); - /* "segment in HASHcopy");*/ - } +/****** minimal iterator implementation **********/ - newtable->p = oldtable->p; - newtable->SegmentCount = oldtable->SegmentCount; - newtable->maxp = oldtable->maxp; - newtable->MinLoadFactor = oldtable->MinLoadFactor; - newtable->MaxLoadFactor = oldtable->MaxLoadFactor; - newtable->KeyCount = oldtable->KeyCount; - - for( i = 0; i < oldtable->SegmentCount; i++ ) { - /* test probably unnecessary */ - if( ( s = oldtable->Directory[i] ) != NULL ) { - s2 = newtable->Directory[i]; - for( j = 0; j < SEGMENT_SIZE; j++ ) { - qq = &s2[j]; - for( pp = &s[j]; *pp; pp = &( *pp )->next ) { - *qq = HASH_Element_new(); - /* (*qq)->key = STRINGcopy((*pp)->key);*/ - /* I really doubt it is necessary to copy the key!!! */ - ( *qq )->key = ( *pp )->key; - ( *qq )->data = ( *pp )->data; - ( *qq )->symbol = ( *pp )->symbol; - ( *qq )->type = ( *pp )->type; - ( *qq )->next = NULL; - qq = &( ( *qq )->next ); - } - } - } - } - return( newtable ); +void +HASHdo_init(Hash_Table tbl, Hash_Iterator *it, char type) { + it->hash = 0; + it->table = tbl; + it->p = NULL; + it->type = type; } -/* following code is for testing hash package */ -#ifdef HASHTEST -struct Element e1, e2, e3, *e; -struct Hash_Table * t; -HashEntry he; - -main() { - e1.key = "foo"; - e1.data = ( char * )1; - e2.key = "bar"; - e2.data = ( char * )2; - e3.key = "herschel"; - e3.data = ( char * )3; - - t = HASHcreate( 100 ); - e = HASHsearch( t, &e1, HASH_INSERT ); - e = HASHsearch( t, &e2, HASH_INSERT ); - e = HASHsearch( t, &e3, HASH_INSERT ); - HASHlistinit( t, &he ); - for( ;; ) { - e = HASHlist( &he ); - if( !e ) { - exit( 0 ); +/* provide a way to step through the hash */ +Symbol * +HASHdo( Hash_Iterator * it ) { + Symbol *q; + int SegmentDir, SegmentIndex; + + for (; it->hash < (it->table->maxp + it->table->p); it->hash++) { + SegmentDir = it->hash >> SEGMENT_WIDTH; + SegmentIndex = it->hash % SEGMENT_SZ; + + /* only used segments are initialised */ + assert(it->table->Directory[SegmentDir] != NULL); + + if (!it->p) + it->p = it->table->Directory[SegmentDir][SegmentIndex]; + + while (it->p != NULL) { + q = it->p; + if (q && (it->type == OBJ_ANY || it->type == q->type)) { + it->p = q->next; + if (!it->p) + it->hash++; + return q; + } + + it->p = q->next; } - fprintf( stderr, "found key %s, data %d\n", e->key, ( int )e->data ); + } + + return NULL; } -#endif + diff --git a/src/express/hash_impl.h b/src/express/hash_impl.h new file mode 100644 index 000000000..ec92835fb --- /dev/null +++ b/src/express/hash_impl.h @@ -0,0 +1,12 @@ +#ifndef __HASH_IMPL_H +#define __HASH_IMPL_H + +#include "express/hash.h" + +inline size_t HASHhash(const unsigned char *); +inline void HASHexpand_table(Hash_Table); + +inline Hash_Table HASH_Table_new(); +inline void HASH_Table_destroy(Hash_Table x); + +#endif /* __HASH_IMPL_H */ diff --git a/src/express/lexsupport.c b/src/express/lexsupport.c new file mode 100644 index 000000000..b210f1669 --- /dev/null +++ b/src/express/lexsupport.c @@ -0,0 +1,442 @@ +#include +#include + +#include "sc_memmgr.h" + +#include "lexsupport.h" +#include "expparse.h" +#include "expscan.h" + +struct kw_token_def reserved_keywords[] = { + {"ABS", T_ABS}, + {"ABSTRACT", T_ABSTRACT}, + {"ACOS", T_ACOS}, + {"AGGREGATE", T_AGGREGATE}, + {"ALIAS", T_ALIAS}, + {"AND", T_AND}, + {"ANDOR", T_ANDOR}, + {"ARRAY", T_ARRAY}, + {"AS", T_AS}, + {"ASIN", T_ASIN}, + {"ATAN", T_ATAN}, + {"BAG", T_BAG}, + {"BASED_ON", T_BASED_ON}, + {"BEGIN", T_BEGIN}, + {"BINARY", T_BINARY}, + {"BLENGTH", T_BLENGTH}, + {"BOOLEAN", T_BOOLEAN}, + {"BY", T_BY}, + {"CASE", T_CASE}, + {"CONSTANT", T_CONSTANT}, + {"CONST_E", T_CONST_E}, + {"COS", T_COS}, + {"DERIVE", T_DERIVE}, + {"DIV", T_IDIV}, + {"ELSE", T_ELSE}, + {"END", T_END}, + {"END_ALIAS", T_END_ALIAS}, + {"END_CASE", T_END_CASE}, + {"END_CONSTANT", T_END_CONSTANT}, + {"END_ENTITY", T_END_ENTITY}, + {"END_FUNCTION", T_END_FUNCTION}, + {"END_IF", T_END_IF}, + {"END_LOCAL", T_END_LOCAL}, + {"END_PROCEDURE", T_END_PROCEDURE}, + {"END_REPEAT", T_END_REPEAT}, + {"END_RULE", T_END_RULE}, + {"END_SCHEMA", T_END_SCHEMA}, + {"END_SUBTYPE_CONSTRAINT", T_END_SUBTYPE_CONSTRAINT}, + {"END_TYPE", T_END_TYPE}, + {"ENTITY", T_ENTITY}, + {"ENUMERATION", T_ENUMERATION}, + {"ESCAPE", T_ESCAPE}, + {"EXISTS", T_EXISTS}, + {"EXP", T_EXP}, + {"EXTENSIBLE", T_EXTENSIBLE}, + {"FALSE", T_FALSE}, + {"FIXED", T_FIXED}, + {"FOR", T_FOR}, + {"FORMAT", T_FORMAT}, + {"FROM", T_FROM}, + {"FUNCTION", T_FUNCTION}, + {"GENERIC", T_GENERIC}, + {"GENERIC_ENTITY", T_GENERIC_ENTITY}, + {"HIBOUND", T_HIBOUND}, + {"HIINDEX", T_HIINDEX}, + {"IF", T_IF}, + {"IN", T_IN}, + {"INSERT", T_INSERT}, + {"INTEGER", T_INTEGER}, + {"INVERSE", T_INVERSE}, + {"LENGTH", T_LENGTH}, + {"LIKE", T_LIKE}, + {"LIST", T_LIST}, + {"LOBOUND", T_LOBOUND}, + {"LOCAL", T_LOCAL}, + {"LOG", T_LOG}, + {"LOG10", T_LOG10}, + {"LOG2", T_LOG2}, + {"LOGICAL", T_LOGICAL}, + {"LOINDEX", T_LOINDEX}, + {"MOD", T_MOD}, + {"NOT", T_NOT}, + {"NUMBER", T_NUMBER}, + {"NVL", T_NVL}, + {"ODD", T_ODD}, + {"OF", T_OF}, + {"ONEOF", T_ONEOF}, + {"OPTIONAL", T_OPTIONAL}, + {"OR", T_OR}, + {"OTHERWISE", T_OTHERWISE}, + {"PI", T_PI}, + {"PROCEDURE", T_PROCEDURE}, + {"QUERY", T_QUERY}, + {"REAL", T_REAL}, + {"REFERENCE", T_REFERENCE}, + {"REMOVE", T_REMOVE}, + {"RENAMED", T_RENAMED}, + {"REPEAT", T_REPEAT}, + {"RETURN", T_RETURN}, + {"ROLESOF", T_ROLESOF}, + {"RULE", T_RULE}, + {"SCHEMA", T_SCHEMA}, + {"SELECT", T_SELECT}, + {"SELF", T_SELF}, + {"SET", T_SET}, + {"SIN", T_SIN}, + {"SIZEOF", T_SIZEOF}, + {"SKIP", T_SKIP}, + {"SQRT", T_SQRT}, + {"STRING", T_STRING}, + {"SUBTYPE", T_SUBTYPE}, + {"SUBTYPE_CONSTRAINT", T_SUBTYPE_CONSTRAINT}, + {"SUPERTYPE", T_SUPERTYPE}, + {"TAN", T_TAN}, + {"THEN", T_THEN}, + {"TO", T_TO}, + {"TOTAL_OVER", T_TOTAL_OVER}, + {"TRUE", T_TRUE}, + {"TYPE", T_TYPE}, + {"TYPEOF", T_TYPEOF}, + {"UNIQUE", T_UNIQUE}, + {"UNKNOWN", T_UNKNOWN}, + {"UNTIL", T_UNTIL}, + {"USE", T_USE}, + {"USEDIN", T_USEDIN}, + {"VALUE", T_VALUE}, + {"VALUE_IN", T_VALUE_IN}, + {"VALUE_UNIQUE", T_VALUE_UNIQUE}, + {"VAR", T_VAR}, + {"WHERE", T_WHERE}, + {"WHILE", T_WHILE}, + {"WITH", T_WITH}, + {"XOR", T_XOR}, + {NULL, 0} +}; + + +struct intList *intListCreate (void) { + struct intList * il = sc_malloc(sizeof(struct intList)); + if (il) { + il->entry = sc_malloc(sizeof(int)); + if (!il->entry) { + sc_free(il); + il = NULL; + } else { + il->entry[0] = 0; + il->qty = 0; + il->mlen = 1; + } + } + return il; +} + +int intListDestroy (struct intList * il) { + /* dummy implementation */ + return 0; +} + +int intListAllocMin (struct intList * il, int msz) { + int *l; + size_t nsz; + + if (!il || msz <= 0 || !il->entry || il->qty < 0 || il->mlen <= 0 || + il->qty > il->mlen) return BSTR_ERR; + if (msz < il->qty) msz = il->qty; + if (il->mlen == msz) return BSTR_OK; + nsz = ((size_t) msz) * sizeof(int); + if (nsz < (size_t) msz) return BSTR_ERR; + l = sc_realloc(il->entry, nsz); + if (!l) return BSTR_ERR; + il->mlen = msz; + il->entry = l; + memset(il->entry + il->qty, 0, sizeof(int) * (il->mlen - il->qty)); + return BSTR_OK; +} + +struct scopeList *scopeListCreate (void) { + struct scopeList * sl = sc_malloc(sizeof(struct scopeList)); + if (sl) { + sl->entry = sc_malloc(sizeof(struct scope_def)); + if (!sl->entry) { + sc_free(sl); + sl = NULL; + } else { + sl->qty = 0; + sl->mlen = 1; + } + } + return sl; +} + +int scopeListDestroy (struct scopeList * sl) { + /* dummy implementation */ + return 0; +} + +int scopeListAllocMin (struct scopeList * sl, int msz) { + struct scope_def *l; + size_t nsz; + + if (!sl || msz <= 0 || !sl->entry || sl->qty < 0 || sl->mlen <= 0 || + sl->qty > sl->mlen) return BSTR_ERR; + if (msz < sl->qty) msz = sl->qty; + if (sl->mlen == msz) return BSTR_OK; + nsz = ((size_t) msz) * sizeof(struct scope_def); + if (nsz < (size_t) msz) return BSTR_ERR; + l = sc_realloc(sl->entry, nsz); + if (!l) return BSTR_ERR; + sl->mlen = msz; + sl->entry = l; + return BSTR_OK; +} + +void yylexReset(struct exp_scanner *s, int new_mode) { + s->cur = s->tok = s->mrk = s->ctx = s->buffer->data; + memset(s->cond_stack->entry, 0, sizeof(int) * s->cond_stack->mlen); + s->cond_top = 0; + s->cond_stack->entry[0] = new_mode; + s->mode = new_mode; +} + +int yylexInit(struct exp_scanner *pScanner, struct YYSTATE *pState, FILE *fp) { + bstring buf; + + buf = bread((bNread) fread, fp); + if (!buf) + yyerror("failed to read input!", 0); + + pScanner->state = pState; + pScanner->scope_top = scope_alloc(pState->scope_stack, "DOCROOT", OBJ_DOCROOT_BITS); + pState->scope_stack->entry[pScanner->scope_top].parent = -1; + + pScanner->buffer = buf; + pScanner->lim = buf->data + buf->slen; + pScanner->anon_scope_cnt = 1; + + yylexReset(pScanner, yycP1); + return 0; +} + +struct exp_scanner *yylexAlloc() { + int chk; + struct exp_scanner *scanner; + + scanner = sc_malloc(sizeof *scanner); + if (scanner) { + memset(scanner, 0, sizeof *scanner); + + scanner->cond_stack = intListCreate(); + chk = intListAllocMin(scanner->cond_stack, 20); + if (chk != BSTR_OK) + goto err_out; + + scanner->brkt_nesting = intListCreate(); + chk = intListAllocMin(scanner->brkt_nesting, 50); + if (chk != BSTR_OK) + goto err_out; + } + + return scanner; + +err_out: + return NULL; +} + + +struct YYSTATE *yystateAlloc() { + struct YYSTATE *pState = sc_malloc(sizeof(struct YYSTATE)); + + if (pState) { + pState->scope_stack = scopeListCreate(); + pState->lineno = 1; + } + + return pState; +} + +int scope_alloc(struct scopeList *stack, const char *typ, int scope_type) { + struct scope_def *sp; + const char *nx; + char *np; + int chk; + + /* TODO: error checking */ + chk = scopeListAllocMin(stack, stack->qty+1); + if (chk != BSTR_OK) + goto err_out; + + sp = stack->entry + stack->qty; + /* TODO: really this doesn't need a symbol - we only have the "name", which could be assigned later or here */ + sp->symbol.name = NULL; + sp->type = scope_type; + sp->parent = 0xDEADBEEF; + sp->symbol_table = HASHcreate(); + +#ifdef YYDEBUG + sp->symbol.stype = strdup(typ); + for (nx = typ, np = sp->stype; *nx; nx++, np++) + *np = toupper((unsigned char) *nx); +#endif + + return stack->qty++; + +err_out: + yyerror("scope_alloc failure!", 0); +} + +void scope_push(struct YYSTATE *pState, int idx, struct exp_scanner *pScanner) { + struct scopeList *stack = pState->scope_stack; + struct scope_def *scope = stack->entry + idx; + scope->parent = pScanner->scope_top; + if (idx < 0) { + yyerror("+++scope_push() internal error, pushing nonsense!", pScanner->lineno); + } + pScanner->scope_top = idx; +} + +int scope_pop(struct YYSTATE *pState, struct exp_scanner *pScanner) { + struct scopeList *stack = pState->scope_stack; + int idx = pScanner->scope_top; + struct scope_def *scope = stack->entry + idx; + if (scope->parent < 0) { + yyerror("+++scope_pop() internal error, popping of the stack", 0); + } + pScanner->scope_top = scope->parent; + return idx; +} + +int scope_find(struct YYSTATE *pState, int itype, const char *sname, struct exp_scanner *pScanner) { + struct scopeList *stack = pState->scope_stack; + struct scope_def *s; + int i, idx = -1, pidx = pScanner->scope_top; + + /* need to match parent, name and type */ + for (i = 0; i < stack->qty; i++) { + s = stack->entry + i; + if (s->parent == pidx && s->type == itype && !strcasecmp(s->symbol.name, sname)) { + idx = i; + break; + } + } + + if (idx < 0) + yyerror("+++ scope_find failed, internal error!\n", 0); + + return idx; +} + +void add_symbol(struct scope_def *scope, const char *id, int ref_tok, struct exp_scanner *pScanner) { + Symbol e, *ep; + int type; + + switch (ref_tok) { + case T_SCHEMA_REF: + type = OBJ_SCHEMA; + break; + case T_FUNCTION_REF: + type = OBJ_FUNCTION; + break; + case T_PROCEDURE_REF: + type = OBJ_PROCEDURE; + break; + case T_RULE_REF: + type = OBJ_RULE; + break; + case T_ENTITY_REF: + type = OBJ_ENTITY; + break; + case T_TYPE_REF: + type = OBJ_TYPE; + break; + case T_ENUMERATION_REF: + type = OBJ_ENUM; + break; + case T_RULE_LABEL_REF: + type = OBJ_TAG; /* TODO: check, confirm rule labels are tags */ + break; + case T_VARIABLE_REF: + case T_PARAMETER_REF: /* TODO: check - parameter maps to variable? */ + type = OBJ_VARIABLE; + break; + default: /* T_CONSTANT_REF, T_INVALID, T_SIMPLE_REF */ + type = OBJ_UNKNOWN; /* TODO: check for CONSTANT */ + } + e = (Symbol) {.name = strdup(id), .type = type, .ref_tok = ref_tok, + .filename = pScanner->filename, .line = pScanner->lineno}; + ep = HASHsearch(scope->symbol_table, e, HASH_INSERT); + if (!ep) + yyerror("failed to insert symbol into symbol table", pScanner->lineno); +} + +int resolve_symbol(struct YYSTATE *pState, const char *id, struct exp_scanner *pScanner) { + Symbol *qry, *sym; + bool is_enum; + int cnt_enum = 0, cnt = 0, chk; + struct scopeList *stack = pState->scope_stack; + struct scope_def *s = stack->entry + pScanner->scope_top; + + /* basic resolution */ + qry = NULL; + while (s->type != OBJ_DOCROOT_BITS) { + qry = HASHsearch(s->symbol_table, (Symbol) {.name = id}, HASH_FIND); + if (qry) + break; + s = stack->entry + s->parent; + } + + /* not found, probably an attribute */ + if (!qry) + return T_SIMPLE_REF; + + /* check for enums */ + sym = qry; + while (qry) { + if (!strcasecmp(qry->name, id)) { + cnt++; + if (qry->ref_tok == T_ENUMERATION_REF) + cnt_enum++; + } + qry = qry->next; + } + + chk = cnt - cnt_enum; + if (chk > 1 || (!chk && cnt_enum > 1)) { + yyerror("conflicting token types for id '%s'", pScanner->lineno, id); + } + + is_enum = chk > 0 ? false : true; + qry = sym; + while (qry) { + if (!strcasecmp(sym->name, id)) { + if ((!is_enum && qry->ref_tok != T_ENUMERATION_REF) || + (is_enum && qry->ref_tok == T_ENUMERATION_REF)) + break; + } + qry = qry->next; + } + + return qry->ref_tok; +} + + diff --git a/src/express/lexsupport.h b/src/express/lexsupport.h new file mode 100644 index 000000000..4ed184506 --- /dev/null +++ b/src/express/lexsupport.h @@ -0,0 +1,130 @@ +#ifndef __LEXSUPPORT_H +#define __LEXSUPPORT_H + +#include +#include + +#include "bstrlib.h" + +#include "express/expbasic.h" +#include "express/linklist.h" + +#include "token_type.h" + +#define yyerror_helper(fmt, lineno, ...) \ + do { fprintf(stderr, "error, line %i: " fmt "\n", (lineno), __VA_ARGS__); exit(1); } while (0) +#define yyerror(...) yyerror_helper(__VA_ARGS__, 0) + +struct intList { + int qty, mlen; + int *entry; +}; + +struct exp_scanner { + /* lexing pass / debug flag */ + int mode; + bool debug; + /* start condition stack */ + struct intList *cond_stack; + int cond_top; + /* pointers into the buffer and location */ + unsigned char *cur, *lim, *tok, *ctx, *mrk; + int lineno; + /* buffer and input reference */ + bstring buffer; + const char *filename; + /* flags for rules based scope */ + bool in_explicit_attr, in_rules_clause, in_inverse_clause; + /* lexical scopes */ + int scope_aux, scope_top; + /* token ref type */ + int id_ref_typ; + /* scope type bits */ + int scope_typ; + /* list of counters for brackets within each scope */ + struct intList *brkt_nesting; + /* counter for anonymous scope names */ + unsigned int anon_scope_cnt; + /* shared state - lexical scopes */ + struct YYSTATE *state; +}; + +struct scope_def { + int parent; + + Symbol symbol; + int type; + + Hash_Table symbol_table; + ClientData clientData; + + union { + struct Procedure_ * proc; + struct Function_ * func; + struct Rule_ * rule; + struct Entity_ * entity; + struct Schema_ * schema; + struct Express_ * express; + struct Increment_ * incr; + struct TypeHead_ * type; + /* TBD: struct Query_ * query; */ + } u; +}; + +struct scopeList { + int qty, mlen; + struct scope_def *entry; +}; + +/* TODO: migrate definitions here? */ + +struct YYSTYPE; + +struct YYSTATE { + int lineno; /* TODO: remove when parser rebuilds automatically */ + struct scopeList *scope_stack; +}; + +struct kw_token_def { + const char *kw; + int token; +}; + +extern struct kw_token_def reserved_keywords[]; + +/* lemon doesn't provide a header */ +void *yyparseAlloc(void * (*mallocptr)(size_t)); +void yyparseFree(void *, void (*freeptr)(void *)); +void yyparseInit(void *); +void yyparse(void *, int, struct YYSTYPE *, struct YYSTATE *); +void yyparseTrace(FILE *, char *); + +struct exp_scanner *yylexAlloc(); +void yylexFree(struct exp_scanner *); +int yylexInit(struct exp_scanner *, struct YYSTATE *, FILE *); + +int yylex(struct exp_scanner *, struct YYSTYPE *); +void yylexTrace(struct exp_scanner *, bool); +void yylexReset(struct exp_scanner *s, int new_mode); + +struct YYSTATE *yystateAlloc(); +void yystateFree(); + +struct intList * intListCreate (void); +int intListDestroy (struct intList * il); +int intListAllocMin (struct intList * il, int msz); + +struct scopeList * scopeListCreate (void); +int scopeListDestroy (struct scopeList * sl); +int scopeListAllocMin (struct scopeList * sl, int msz); + +int scope_alloc(struct scopeList *stack, const char *typ, int tok); +void scope_push(struct YYSTATE *pState, int idx, struct exp_scanner *scanner); +int scope_pop(struct YYSTATE *state, struct exp_scanner *scanner); +int scope_find(struct YYSTATE *state, int itype, const char *sname, struct exp_scanner *scanner); +int resolve_symbol(struct YYSTATE *state, const char *sym, struct exp_scanner *scanner); +void add_symbol(struct scope_def *scope, const char *id, int tok, struct exp_scanner *pScanner); + + + +#endif /* __LEXSUPPORT_H */ diff --git a/src/express/memory.c b/src/express/memory.c index f8b536e45..44d138f9d 100644 --- a/src/express/memory.c +++ b/src/express/memory.c @@ -7,8 +7,9 @@ #include "express/schema.h" #include "express/type.h" +#include "symbol_impl.h" + struct freelist_head HASH_Table_fl; -struct freelist_head HASH_Element_fl; struct freelist_head LINK_fl; struct freelist_head LIST_fl; @@ -53,9 +54,8 @@ struct freelist_head INCR_fl; void MEMORYinitialize() { _ALLOCinitialize(); - - ALLOCinitialize( &HASH_Table_fl, sizeof( struct Hash_Table_ ), 50, 50 ); - ALLOCinitialize( &HASH_Element_fl, sizeof( struct Element_ ), 500, 100 ); + + ALLOCinitialize( &HASH_Table_fl, sizeof( struct Hash_Table_ ), 500, 100 ); ALLOCinitialize( &LINK_fl, sizeof( struct Link_ ), 500, 100 ); ALLOCinitialize( &LIST_fl, sizeof( struct Linked_List_ ), 100, 50 ); @@ -100,3 +100,4 @@ void MEMORYinitialize() { } + diff --git a/src/express/ordered_attrs.cc b/src/express/ordered_attrs.cc index 8081c16e3..33ebb64b1 100644 --- a/src/express/ordered_attrs.cc +++ b/src/express/ordered_attrs.cc @@ -26,7 +26,7 @@ void populateAttrList( oaList & list, Entity ent ) { LISTdo( ent->u.entity->attributes, attr, Variable ) { bool unique = true; for( unsigned int i = attrCount; i < list.size(); i++ ) { - if( 0 == strcasecmp( attr->name->symbol.name, list[i]->attr->name->symbol.name ) ) { + if(!strcasecmp( (char *) attr->name->symbol.name, (char *) list[i]->attr->name->symbol.name ) ) { // an attr by this name exists in a supertype // originally printed a warning here, but that was misleading - they have more uses than I thought unique = false; @@ -56,8 +56,8 @@ void dedupList( oaList & list ) { oaList::iterator it, jt; for( it = list.begin(); it != list.end(); it++ ) { for( jt = it + 1; jt != list.end(); jt++ ) { - if( ( 0 == strcasecmp( ( * it )->attr->name->symbol.name, ( * jt )->attr->name->symbol.name ) ) && - ( 0 == strcasecmp( ( * it )->creator->symbol.name, ( * jt )->creator->symbol.name ) ) ) { + if( ( !strcasecmp( (char *) ( * it )->attr->name->symbol.name, (char *) ( * jt )->attr->name->symbol.name ) ) && + ( !strcasecmp( (char *) ( * it )->creator->symbol.name, (char *) ( * jt )->creator->symbol.name ) ) ) { //fprintf( stderr, "erasing %s created by %s\n", ( * jt )->attr->name->symbol.name, ( * jt )->creator->symbol.name ); jt--; list.erase( jt + 1 ); diff --git a/src/express/resolve.c b/src/express/resolve.c index fa5797917..cd846c6e7 100644 --- a/src/express/resolve.c +++ b/src/express/resolve.c @@ -125,10 +125,10 @@ Type TYPE_retrieve_aggregate( Type t_select, Type t_agg ) { ** \note the macro 'EXPresolve' calls this function after checking if expr is already resolved */ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { + Symbol *ep; Function f = 0; Symbol * sym; - void *x; - Entity e; + Entity ent; Type t; bool func_args_checked = false; @@ -137,18 +137,19 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { */ switch( expr->type->u.type->body->type ) { case funcall_: + /* TODO: no longer true - now the parser sees them as funcall_! */ /* functions with no arguments get handled elsewhere */ /* because the parser sees them just like attributes */ - x = SCOPEfind( scope, expr->symbol.name, + ep = SCOPEfind(scope, expr->symbol.name, SCOPE_FIND_FUNCTION | SCOPE_FIND_ENTITY ); - if( !x ) { + if( !ep ) { ERRORreport_with_symbol(UNDEFINED_FUNC, &expr->symbol, expr->symbol.name ); resolve_failed( expr ); break; } - if( ( DICT_type != OBJ_FUNCTION ) && ( DICT_type != OBJ_ENTITY ) ) { - sym = OBJget_symbol( x, DICT_type ); + if (ep->type != OBJ_FUNCTION && ep->type != OBJ_ENTITY) { + sym = OBJget_symbol( ep->data, ep->type ); ERRORreport_with_symbol(FUNCALL_NOT_A_FUNCTION, &expr->symbol, sym->name ); resolve_failed( expr ); break; @@ -156,17 +157,17 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { /* original code accepted rules, too? */ /* entities are treated like implicit constructor functions */ - if( DICT_type == OBJ_ENTITY ) { + if( ep->type == OBJ_ENTITY ) { Type self_old = self; /* save previous in the unlikely but possible case that * SELF is in a derived initialization of an entity */ - e = ( Entity )x; - self = e->u.entity->type; + ent = ( Entity ) ep->data; + self = ent->u.entity->type; /* skip parameter resolution for now */ /* ARGresolve();*/ - expr->return_type = e->u.entity->type; + expr->return_type = ent->u.entity->type; self = self_old; /* restore old SELF */ } else { - f = ( Function )x; + f = ( Function ) ep->data; expr->return_type = f->u.func->return_type; /* do argument typechecking here if requested */ @@ -211,7 +212,7 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { /* add function or entity as first element of list */ LISTadd_first( expr->u.list, x ); #endif - expr->u.funcall.function = ( struct Scope_ * ) x; + expr->u.funcall.function = ( struct Scope_ * ) ep->data; resolved_all( expr ); break; @@ -229,37 +230,26 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { resolved_all( expr ); break; case identifier_: - - x = 0; - /* assume it's a variable/attribute */ - if( !x ) { - x = VARfind( scope, expr->symbol.name, 0 ); - } + ep = VARfind( scope, expr->symbol.name ); /* if not found as a variable, try as function, etc ... */ - if( !x ) { - x = SCOPEfind( scope, expr->symbol.name, - SCOPE_FIND_ANYTHING ); + if( !ep ) { + ep = SCOPEfind( scope, expr->symbol.name, SCOPE_FIND_ANYTHING ); } /* Not all enums have `typecheck->u.type->body->type` == `enumeration_` - ?! */ - if( !x ) { + if (!ep) { Scope enumscope = scope; - while( 1 ) { + while (1) { /* look up locally, then go through the superscopes */ - x = DICTlookup( enumscope->enum_table, expr->symbol.name ); - if( x ) { + ep = HASHsearch(enumscope->enum_table, (Symbol) {.name = expr->symbol.name}, HASH_FIND); + if (ep || enumscope->type == OBJ_SCHEMA) break; - } - if( enumscope->type == OBJ_SCHEMA ) { - /* if we get here, this means that we've looked through all scopes */ - x = 0; - break; - } + enumscope = enumscope->superscope; } } - if( !x ) { + if( !ep ) { if( typecheck == Type_Unknown ) { return; } else { @@ -268,9 +258,9 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { break; } } - switch( DICT_type ) { + switch( ep->type ) { case OBJ_VARIABLE: - expr->u.variable = ( Variable )x; + expr->u.variable = ( Variable ) ep->data; #if 0 /* gee, I don't see what variables have to go through this right here */ VARresolve_expressions( expr->u.variable, scope ); @@ -287,28 +277,28 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { resolved_all( expr ); break; case OBJ_ENTITY: - expr->return_type = expr->type = ( ( Entity )x )->u.entity->type; + expr->return_type = expr->type = ( ( Entity )ep->data )->u.entity->type; /* entity may not actually be resolved by now */ /* but I don't think that's a problem */ resolved_all( expr ); break; case OBJ_EXPRESSION: /* so far only enumerations get returned this way */ - expr->u.expression = ( Expression )x; - expr->type = expr->return_type = ( ( Expression )x )->type; + expr->u.expression = ( Expression ) ep->data; + expr->type = expr->return_type = ( ( Expression )ep->data )->type; resolved_all( expr ); break; case OBJ_FUNCTION: /* functions with no args end up here because the */ /* parser doesn't know any better */ expr->u.list = LISTcreate(); - LISTadd_last( expr->u.list, x ); + LISTadd_last( expr->u.list, ep->data ); expr->type = Type_Funcall; - expr->return_type = ( ( Function )x )->u.func->return_type; + expr->return_type = ( ( Function ) ep->data )->u.func->return_type; /* function may not actually be resolved by now */ /* but I don't think that's a problem */ - if( ( ( Function )x )->u.func->pcount != 0 ) { + if( ( ( Function ) ep->data )->u.func->pcount != 0 ) { ERRORreport_with_symbol(WRONG_ARG_COUNT, &expr->symbol, expr->symbol.name, 0, f->u.func->pcount ); resolve_failed( expr ); @@ -318,8 +308,8 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { break; case OBJ_TYPE: /* enumerations can appear here, I don't know about others */ - expr->type = ( Type )x; - expr->return_type = ( Type )x; + expr->type = ( Type ) ep->data; + expr->return_type = ( Type ) ep->data; expr->symbol.resolved = expr->type->symbol.resolved; break; default: @@ -396,12 +386,16 @@ void EXP_resolve( Expression expr, Scope scope, Type typecheck ) { } int ENTITYresolve_subtype_expression( Expression expr, Entity ent/*was scope*/, Linked_List * flat ) { + Symbol *ep; Entity ent_ref; int i = UNRESOLVED; + /* TODO: TYPEis... should be known by the parser */ if( !expr ) { - return ( RESOLVED ); - } else if( TYPEis_expression( expr->type ) ) { + return RESOLVED; + } + + if( TYPEis_expression( expr->type ) ) { i = ENTITYresolve_subtype_expression( expr->e.op1, ent, flat ); i |= ENTITYresolve_subtype_expression( expr->e.op2, ent, flat ); } else if( TYPEis_oneof( expr->type ) ) { @@ -410,13 +404,13 @@ int ENTITYresolve_subtype_expression( Expression expr, Entity ent/*was scope*/, LISTod; } else { /* must be a simple entity reference */ - ent_ref = ( Entity )SCOPEfind( ent->superscope, expr->symbol.name, SCOPE_FIND_ENTITY ); - if( !ent_ref ) { + ep = SCOPEfind(ent->superscope, expr->symbol.name, SCOPE_FIND_ENTITY); + if( !ep ) { ERRORreport_with_symbol(UNKNOWN_SUBTYPE, &ent->symbol, expr->symbol.name, ent->symbol.name ); i = RESOLVE_FAILED; - } else if( DICT_type != OBJ_ENTITY ) { - Symbol * sym = OBJget_symbol( ent_ref, DICT_type ); + } else if( ep->type != OBJ_ENTITY ) { + Symbol * sym = OBJget_symbol( ep->data, ep->type ); /* line number should really be on supertype name, */ /* but all we have easily is the entity line number */ ERRORreport_with_symbol(SUBTYPE_RESOLVE, &ent->symbol, @@ -424,6 +418,7 @@ int ENTITYresolve_subtype_expression( Expression expr, Entity ent/*was scope*/, i = RESOLVE_FAILED; } else { bool found = false; + ent_ref = ep->data; /* link in to flat list */ if( !*flat ) { @@ -474,8 +469,8 @@ int ENTITYresolve_subtype_expression( Expression expr, Entity ent/*was scope*/, ** Resolve all references in a type. */ void TYPE_resolve( Type * typeaddr /*, Scope scope*/ ) { + Symbol *ep; Type type = *typeaddr; - Type ref_type; TypeBody body = type->u.type->body; Scope scope = type->superscope; @@ -516,35 +511,29 @@ void TYPE_resolve( Type * typeaddr /*, Scope scope*/ ) { } } else { /* simple type reference such as "T" */ - /* this really is a hack. masking out only variables from */ - /* the search is to support the (allowed) circumstance of */ - /* an attribute or formal parameter whose name is the same */ - /* as its type, i.e. "foo : foo". unfortunately, babys like */ - /* local variables get thrown out with the bathwater. -snc */ - ref_type = ( Type )SCOPEfind( scope, type->symbol.name, - SCOPE_FIND_ANYTHING ^ SCOPE_FIND_VARIABLE ); - /* SCOPE_FIND_TYPE | SCOPE_FIND_ENTITY);*/ - if( !ref_type ) { + /* search in the parent scope, to avoid "foo : foo" name type conflicts */ + ep = SCOPEfind(scope->superscope, type->symbol.name, SCOPE_FIND_TYPE | SCOPE_FIND_ENTITY ); + if( !ep ) { ERRORreport_with_symbol(UNDEFINED_TYPE, &type->symbol, type->symbol.name ); *typeaddr = Type_Bad; /* just in case */ resolve_failed( type ); - } else if( DICT_type == OBJ_TYPE ) { + } else if( ep->type == OBJ_TYPE ) { /* due to declarations of multiple attributes off of a */ /* single type ref, we have to use reference counts */ /* to safely deallocate the TypeHead. It's trivial to do */ /* but gaining back the memory isn't worth the CPU time. */ /* if (type->refcount--) TYPE_destroy(type); */ - type = *typeaddr = ref_type; + type = *typeaddr = ep->data; TYPEresolve( typeaddr ); /* addr doesn't matter here */ /* it will not be written through */ - } else if( DICT_type == OBJ_ENTITY ) { + } else if( ep->type == OBJ_ENTITY ) { /* if (type->refcount--) TYPE_destroy(type); see above */ - type = *typeaddr = ( ( Entity )ref_type )->u.entity->type; + type = *typeaddr = ( ( Entity )ep->data )->u.entity->type; } else { ERRORreport_with_symbol(NOT_A_TYPE, &type->symbol, type->symbol.name, - OBJget_type( DICT_type ) ); + OBJget_type( ep->type ) ); resolve_failed( type ); } } @@ -598,7 +587,7 @@ void VAR_resolve_types( Variable v ) { ERRORreport_with_symbol(INVERSE_BAD_ENTITY, &v->name->symbol, v->inverse_symbol->name ); } else { - attr = VARfind( type->u.type->body->entity, v->inverse_symbol->name, 1 ); + attr = VARfind( type->u.type->body->entity, v->inverse_symbol->name); if( attr ) { v->inverse_attribute = attr; failed |= is_resolve_failed( attr->name ); @@ -659,6 +648,7 @@ void CASE_ITresolve( Case_Item item, Scope scope, Statement statement ) { } void STMTresolve( Statement statement, Scope scope ) { + Symbol *ep; /* scope is always the function/procedure/rule from SCOPEresolve_expressions_statements(); */ Scope proc; @@ -698,17 +688,17 @@ void STMTresolve( Statement statement, Scope scope ) { break; case STMT_PCALL: #define proc_name statement->symbol.name - proc = ( Scope )SCOPEfind( scope, proc_name, - SCOPE_FIND_PROCEDURE ); - if( proc ) { - if( DICT_type != OBJ_PROCEDURE ) { - Symbol * newsym = OBJget_symbol( proc, DICT_type ); + ep = SCOPEfind( scope, proc_name, SCOPE_FIND_PROCEDURE); + if( !ep ) { + ERRORreport_with_symbol(NO_SUCH_PROCEDURE, &statement->symbol, proc_name ); + } else { + proc = ep->data; + if( ep->type != OBJ_PROCEDURE ) { + Symbol * newsym = OBJget_symbol( proc, ep->type ); ERRORreport_with_symbol(EXPECTED_PROC, &statement->symbol, proc_name, newsym->line ); } else { statement->u.proc->procedure = proc; } - } else { - ERRORreport_with_symbol(NO_SUCH_PROCEDURE, &statement->symbol, proc_name ); } LISTdo( statement->u.proc->parameters, e, Expression ) EXPresolve( e, scope, Type_Dont_Care ); @@ -745,7 +735,7 @@ void STMTresolve( Statement statement, Scope scope ) { } } -static Variable ENTITY_get_local_attribute( Entity e, char * name ) { +static Variable ENTITY_get_local_attribute( Entity e, const char * name ) { LISTdo( e->u.entity->attributes, a, Variable ) if( !strcmp( VARget_simple_name( a ), name ) ) { return a; @@ -755,10 +745,11 @@ static Variable ENTITY_get_local_attribute( Entity e, char * name ) { } void ENTITYresolve_expressions( Entity e ) { + Hash_Iterator it; + Symbol *ep; Variable v; int status = 0; - DictionaryEntry de; - char * sname; + const char * sname; Entity sup; if( print_objects_while_running & OBJ_ENTITY_BITS ) { @@ -808,8 +799,9 @@ void ENTITYresolve_expressions( Entity e ) { status |= is_resolve_failed( attr->name ); } LISTod; - DICTdo_type_init( e->symbol_table, &de, OBJ_VARIABLE ); - while( 0 != ( v = ( Variable )DICTdo( &de ) ) ) { + HASHdo_init( e->symbol_table, &it, OBJ_VARIABLE ); + while( (ep = HASHdo( &it )) ) { + v = (Variable) ep->data; if( !is_resolve_failed( v->name ) ) { TYPEresolve_expressions( v->type, e ); if( v->initializer ) { @@ -924,9 +916,9 @@ void ENTITYresolve_types( Entity e ); /** also resolves inheritance counts and sub/super consistency */ void SCOPEresolve_types( Scope s ) { + Hash_Iterator it; + Symbol *ep; Variable var; - DictionaryEntry de; - void *x; if( print_objects_while_running & OBJ_SCOPE_BITS & OBJget_bits( s->type ) ) { @@ -934,16 +926,16 @@ void SCOPEresolve_types( Scope s ) { s->symbol.name, OBJget_type( s->type ) ); } - DICTdo_init( s->symbol_table, &de ); - while( 0 != ( x = DICTdo( &de ) ) ) { - switch( DICT_type ) { + HASHdo_init( s->symbol_table, &it, '*' ); + while( (ep = HASHdo( &it )) ) { + switch( ep->type ) { case OBJ_TYPE: if( ERRORis_enabled( SELECT_LOOP ) ) { - TYPEcheck_select_cyclicity( ( Type )x ); + TYPEcheck_select_cyclicity( ( Type ) ep->data ); } break; case OBJ_VARIABLE: /* really constants */ - var = ( Variable )x; + var = ( Variable ) ep->data; /* before OBJ_BITS hack, we looked in s->superscope */ TYPEresolve( &var->type ); if( is_resolve_failed( var->type ) ) { @@ -952,26 +944,26 @@ void SCOPEresolve_types( Scope s ) { } break; case OBJ_ENTITY: - ENTITYcheck_missing_supertypes( ( Entity )x ); - ENTITYresolve_types( ( Entity )x ); - ENTITYcalculate_inheritance( ( Entity )x ); + ENTITYcheck_missing_supertypes( ( Entity ) ep->data ); + ENTITYresolve_types( ( Entity ) ep->data ); + ENTITYcalculate_inheritance( ( Entity ) ep->data ); if( ERRORis_enabled( SUBSUPER_LOOP ) ) { - ENTITYcheck_subsuper_cyclicity( ( Entity )x ); + ENTITYcheck_subsuper_cyclicity( ( Entity ) ep->data ); } - if( is_resolve_failed( ( Entity )x ) ) { + if( is_resolve_failed( ( Entity ) ep->data ) ) { resolve_failed( s ); } break; case OBJ_SCHEMA: - if( is_not_resolvable( ( Schema )x ) ) { + if( is_not_resolvable( ( Schema ) ep->data ) ) { break; } /*FALLTHRU*/ case OBJ_PROCEDURE: case OBJ_RULE: case OBJ_FUNCTION: - SCOPEresolve_types( ( Scope )x ); - if( is_resolve_failed( ( Scope )x ) ) { + SCOPEresolve_types( ( Scope ) ep->data ); + if( is_resolve_failed( ( Scope ) ep->data ) ) { resolve_failed( s ); } break; @@ -986,6 +978,7 @@ void SCOPEresolve_types( Scope s ) { /** for each supertype, find the entity it refs to */ void ENTITYresolve_supertypes( Entity e ) { + Symbol *ep; Entity ref_entity; if( print_objects_while_running & OBJ_ENTITY_BITS ) { @@ -1003,17 +996,18 @@ void ENTITYresolve_supertypes( Entity e ) { #endif LISTdo( e->u.entity->supertype_symbols, sym, Symbol * ) { - ref_entity = ( Entity )SCOPEfind( e->superscope, sym->name, SCOPE_FIND_ENTITY ); - if( !ref_entity ) { + ep = SCOPEfind( e->superscope, sym->name, SCOPE_FIND_ENTITY ); + if( !ep ) { ERRORreport_with_symbol(UNKNOWN_SUPERTYPE, sym, sym->name, e->symbol.name ); /* ENTITY_resolve_failed = 1;*/ resolve_failed( e ); - } else if( DICT_type != OBJ_ENTITY ) { - Symbol * newsym = OBJget_symbol( ref_entity, DICT_type ); + } else if( ep->type != OBJ_ENTITY ) { + Symbol * newsym = OBJget_symbol( ep->data, ep->type ); ERRORreport_with_symbol(SUPERTYPE_RESOLVE, sym, sym->name, newsym->line ); /* ENTITY_resolve_failed = 1;*/ resolve_failed( e ); } else { + ref_entity = ep->data; bool found = false; LISTadd_last( e->u.entity->supertypes, ref_entity ); @@ -1203,8 +1197,10 @@ int WHEREresolve( Linked_List list, Scope scope, int need_self ) { } } +#if 0 struct tag * TAGcreate_tags() { extern int tag_count; - return( ( struct tag * )calloc( tag_count, sizeof( struct tag ) ) ); + return( ( struct tag * ) sc_calloc( tag_count, sizeof( struct tag ) ) ); } +#endif diff --git a/src/express/resolve2.c b/src/express/resolve2.c index bd5518595..ebbe8c64e 100644 --- a/src/express/resolve2.c +++ b/src/express/resolve2.c @@ -7,10 +7,12 @@ #include "express/schema.h" #include "express/resolve.h" + +/********************************new****************************************/ + void SCOPEresolve_subsupers( Scope scope ) { - DictionaryEntry de; - void *x; - char type; + Hash_Iterator it; + Symbol *ep; Symbol * sym; Type t; @@ -20,27 +22,27 @@ void SCOPEresolve_subsupers( Scope scope ) { scope->symbol.name, OBJget_type( scope->type ) ); } - DICTdo_init( scope->symbol_table, &de ); - while( 0 != ( x = DICTdo( &de ) ) ) { - switch( type = DICT_type ) { + HASHdo_init( scope->symbol_table, &it, '*' ); + while( (ep = HASHdo( &it )) ) { + switch( ep->type ) { case OBJ_ENTITY: - ENTITYresolve_supertypes( ( Entity )x ); - ENTITYresolve_subtypes( ( Entity )x ); + ENTITYresolve_supertypes( ep->data ); + ENTITYresolve_subtypes( ep->data ); break; case OBJ_FUNCTION: case OBJ_PROCEDURE: case OBJ_RULE: - SCOPEresolve_subsupers( ( Scope )x ); + SCOPEresolve_subsupers( ep->data ); break; case OBJ_TYPE: - t = ( Type )x; + t = ( Type ) ep->data; TYPEresolve( &t ); break; default: /* ignored everything else */ break; } - sym = OBJget_symbol( x, type ); + sym = OBJget_symbol( ep->data, ep->type ); if( is_resolve_failed_raw( sym ) ) { resolve_failed( scope ); } @@ -48,8 +50,8 @@ void SCOPEresolve_subsupers( Scope scope ) { } void SCOPEresolve_expressions_statements( Scope s ) { - DictionaryEntry de; - void *x; + Hash_Iterator it; + Symbol *ep; Variable v; if( print_objects_while_running & OBJ_SCOPE_BITS & @@ -58,38 +60,38 @@ void SCOPEresolve_expressions_statements( Scope s ) { s->symbol.name, OBJget_type( s->type ) ); } - DICTdo_init( s->symbol_table, &de ); - while( 0 != ( x = DICTdo( &de ) ) ) { - switch( DICT_type ) { + HASHdo_init( s->symbol_table, &it, '*' ); + while( (ep = HASHdo( &it )) ) { + switch( ep->type ) { case OBJ_SCHEMA: - if( is_not_resolvable( ( Schema )x ) ) { + if( is_not_resolvable( ( Schema )ep->data ) ) { break; } - SCOPEresolve_expressions_statements( ( Scope )x ); + SCOPEresolve_expressions_statements( ( Scope )ep->data ); break; case OBJ_ENTITY: - ENTITYresolve_expressions( ( Entity )x ); + ENTITYresolve_expressions( ( Entity )ep->data ); break; case OBJ_FUNCTION: - ALGresolve_expressions_statements( ( Scope )x, ( ( Scope )x )->u.func->body ); + ALGresolve_expressions_statements( ( Scope )ep->data, ( ( Scope )ep->data )->u.func->body ); break; case OBJ_PROCEDURE: - ALGresolve_expressions_statements( ( Scope )x, ( ( Scope )x )->u.proc->body ); + ALGresolve_expressions_statements( ( Scope )ep->data, ( ( Scope )ep->data )->u.proc->body ); break; case OBJ_RULE: - ALGresolve_expressions_statements( ( Scope )x, ( ( Scope )x )->u.rule->body ); + ALGresolve_expressions_statements( ( Scope )ep->data, ( ( Scope )ep->data )->u.rule->body ); - WHEREresolve( RULEget_where( ( Scope )x ), ( Scope )x, 0 ); + WHEREresolve( RULEget_where( ( Scope )ep->data ), ( Scope )ep->data, 0 ); break; case OBJ_VARIABLE: - v = ( Variable )x; + v = ( Variable )ep->data; TYPEresolve_expressions( v->type, s ); if( v->initializer ) { EXPresolve( v->initializer, s, v->type ); } break; case OBJ_TYPE: - TYPEresolve_expressions( ( Type )x, s ); + TYPEresolve_expressions( ( Type )ep->data, s ); break; default: /* ignored everything else */ diff --git a/src/express/schema.c b/src/express/schema.c index 5dd77873a..ff36a82cc 100644 --- a/src/express/schema.c +++ b/src/express/schema.c @@ -113,37 +113,56 @@ void SCHEMAadd_use( Schema cur_schema, Symbol * ref_schema, Symbol * old, Symbol } void SCHEMAdefine_reference( Schema schema, Rename * r ) { - Rename * old = 0; - char * name = ( r->nnew ? r->nnew : r->old )->name; - + Rename *old; + Symbol e, *ep; + Symbol *sym; + if( !schema->u.schema->refdict ) { - schema->u.schema->refdict = DICTcreate( 20 ); - } else { - old = ( Rename * )DICTlookup( schema->u.schema->refdict, name ); - } - if( !old || ( DICT_type != OBJ_RENAME ) || ( old->object != r->object ) ) { - DICTdefine( schema->u.schema->refdict, name, - r, r->old, OBJ_RENAME ); + schema->u.schema->refdict = HASHcreate(); + } + + sym = r->nnew ? r->nnew : r->old; + + e = (Symbol) {.name = sym->name, .data = r, .type = OBJ_RENAME}; + ep = HASHsearch(schema->u.schema->refdict, e, HASH_FIND); + old = !ep ? NULL : ep->data; + + if( !ep || ep->type != OBJ_RENAME || old->object != r->object ) { + /* TODO: evaluate difference in behaviour with DICTdefine + * if there's already an OBJ_RENAME, then DICTdefine would replace it + * - this will instead append another + */ + HASHsearch(schema->u.schema->refdict, e, HASH_INSERT); } } void SCHEMAdefine_use( Schema schema, Rename * r ) { - Rename * old = 0; - char * name = ( r->nnew ? r->nnew : r->old )->name; + Rename * old; + Symbol *ep, e; + Symbol *sym; if( !schema->u.schema->usedict ) { - schema->u.schema->usedict = DICTcreate( 20 ); - } else { - old = ( Rename * )DICTlookup( schema->u.schema->usedict, name ); + schema->u.schema->usedict = HASHcreate(); } - if( !old || ( DICT_type != OBJ_RENAME ) || ( old->object != r->object ) ) { - DICTdefine( schema->u.schema->usedict, name, - r, r->old, OBJ_RENAME ); + + sym = r->nnew ? r->nnew : r->old; + e = (Symbol) {.name = sym->name, .data = r, .type = OBJ_RENAME}; + + ep = HASHsearch(schema->u.schema->usedict, e, HASH_FIND); + old = !ep ? NULL : ep->data; + + if( !ep || ep->type != OBJ_RENAME || old->object != r->object ) { + /* TODO: evaluate difference in behaviour with DICTdefine + * if there's already an OBJ_RENAME, then DICTdefine would replace it + * - this will instead append another + */ + HASHsearch(schema->u.schema->usedict, e, HASH_INSERT); } } static void SCHEMA_get_entities_use( Scope scope, Linked_List result ) { - DictionaryEntry de; + Hash_Iterator it; + Symbol *ep; Rename * rename; if( scope->search_id == __SCOPE_search_id ) { @@ -159,9 +178,10 @@ static void SCHEMA_get_entities_use( Scope scope, Linked_List result ) { /* partially USE'd schema */ if( scope->u.schema->usedict ) { - DICTdo_init( scope->u.schema->usedict, &de ); - while( 0 != ( rename = ( Rename * )DICTdo( &de ) ) ) { - LISTadd_last( result, rename->object ); + HASHdo_init(scope->u.schema->usedict, &it, '*'); + while ( (ep = HASHdo(&it)) ) { + rename = ep->data; + LISTadd_last(result, rename->object); } } } @@ -180,7 +200,8 @@ Linked_List SCHEMAget_entities_use( Scope scope ) { /** return ref'd entities */ void SCHEMA_get_entities_ref( Scope scope, Linked_List result ) { Rename * rename; - DictionaryEntry de; + Hash_Iterator it; + Symbol *ep; if( scope->search_id == __SCOPE_search_id ) { return; @@ -196,11 +217,10 @@ void SCHEMA_get_entities_ref( Scope scope, Linked_List result ) { LISTod /* partially REF'd schema */ - DICTdo_init( scope->u.schema->refdict, &de ); - while( 0 != ( rename = ( Rename * )DICTdo( &de ) ) ) { - if( DICT_type == OBJ_ENTITY ) { - LISTadd_last( result, rename->object ); - } + HASHdo_init(scope->u.schema->refdict, &it, OBJ_ENTITY); + while ( (ep = HASHdo(&it)) ) { + rename = ep->data; + LISTadd_last(result, rename->object); } } @@ -219,31 +239,28 @@ Linked_List SCHEMAget_entities_ref( Scope scope ) { * look up an attribute reference * if strict false, anything can be returned, not just attributes */ -Variable VARfind( Scope scope, char * name, int strict ) { - Variable result; +Symbol *VARfind( Scope scope, const char * name ) { + Symbol *ep; /* first look up locally */ switch( scope->type ) { case OBJ_ENTITY: - result = ENTITYfind_inherited_attribute( scope, name, 0 ); - if( result ) { - if( strict && ( DICT_type != OBJ_VARIABLE ) ) { - fprintf( stderr, "ERROR: strict && ( DICT_type != OBJ_VARIABLE )\n" ); - } - return result; - } + ep = ENTITYfind_inherited_attribute(scope, name, NULL); + /* strict is checked when parsing */ + if (ep) + return ep; break; case OBJ_INCREMENT: case OBJ_QUERY: case OBJ_ALIAS: - result = ( Variable )DICTlookup( scope->symbol_table, name ); - if( result ) { - if( strict && ( DICT_type != OBJ_VARIABLE ) ) { - fprintf( stderr, "ERROR: strict && ( DICT_type != OBJ_VARIABLE )\n" ); - } - return result; - } - return( VARfind( scope->superscope, name, strict ) ); + ep = HASHsearch(scope->symbol_table, (Symbol) {.name = name, .type = OBJ_VARIABLE}, HASH_FIND); + /* strict is checked when parsing */ + if (ep) + return ep; + + ep = VARfind( scope->superscope, name ); + if (ep) + return ep; } - return 0; + return NULL; } diff --git a/src/express/scope.c b/src/express/scope.c index 3d93509d7..16d0a20be 100644 --- a/src/express/scope.c +++ b/src/express/scope.c @@ -39,6 +39,8 @@ * prettied up interface to print_objects_when_running */ +#include "sc_memmgr.h" + #define SCOPE_C #include "express/scope.h" #include "express/resolve.h" @@ -50,12 +52,12 @@ void SCOPEinitialize( void ) { * \sa SCOPEget_entities() */ void SCOPE_get_entities( Scope scope, Linked_List result ) { - DictionaryEntry de; - void *x; + Hash_Iterator it; + Symbol *ep; - DICTdo_type_init( scope->symbol_table, &de, OBJ_ENTITY ); - while( 0 != ( x = DICTdo( &de ) ) ) { - LISTadd_last( result, x ); + HASHdo_init( scope->symbol_table, &it, OBJ_ENTITY ); + while ( (ep = HASHdo(&it)) ) { + LISTadd_last(result, ep->data); } } @@ -63,12 +65,12 @@ void SCOPE_get_entities( Scope scope, Linked_List result ) { * \sa SCOPEget_functions() */ void SCOPE_get_functions( Scope scope, Linked_List result ) { - DictionaryEntry de; - void *x; + Hash_Iterator it; + Symbol *ep; - DICTdo_type_init( scope->symbol_table, &de, OBJ_FUNCTION ); - while( 0 != ( x = DICTdo( &de ) ) ) { - LISTadd_last( result, x ); + HASHdo_init( scope->symbol_table, &it, OBJ_FUNCTION ); + while ( (ep = HASHdo(&it)) ) { + LISTadd_last(result, ep->data); } } /** @@ -84,12 +86,12 @@ Linked_List SCOPEget_functions( Scope scope ) { * \sa SCOPEget_rules() */ void SCOPE_get_rules( Scope scope, Linked_List result ) { - DictionaryEntry de; - void *x; - - DICTdo_type_init( scope->symbol_table, &de, OBJ_RULE ); - while( 0 != ( x = DICTdo( &de ) ) ) { - LISTadd_last( result, x ); + Hash_Iterator it; + Symbol *ep; + + HASHdo_init( scope->symbol_table, &it, OBJ_RULE ); + while ( (ep = HASHdo(&it)) ) { + LISTadd_last(result, ep->data); } } /** @@ -121,17 +123,20 @@ Linked_List SCOPEget_entities( Scope scope ) { /** * \sa SCOPEget_entities_superclass_order() */ -void SCOPE_dfs( Dictionary symbols, Entity root, Linked_List result ) { +void SCOPE_dfs( Hash_Table symbols, Entity root, Linked_List result ) { + Symbol *ep; Entity ent; if( ( ENTITYget_mark( root ) != ENTITY_MARK ) ) { ENTITYput_mark( root, ENTITY_MARK ); LISTdo( ENTITYget_supertypes( root ), super, Entity ) - /* if super explicitly defined in scope, recurse. */ - /* this chops out USEd and REFd entities */ - if( ( ent = ( Entity )DICTlookup( symbols, ENTITYget_name( super ) ) ) != ENTITY_NULL ) { - SCOPE_dfs( symbols, ent, result ); - } + /* if super explicitly defined in scope, recurse. */ + /* this chops out USEd and REFd entities */ + ep = HASHsearch(symbols, (Symbol) {.name = ENTITYget_name( super )}, HASH_FIND); + if (ep) { + ent = ep->data; + SCOPE_dfs( symbols, ent, result); + } LISTod LISTadd_last( result, root ); } @@ -148,13 +153,17 @@ void SCOPE_dfs( Dictionary symbols, Entity root, Linked_List result ) { */ Linked_List SCOPEget_entities_superclass_order( Scope scope ) { Linked_List result; - DictionaryEntry de; - + Hash_Iterator it; + Symbol *ep; + result = LISTcreate(); ++ENTITY_MARK; - SCOPEdo_entities( scope, e, de ) - SCOPE_dfs( scope->symbol_table, e, result ); - SCOPEod; + + HASHdo_init(scope->symbol_table, &it, OBJ_ENTITY); + while( (ep = HASHdo(&it)) ) { + SCOPE_dfs( scope->symbol_table, ep->data, result ); + } + return result; } @@ -163,21 +172,23 @@ Linked_List SCOPEget_entities_superclass_order( Scope scope ) { * note that object found is not actually checked, only because * caller is in a better position to describe the error with context */ -void *SCOPEfind( Scope scope, char * name, int type ) { - extern Dictionary EXPRESSbuiltins; /* procedures/functions */ - void *x; +extern Hash_Table EXPRESSbuiltins; + +Symbol *SCOPEfind( Scope scope, const char * name, int type_mask ) { + Symbol *ep; + /* TODO: check, this looks like it should be in the parser */ __SCOPE_search_id++; + + ep = SCOPE_find( scope, name, type_mask ); + if ( ep ) + return ep; - x = SCOPE_find( scope, name, type ); - if( x ) { - return x; - } + /* TODO: rework (order & check overall logic) */ + if ( type_mask & (SCOPE_FIND_FUNCTION | SCOPE_FIND_PROCEDURE) ) + ep = HASHsearch(EXPRESSbuiltins, (Symbol) {.name = name}, HASH_FIND); - if( type & ( SCOPE_FIND_FUNCTION | SCOPE_FIND_PROCEDURE ) ) { - x = DICTlookup( EXPRESSbuiltins, name ); - } - return x; + return ep; } @@ -186,69 +197,61 @@ void *SCOPEfind( Scope scope, char * name, int type ) { * the supertype/subtype hierarchy * EH??? -> lookup an object when the current scope is not a schema */ -void *SCOPE_find( Scope scope, char * name, int type ) { - void *result; +Symbol *SCOPE_find( Scope scope, const char * name, int type_mask ) { + Symbol *ep; Rename * rename; - if( scope->search_id == __SCOPE_search_id ) { + if ( scope->search_id == __SCOPE_search_id ) return 0; - } + scope->search_id = __SCOPE_search_id; /* go up the superscopes, looking for object */ - while( 1 ) { - /* first look up locally */ - result = DICTlookup( scope->symbol_table, name ); - if( result && OBJtype_is_oneof( DICT_type, type ) ) { - return result; - } - if( scope->type == OBJ_SCHEMA ) { - break; - } + for (;; scope = scope->superscope) { + ep = HASHsearch(scope->symbol_table, (Symbol) {.name = name}, HASH_FIND); + if (ep && OBJtype_is_oneof( ep->type, type_mask )) + return ep->data; - scope = scope->superscope; + if (scope->type == OBJ_SCHEMA) + break; } - if( type & ( SCOPE_FIND_ENTITY | SCOPE_FIND_TYPE ) ) { + if ( type_mask & (SCOPE_FIND_ENTITY | SCOPE_FIND_TYPE) ) { /* Occurs in a fully USE'd schema? */ LISTdo( scope->u.schema->use_schemas, schema, Schema ) - /* follow chain'd USEs */ - if( schema == 0 ) { - continue; - } - result = SCOPE_find( schema, name, type ); - if( result ) { - return( result ); - } + /* follow chain'd USEs */ + if (!schema) + continue; + + ep = SCOPE_find( schema, name, type_mask ); + if (ep) + return ep; LISTod; /* Occurs in a partially USE'd schema? */ - rename = ( Rename * )DICTlookup( scope->u.schema->usedict, name ); - if( rename ) { - DICT_type = rename->type; - return( rename->object ); - } + /* TODO: need to resolve the rename */ + ep = HASHsearch(scope->u.schema->usedict, (Symbol) {.name = name}, HASH_FIND); + rename = !ep ? NULL : ep->data; + if( rename && OBJtype_is_oneof(rename->type, type_mask) ) + return rename->object; } /* Occurs in a fully REF'd schema? */ LISTdo( scope->u.schema->ref_schemas, schema, Schema ) - if( schema == 0 ) { - continue; - } - result = DICTlookup( schema->symbol_table, name ); - if( result ) { - return result; - } else { - continue; /* try another schema */ - } + if (!schema) + continue; + + ep = HASHsearch(schema->symbol_table, (Symbol) {.name = name}, HASH_FIND); + if (ep && OBJtype_is_oneof( ep->type, type_mask )) + return ep->data; LISTod; /* Occurs in a partially REF'd schema? */ - rename = ( Rename * )DICTlookup( scope->u.schema->refdict, name ); - if( rename ) { - DICT_type = rename->type; - return( rename->object ); - } + /* TODO: need to resolve the rename */ + ep = HASHsearch(scope->u.schema->refdict, (Symbol) {.name = name}, HASH_FIND); + rename = !ep ? NULL : ep->data; + if( rename && OBJtype_is_oneof(rename->type, type_mask) ) + return rename->object; return 0; } diff --git a/src/express/stmt.c b/src/express/stmt.c index 7f1579f25..5411952b0 100644 --- a/src/express/stmt.c +++ b/src/express/stmt.c @@ -48,7 +48,6 @@ Statement STATEMENT_SKIP = STATEMENT_NULL; Statement STMTcreate( int type ) { Statement s; s = STMT_new(); - SYMBOLset( s ); s->type = type; return s; } @@ -173,11 +172,13 @@ Statement ALIAScreate( Scope scope, Variable variable, Linked_List statements ) */ Scope INCR_CTLcreate( Symbol * control, Expression start, Expression end, Expression increment ) { + Symbol sym; + Scope s = SCOPEcreate_tiny( OBJ_INCREMENT ); Expression e = EXPcreate_from_symbol( Type_Attribute, control ); Variable v = VARcreate( e, Type_Number ); - DICTdefine( s->symbol_table, control->name, - v, control, OBJ_VARIABLE ); + sym = (Symbol) {.name = control->name, .data = v, .type = OBJ_VARIABLE}; + HASHsearch(s->symbol_table, sym, HASH_INSERT); s->u.incr = INCR_new(); s->u.incr->init = start; s->u.incr->end = end; diff --git a/src/express/symbol_impl.h b/src/express/symbol_impl.h new file mode 100644 index 000000000..4c37b795d --- /dev/null +++ b/src/express/symbol_impl.h @@ -0,0 +1,14 @@ +#ifndef __SYMBOL_IMPL_H_ +#define __SYMBOL_IMPL_H_ + +#include "express/symbol.h" + +inline struct Symbol_ *SYMBOL_new() { + return ALLOC_new(&SYMBOL_fl); +} + +inline void SYMBOL_destroy(struct Symbol_ *x) { + ALLOC_destroy(&SYMBOL_fl,(Freelist *)x); +} + +#endif /* __SYMBOL_IMPL_H_ */ diff --git a/src/express/test/CMakeLists.txt b/src/express/test/CMakeLists.txt index 6d2615a9b..1852073a6 100644 --- a/src/express/test/CMakeLists.txt +++ b/src/express/test/CMakeLists.txt @@ -1,7 +1,7 @@ include_directories(..) if(SC_GENERATE_LP_SOURCES) - include_directories("${PERPLEX_ExpScanner_INCLUDE_DIR}" "${LEMON_ExpParser_INCLUDE_DIR}") + include_directories("${RE2C_ExpScanner_INCLUDE_DIR}" "${LEMON_ExpParser_INCLUDE_DIR}") endif(SC_GENERATE_LP_SOURCES) set(EXPRESS_CORE_OBJ @@ -21,7 +21,6 @@ set(EXPRESS_CORE_OBJ $ # deprecated - $ $ ) @@ -59,20 +58,59 @@ add_test(NAME scope_find COMMAND test_scope scope_find) add_executable(test_type driver.c test_type.c $ ${EXPRESS_CORE_OBJ}) add_test(NAME type_create_user_defined_tag COMMAND test_type type_create_user_defined_tag) -add_test(NAME build_check_express +add_executable(check-hash "hash_test.c;../hash.c;../../auxlib/bstrlib.c") +set_property(TARGET check-hash PROPERTY COMPILE_DEFINITIONS "HASH_TESTING;HASH_DEBUG") +target_link_libraries(check-hash "m") + +add_test(NAME test_hash_impl WORKING_DIRECTORY ${CMAKE_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} --build . - --target check-express - --config $ + COMMAND $ "${CMAKE_CURRENT_SOURCE_DIR}/hash_names.txt" ) +add_test(NAME build_check_express + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND ${CMAKE_COMMAND} --build . + --target check-express + --config $ + ) + +set(SHARED_SRC ../lexsupport.c ../hash.c ../../auxlib/bstrlib.c) + +add_executable(check-scanner scanner_test.c $ ${SHARED_SRC}) +add_dependencies(check-scanner express) + +add_executable(check-parser + parser_test.c + $ + $ + ${SHARED_SRC}) +add_dependencies(check-parser express) + +set_property(TARGET check-scanner check-parser + APPEND PROPERTY INCLUDE_DIRECTORIES "${RE2C_ExpScanner_INCLUDE_DIR}") +set_property(TARGET check-scanner check-parser + APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_INCLUDE_DIR}") +set_property(TARGET check-scanner check-parser + PROPERTY COMPILE_DEFINITIONS "HASH_TESTING") + +file(GLOB unit_tests RELATIVE "${CMAKE_BINARY_DIR}" "../../../test/unitary_schemas/*.exp") +file(GLOB extended_tests RELATIVE "${CMAKE_BINARY_DIR}" "../../../data/*/*.exp") + +foreach(expfile ${unit_tests} ${extended_tests}) + get_filename_component(id_suffix "${expfile}" NAME_WE) + add_test(NAME "test_scanner:${id_suffix}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND $ "${expfile}") + add_test(NAME "test_parser:${id_suffix}" WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + COMMAND $ "${expfile}") +endforeach() + add_test(NAME test_plib_parse_err WORKING_DIRECTORY ${CMAKE_BINARY_DIR} COMMAND $ "${CMAKE_CURRENT_SOURCE_DIR}/plib_parse_err.exp" ) -set_tests_properties( test_plib_parse_err PROPERTIES DEPENDS "build_check_express;$" ) -set_tests_properties( test_plib_parse_err build_check_express PROPERTIES LABELS parser ) +set_tests_properties( test_plib_parse_err PROPERTIES DEPENDS "test_hash_impl" ) +set_tests_properties( test_plib_parse_err test_plib_parse_err PROPERTIES LABELS parser ) sc_addexec(print_schemas SOURCES ../fedex.c print_schemas.c LINK_LIBRARIES express base) sc_addexec(print_attrs SOURCES ../fedex.c print_attrs.c LINK_LIBRARIES express base) diff --git a/src/express/test/hash_names.txt b/src/express/test/hash_names.txt new file mode 100644 index 000000000..f60ed010c --- /dev/null +++ b/src/express/test/hash_names.txt @@ -0,0 +1,6512 @@ +above_plane +abrupt_change_of_surface_normal +abs_function +absorbed_dose_measure +absorbed_dose_measure_with_unit +absorbed_dose_unit +abstract_object +abstract_variable +abstracted_expression_function +acceleration_measure +acceleration_measure_with_unit +acceleration_unit +acos_function +across_port_variable +action +action_assignment +action_directive +action_item +action_items +action_method +action_method_assignment +action_method_item +action_method_items +action_method_relationship +action_method_role +action_method_with_associated_documents +action_method_with_associated_documents_constrained +action_property +action_property_relationship +action_property_representation +action_relationship +action_request_assignment +action_request_item +action_request_solution +action_request_status +action_resource +action_resource_relationship +action_resource_requirement +action_resource_requirement_relationship +action_resource_type +action_status +action_type +action_view_relationship +activity +activity_actual +activity_happening +activity_item +activity_method +activity_method_assignment +activity_method_item +activity_method_realization +activity_method_realization_relationship +activity_method_relationship +activity_property +activity_property_representation +activity_realization_select +activity_relationship +activity_status +actual_individual +actuated_direction +actuated_kinematic_pair +acu_requires_security_classification +acyclic +acyclic_composite_text +acyclic_curve_replica +acyclic_mapped_item_usage +acyclic_mapped_representation +acyclic_point_replica +acyclic_product_category_relationship +acyclic_product_definition_relationship +acyclic_representation_relationship +acyclic_set_replica +acyclic_shape_aspect_relationship +acyclic_solid_replica +acyclic_surface_replica +add_element +additive_laminate_text_component +address +address_assignment +address_based_location_representation +advanced_brep_shape_representation +advanced_csg_shape_representation +advanced_face +advanced_face_properties +advisory_task_step +affected_item_select +affected_items_assignment +agc_with_dimension +aggregate_connectivity_requirement +aggregated_angular_variable +aggregated_scalar_variable +aggregated_tensor2_3d_variable +aggregated_vector_3d_variable +ahead_or_behind +alias_identification +alias_identification_item +aligned_axis_tolerance +aligned_curve_3d_element_coordinate_system +aligned_surface_2d_element_coordinate_system +aligned_surface_3d_element_coordinate_system +all_around_shape_aspect +all_members_of_es +all_mesh_vertices +allocated_passage_minimum_annular_ring +allowed_time +altered_package_terminal +alternate_action_method_relationship +alternate_part_relationship +alternate_plan_relationship +alternate_product_relationship +alternative_solution_requires_solution_definition +amount_of_substance_measure +amount_of_substance_measure_with_unit +amount_of_substance_unit +analog_analytical_model_port +analog_port_variable +analysed_item +analysis_assignment +analysis_item +analysis_item_within_representation +analysis_message +analysis_model +analysis_representation_context +analysis_step +analytical_model_definition +analytical_model_make_from_relationship +analytical_model_parameter +analytical_model_port +analytical_model_port_assignment +analytical_model_scalar_port +analytical_model_vector_port +analytical_representation +ancillary_activity +ancillary_setup +and_expression +and_state_cause_effect_definition +angle +angle_assembly_constraint_with_dimension +angle_direction_reference +angle_direction_reference_select +angle_direction_reference_with_a2p3d_select +angle_geometric_constraint +angle_minmax +angle_range +angle_relator +angular_dimension +angular_location +angular_size +angular_value +angularity_tolerance +anisotropic_symmetric_tensor2_2d +anisotropic_symmetric_tensor2_3d +anisotropic_symmetric_tensor4_2d +anisotropic_symmetric_tensor4_3d +annotation_curve_occurrence +annotation_fill_area +annotation_fill_area_occurrence +annotation_occurrence +annotation_occurrence_associativity +annotation_occurrence_relationship +annotation_plane +annotation_plane_element +annotation_representation_select +annotation_subfigure_occurrence +annotation_symbol +annotation_symbol_occurrence +annotation_symbol_occurrence_item +annotation_text +annotation_text_character +annotation_text_occurrence +annotation_text_occurrence_item +any_number_value +any_space_satisfies +any_string_value +ap203_configuration_controlled_3d_design_of_mechanical_parts_and_assemblies_mim_lf +ap209_multidisciplinary_analysis_and_design_mim_lf +ap210_electronic_assembly_interconnect_and_packaging_design_mim_dot_application_protocol_definition_required +ap210_electronic_assembly_interconnect_and_packaging_design_mim_lf +ap239_product_life_cycle_support_arm_lf +ap242_managed_model_based_3d_engineering_mim_lf +apeaid_is_base +apex +application_context +application_context_element +application_context_relationship +application_context_requires_ap_definition +application_defined_degree_of_freedom +application_defined_element_purpose +application_defined_function +application_defined_matrix_property_type +application_defined_scalar_variable +application_defined_tensor2_2d_variable +application_defined_tensor2_3d_variable +application_defined_vector_2d_variable +application_defined_vector_3d_variable +application_protocol_definition +application_protocol_definition_required +applied_action_assignment +applied_action_method_assignment +applied_action_request_assignment +applied_activity_assignment +applied_activity_method_assignment +applied_approval_assignment +applied_area +applied_attribute_classification_assignment +applied_certification_assignment +applied_classification_assignment +applied_contract_assignment +applied_date_and_time_assignment +applied_date_assignment +applied_document_reference +applied_document_usage_constraint_assignment +applied_document_usage_contraint_assignment +applied_effectivity_assignment +applied_event_occurrence_assignment +applied_external_identification_assignment +applied_group_assignment +applied_identification_assignment +applied_independent_activity_property +applied_independent_property +applied_independent_resource_property +applied_ineffectivity_assignment +applied_information_usage_right +applied_library_assignment +applied_location_assignment +applied_location_representation_assignment +applied_name_assignment +applied_organization_assignment +applied_organizational_project_assignment +applied_person_and_organization_assignment +applied_person_assignment +applied_person_organization_assignment +applied_presented_item +applied_qualification_assignment +applied_security_classification_assignment +applied_state_assignment +applied_state_definition_assignment +applied_state_observed_assignment +applied_state_type_assignment +applied_time_interval_assignment +applied_usage_right +appropriate_list_value_existence +appropriate_set_value_existence +appropriate_value_existence +approval +approval_assignment +approval_date_time +approval_date_time_constraints +approval_item +approval_person_organization +approval_person_organization_constraints +approval_person_organization_requires_date_time +approval_relationship +approval_requires_approval_assignment +approval_requires_approval_date_time +approval_requires_approval_person_organization +approval_requires_assignment +approval_role +approval_status +approvals_are_assigned +approved_item +approving_person_organization +approximation_method +approximation_tolerance +approximation_tolerance_deviation +approximation_tolerance_parameter +arbitrary_volume_2d_element_coordinate_system +arbitrary_volume_3d_element_coordinate_system +area_component +area_component_shape_constraint +area_in_set +area_measure +area_measure_with_unit +area_or_view +area_qualified_layout_spacing_requirement +area_unit +area_unit_type +area_with_outer_boundary +arithmetic_number +arranged_individual +arrangement_of_individual +array_based_unstructured_mesh +array_based_unstructured_mesh_and_vertices +array_placement_group +as_required_quantity +ascribable_state +ascribable_state_relationship +asin_function +aspect_ratio +assembly_bond_definition +assembly_component +assembly_component_relationship +assembly_component_usage +assembly_component_usage_substitute +assembly_geometric_constraint +assembly_group_component +assembly_group_component_definition_placement_link +assembly_group_spacing_requirement +assembly_item_number +assembly_joint +assembly_leaf +assembly_module_component +assembly_module_design_view +assembly_module_interface_terminal +assembly_module_macro_component +assembly_module_macro_component_join_terminal +assembly_module_macro_terminal +assembly_module_terminal +assembly_module_usage_view +assembly_of_individual +assembly_relationship_substitution +assembly_root +assembly_shape_is_defined +assembly_shield_allocation +assembly_spacing_requirement +assembly_to_part_connectivity_structure_allocation +assigned_analysis +assigned_document_property +assigned_document_select +assigned_name_select +assigned_property +assigned_requirement +assoc_product_space +associated_surface +atan2 +atan_function +atom_based_literal +atom_based_tuple +atom_based_value +atomic_formula +attachment_slot +attachment_slot_as_planned +attachment_slot_as_realized +attachment_slot_definition +attachment_slot_design +attachment_slot_design_to_planned +attachment_slot_design_to_realized +attachment_slot_on_product +attachment_slot_planned_to_realized +attachment_slot_version +attribute_assertion +attribute_classification +attribute_classification_assignment +attribute_classification_item +attribute_identifier +attribute_language_assignment +attribute_language_item +attribute_translation_assignment +attribute_type +attribute_value_assignment +attribute_value_role +automotive_design +auxiliary_characteristic_dimension_representation +auxiliary_geometric_representation_item +axi_or_plane +axial_geometry_constraint_element +axis1_placement +axis2_placement +axis2_placement_2d +axis2_placement_3d +axis_placement +axis_placement_2d_3d_mapping +axis_placement_mapping +axis_placement_transformation_mapping +axisymmetric_2d_element_property +axisymmetric_curve_2d_element_descriptor +axisymmetric_curve_2d_element_representation +axisymmetric_surface_2d_element_descriptor +axisymmetric_surface_2d_element_representation +axisymmetric_volume_2d_element_descriptor +axisymmetric_volume_2d_element_representation +b_spline_basis +b_spline_curve +b_spline_curve_form +b_spline_curve_knot_locator +b_spline_curve_segment +b_spline_curve_with_knots +b_spline_function +b_spline_or_composite_curve_select +b_spline_or_rectangular_composite_surface_select +b_spline_surface +b_spline_surface_form +b_spline_surface_knot_locator +b_spline_surface_patch +b_spline_surface_strip +b_spline_surface_with_knots +back_boring_operation +back_chaining_rule +back_chaining_rule_body +background_colour +bag_to_set +banded_matrix +bare_die +bare_die_bottom_surface +bare_die_component +bare_die_edge_segment_surface +bare_die_edge_surface +bare_die_surface +bare_die_template_terminal +bare_die_terminal +bare_die_top_surface +barring_hole +base_axis +base_solid_select +basic_multi_stratum_printed_component +basic_multi_stratum_printed_part_template +basic_sparse_matrix +bead +bead_end +beginning +behavioural_decomposition_of_numerical_model +behavioural_decomposition_of_temporal_spatial_domain +between_shape_aspect +beveled_sheet_representation +bezier_curve +bezier_surface +binary_assembly_constraint +binary_boolean_expression +binary_function_call +binary_generic_expression +binary_literal +binary_numeric_expression +binary_representation_item +blank_fitting_classification +blend_end_condition_select +blend_radius_variation_type +blind_passage_template +blind_via +block +block_shape_representation +block_volume +bool +boolean_choose +boolean_defined_function +boolean_expression +boolean_literal +boolean_operand +boolean_operand_2d +boolean_operator +boolean_representation_item +boolean_result +boolean_result_2d +boolean_value +boolean_variable +boring_operation +boss +boss_top +bottom_and_side_milling_operation +bound_parameter_environment +bound_variable_semantics +bound_variational_parameter +boundary_aggregated_variable +boundary_curve +boundary_curve_of_b_spline_or_rectangular_composite_surface +boundary_curve_scalar_variable +boundary_curve_vector_3d_variable +boundary_edge_variable +boundary_of_number_space +boundary_of_property_space +boundary_surface_scalar_variable +boundary_surface_vector_3d_variable +boundary_variable +bounded_curve +bounded_pcurve +bounded_primitive_2d +bounded_surface +bounded_surface_curve +box_characteristic_select +box_domain +box_height +box_rotate_angle +box_slant_angle +box_width +boxed_half_space +breakdown +breakdown_context +breakdown_element +breakdown_element_definition +breakdown_element_group_assignment +breakdown_element_realization +breakdown_element_requires_product_definition +breakdown_element_usage +breakdown_element_version +breakdown_item +breakdown_of +breakdown_version +breakout_footprint_definition +breakout_occurrence +brep_with_voids +build_2axes +build_axes +build_direction_node +build_transformed_set +buried_via +bus_element_link +bus_structural_definition +bytes_representation_item +cable_component +cable_terminal +cable_usage_view +calculated_state +calendar_date +camera_image +camera_image_2d_with_scale +camera_image_3d_with_scale +camera_model +camera_model_d2 +camera_model_d3 +camera_model_d3_multi_clipping +camera_model_d3_multi_clipping_interection_select +camera_model_d3_multi_clipping_intersection +camera_model_d3_multi_clipping_union +camera_model_d3_multi_clipping_union_select +camera_model_d3_with_hlhsr +camera_model_with_light_sources +camera_usage +capacitance_measure +capacitance_measure_with_unit +capacitance_unit +cardinality +cartesian_complex_number_region +cartesian_coordinate_system_constraint +cartesian_point +cartesian_transformation +cartesian_transformation_2d +cartesian_transformation_3d +cartesian_transformation_operator +cartesian_transformation_operator_2d +cartesian_transformation_operator_3d +catalogue +catalogue_connector +catalogue_item +categories_of_product +category_in_tree +category_model_parameter +category_usage_item +cause_of_event +cc_classified_item +cc_design_approval +cc_design_certification +cc_design_contract +cc_design_date_and_time_assignment +cc_design_date_time_correlation +cc_design_person_and_organization_assignment +cc_design_person_and_organization_correlation +cc_design_security_classification +cc_design_specification_reference +cc_person_organization_item +cc_specified_item +cdgc_with_dimension +cell +cell_counts +cell_of_structured_mesh +cell_shape +cell_shape_0d +cell_shape_1d +cell_shape_2d +cell_shape_3d +cell_with_explicit_boundary +celsius_temperature_measure +celsius_temperature_measure_with_unit +central_or_parallel +centre_of_symmetry +certification +certification_assignment +certification_item +certification_requires_approval +certification_requires_date_time +certification_type +certified_item +chain_based_geometric_item_specific_usage +chain_based_item_identified_representation_usage +chained_representation_link +chamfer +chamfer_offset +chamfer_offset_requires_faces +chamfer_requires_faces +chamfer_requires_faces_or_features +change +change_action +change_action_requires_date +change_composition_relationship +change_delta_item +change_element +change_element_sequence +change_from_assignment +change_group +change_group_assignment +change_item +change_item_id_assignment +change_item_requires_creation_date +change_item_requires_id +change_life_cycle_stage_usage_requires_approval +change_life_cycle_stage_usage_requires_stage +change_management_object +change_relationship_select +change_request +change_request_item +change_request_requires_approval +change_request_requires_date_time +change_request_requires_person_organization +change_requires_approval +change_requires_date_time +change_to_assignment +character_glyph_font_usage +character_glyph_style_outline +character_glyph_style_stroke +character_glyph_symbol +character_glyph_symbol_outline +character_glyph_symbol_stroke +character_spacing_select +character_style_select +characteristic_data_column_header +characteristic_data_column_header_link +characteristic_data_table_header +characteristic_data_table_header_decomposition +characteristic_type +characterizable_object +characterized_action_definition +characterized_activity_definition +characterized_chain_based_item_within_representation +characterized_class +characterized_definition +characterized_item_within_representation +characterized_material_property +characterized_object +characterized_product_composition_value +characterized_product_definition +characterized_representation +characterized_resource_definition +characterized_resource_select +check_associative_shape_aspects +check_continuous_edges +check_curve_planarity +check_sparse_index_domain +check_sparse_index_to_loc +check_sparse_loc_range +check_text_alignment +check_text_font +choose_general_property_identifier +choose_geometry_location +choose_representation_context_identifier +circle +circular_area +circular_closed_profile +circular_path +circular_pattern +circular_runout_tolerance +clamp_mating_definition +clamp_position +class +class_assignment_is_valid +class_by_extension +class_by_intension +class_of_abstract_object +class_of_activity +class_of_approval +class_of_approval_by_status +class_of_arranged_individual +class_of_arrangement_of_individual +class_of_assembly_of_individual +class_of_assertion +class_of_atom +class_of_biological_matter +class_of_cause_of_beginning_of_class_of_individual +class_of_cause_of_ending_of_class_of_individual +class_of_class +class_of_class_of_composition +class_of_class_of_definition +class_of_class_of_description +class_of_class_of_identification +class_of_class_of_individual +class_of_class_of_information_representation +class_of_class_of_relationship +class_of_class_of_relationship_with_signature +class_of_class_of_representation +class_of_class_of_representation_translation +class_of_class_of_responsibility_for_representation +class_of_class_of_usage_of_representation +class_of_classification +class_of_composite_material +class_of_composition_of_individual +class_of_compound +class_of_connection_of_individual +class_of_containment_of_individual +class_of_definition +class_of_description +class_of_dimension_for_shape +class_of_direct_connection +class_of_event +class_of_express_information_representation +class_of_feature +class_of_feature_whole_part +class_of_functional_mapping +class_of_functional_object +class_of_identification +class_of_inanimate_physical_object +class_of_indirect_connection +class_of_indirect_property +class_of_individual +class_of_individual_used_in_connection +class_of_information_object +class_of_information_presentation +class_of_information_representation +class_of_intended_role_and_domain +class_of_involvement_by_reference +class_of_isomorphic_functional_mapping +class_of_left_namespace +class_of_lifecycle_stage +class_of_molecule +class_of_multidimensional_object +class_of_namespace +class_of_number +class_of_organism +class_of_organization +class_of_participation +class_of_particulate_material +class_of_period_in_time +class_of_person +class_of_point_in_time +class_of_possible_role_and_domain +class_of_property +class_of_property_space +class_of_recognition +class_of_relationship +class_of_relationship_with_related_end_1 +class_of_relationship_with_related_end_2 +class_of_relationship_with_signature +class_of_relative_location +class_of_representation_of_thing +class_of_representation_translation +class_of_responsibility_for_representation +class_of_right_namespace +class_of_scale +class_of_scale_conversion +class_of_shape +class_of_shape_dimension +class_of_specialization +class_of_status +class_of_sub_atomic_particle +class_of_temporal_sequence +class_of_temporal_whole_part +class_of_usage_of_representation +class_system +class_usage_effectivity_context_assignment +class_usage_effectivity_context_item +classification +classification_assignment +classification_item +classification_role +classified_attribute_select +classified_item +clgc_with_dimension +closed_curve_style_parameters +closed_or_open_shell_select +closed_path_profile +closed_shell +closed_shell_reversed +coaxial_assembly_constraint +coaxial_geometric_constraint +coaxiality_tolerance +collect_joints +collection +collection_assignment +collection_membership +collection_relationship +collection_version +collection_version_relationship +collection_version_sequence_relationship +collection_view_definition +colour +colour_rgb +colour_specification +common_datum +common_datum_list +compare_basis_and_coef +comparison_equal +comparison_expression +comparison_greater +comparison_greater_equal +comparison_less +comparison_less_equal +comparison_not_equal +comparison_of_property +compatible_complex_number_regions +compatible_dimension +compatible_es_values +compatible_intervals +compatible_spaces +complement +complex_area +complex_clause +complex_conjunctive_clause +complex_disjunctive_clause +complex_number_literal +complex_number_literal_polar +complex_passage_padstack_definition +complex_product_requires_product_definition +complex_shelled_solid +complex_triangulated_face +complex_triangulated_surface_set +component_2d_location +component_3d_location +component_class_for_assembly_select +component_definition +component_feature +component_feature_joint +component_feature_relationship +component_functional_terminal +component_functional_unit +component_material_relationship +component_material_relationship_assignment +component_material_relationship_assignment_item +component_mating_constraint_condition +component_mounting_feature +component_part_2d_non_planar_geometric_representation_relationship +component_path_shape_aspect +component_terminal +component_termination_passage +component_termination_passage_template +component_upper_level_identification +composable_sequence +composite_array_shape_aspect +composite_array_shape_aspect_link +composite_assembly_definition +composite_assembly_sequence_definition +composite_assembly_table +composite_curve +composite_curve_on_surface +composite_curve_segment +composite_curve_transition_locator +composite_group_shape_aspect +composite_hole +composite_material_designation +composite_shape_aspect +composite_sheet_representation +composite_signal_property_relationship +composite_text +composite_text_with_associated_curves +composite_text_with_blanking_box +composite_text_with_delineation +composite_text_with_extent +composite_unit_shape_aspect +composition_of_individual +composition_of_state +composition_of_state_definition +compound_feature +compound_features_of_equal_type +compound_inner_area_boundary +compound_item_definition +compound_representation_item +compound_shape_representation +compute_total_depth +concat_expression +concentricity_tolerance +concept_feature_operator +concept_feature_relationship +concept_feature_relationship_with_condition +concurrent_action_method +concurrent_elements +condition +condition_assignment +condition_evaluation +condition_evaluation_assignment +condition_evaluation_item +condition_evaluation_parameter +condition_evaluation_parameter_item +condition_item +condition_parameter +condition_parameter_item +condition_relationship +conditional_concept_feature +conditional_reverse +conductance_measure +conductance_measure_with_unit +conductance_unit +conductive_interconnect_element +conductive_interconnect_element_terminal_link +conductive_interconnect_element_with_pre_defined_transitions +config_control_design +configurable_item +configuration_definition +configuration_design +configuration_design_item +configuration_effectivity +configuration_interpolation +configuration_item +configuration_item_hierarchical_relationship +configuration_item_relationship +configuration_item_requires_approval +configuration_item_requires_person_organization +configuration_item_revision_sequence +configured_effectivity_assignment +configured_effectivity_context_assignment +configured_effectivity_context_item +configured_effectivity_item +conic +conical_stepped_hole_transition +conical_surface +connected_area_component +connected_edge_set +connected_face_set +connected_face_sub_set +connection_definition_items +connection_functional_classification +connection_items +connection_motion_classification +connection_node +connection_of_individual +connection_zone_based_assembly_joint +connection_zone_based_fabrication_joint +connection_zone_interface_plane_relationship +connection_zone_map_identification +connector_based_interconnect_definition +connector_end_type_classification +connector_on_item +consistent_element_or_group_reference +consistent_element_reference +consistent_geometric_reference +consistent_list_values +consistent_set_values +consistent_topological_reference +consistent_uncertainty +consistent_value +constant_function +constant_surface_3d_element_coordinate_system +constrained_kinematic_motion_representation +constraint_context +constraint_definition_requires_constraint_category +constraint_element +constraint_group_member +constraints_composite_curve_on_surface +constraints_geometry_shell_based_surface_model +constraints_geometry_shell_based_wireframe_model +constraints_param_b_spline +constraints_rectangular_composite_surface +constructive_geometry_representation +constructive_geometry_representation_or_shape_represenation +constructive_geometry_representation_relationship +contact_ratio_representation +contact_size_dependent_land +contacting_feature +containment_of_individual +content_item +context_dependent_action_method_relationship +context_dependent_action_relationship +context_dependent_invisibility +context_dependent_kinematic_link_representation +context_dependent_measure +context_dependent_over_riding_styled_item +context_dependent_shape_representation +context_dependent_unit +contextual_item_shape +contextual_shape_representation_inclusion +continuous_shape_aspect +continuous_template +contouring_turning_operation +contract +contract_assignment +contract_item +contract_relationship +contract_requires_approval +contract_requires_person_organization +contract_type +contracted_item +control +control_analysis_step +control_characters_free +control_linear_modes_and_frequencies_analysis_step +control_linear_modes_and_frequencies_process +control_linear_static_analysis_step +control_linear_static_analysis_step_with_harmonic +control_linear_static_load_increment_process +control_process +control_result_relationship +controller +controller_program +conversion_based_unit +convert_plane_angle_for_pair_from_radian +convert_spatial_to_ypr_rotation +convert_to_literal +convert_to_maths_function +convert_to_maths_value +convert_to_operand +convert_to_operands +convert_to_operands_prcmfn +convex_hexahedron +coordinate_data_name +coordinate_system +coordinate_system_type +coordinated_assembly_and_shape +coordinated_geometric_relationship_with_2d_3d_placement_transformation +coordinated_pair_link_representation +coordinated_universal_time_offset +coordinates_list +copy_stratum_technology_occurrence_relationship +cos_function +count_measure +counterbore_passage_template +countersunk_passage_template +cri +cross_product +crystalline_structure +csg_2d_area_select +csg_2d_shape_representation +csg_2d_shape_select +csg_primitive +csg_primitive_solid_2d +csg_select +csg_select_2d +csg_shape_representation +csg_solid +csg_solid_2d +ctmv +currency +currency_measure_with_unit +current_change_element_assignment +current_design_assignment +current_design_object_assignment +current_element_assignment_select +curve +curve_2d_element_basis +curve_2d_element_constant_specified_variable_value +curve_2d_element_constant_specified_volume_variable_value +curve_2d_element_coordinate_system +curve_2d_element_descriptor +curve_2d_element_field_variable_definition +curve_2d_element_group +curve_2d_element_integrated_matrix +curve_2d_element_integrated_matrix_with_definition +curve_2d_element_integration +curve_2d_element_location_point_variable_values +curve_2d_element_location_point_volume_variable_values +curve_2d_element_output_reference +curve_2d_element_property +curve_2d_element_representation +curve_2d_element_value_and_location +curve_2d_element_value_and_volume_location +curve_2d_node_field_aggregated_variable_values +curve_2d_node_field_section_variable_values +curve_2d_node_field_variable_definition +curve_2d_state_coordinate_system +curve_2d_substructure_element_reference +curve_2d_whole_element_variable_value +curve_3d_element_basis +curve_3d_element_constant_specified_variable_value +curve_3d_element_constant_specified_volume_variable_value +curve_3d_element_coordinate_system +curve_3d_element_descriptor +curve_3d_element_field_variable_definition +curve_3d_element_group +curve_3d_element_integrated_matrix +curve_3d_element_integrated_matrix_with_definition +curve_3d_element_integration +curve_3d_element_length_integration +curve_3d_element_length_integration_explicit +curve_3d_element_length_integration_rule +curve_3d_element_location_point_variable_values +curve_3d_element_location_point_volume_variable_values +curve_3d_element_nodal_specified_variable_values +curve_3d_element_output_reference +curve_3d_element_position_weight +curve_3d_element_property +curve_3d_element_representation +curve_3d_element_value_and_location +curve_3d_element_value_and_volume_location +curve_3d_node_field_aggregated_variable_values +curve_3d_node_field_section_variable_values +curve_3d_node_field_variable_definition +curve_3d_state_coordinate_system +curve_3d_substructure_element_reference +curve_3d_whole_element_variable_value +curve_based_path +curve_based_path_with_orientation +curve_based_path_with_orientation_and_parameters +curve_bounded_surface +curve_constraint +curve_dimension +curve_distance_geometric_constraint +curve_edge +curve_element_end_coordinate_system +curve_element_end_offset +curve_element_end_release +curve_element_end_release_packet +curve_element_freedom +curve_element_interval +curve_element_interval_constant +curve_element_interval_linearly_varying +curve_element_location +curve_element_purpose +curve_element_section_definition +curve_element_section_derived_definitions +curve_element_variable +curve_font_or_scaled_curve_font_select +curve_font_usage +curve_freedom_action_definition +curve_freedom_and_value_definition +curve_freedom_values +curve_length_geometric_constraint +curve_matrix_property_type +curve_on_surface +curve_or_annotation_curve_occurrence +curve_or_curve_set +curve_or_render +curve_or_surface_constraint_element +curve_replica +curve_scalar_variable +curve_section_element_location +curve_section_integration_explicit +curve_segment_set +curve_smoothness_geometric_constraint +curve_style +curve_style_font +curve_style_font_and_scaling +curve_style_font_pattern +curve_style_font_select +curve_style_parameters_representation +curve_style_parameters_with_ends +curve_style_rendering +curve_swept_solid_shape_representation +curve_tolerance_deviation +curve_tolerance_parameter +curve_vector_2d_variable +curve_vector_3d_variable +curve_volume_element_location +curve_weights_positive +curve_with_excessive_segments +curve_with_small_curvature_radius +curves_or_area +cutout +cutout_edge_segment +cyclide_segment_solid +cylindrical_harmonic_number +cylindrical_pair +cylindrical_pair_range +cylindrical_pair_value +cylindrical_pair_with_range +cylindrical_point +cylindrical_shape_representation +cylindrical_surface +cylindrical_symmetry_control +cylindrical_volume +cylindricity_tolerance +data_environment +data_environment_relationship +data_quality_assessment_measurement_association +data_quality_assessment_specification +data_quality_criteria_representation +data_quality_criterion +data_quality_criterion_assessment_association +data_quality_criterion_measurement_association +data_quality_definition +data_quality_definition_relationship +data_quality_definition_representation_relationship +data_quality_inspection_criterion_report +data_quality_inspection_criterion_report_item +data_quality_inspection_instance_report +data_quality_inspection_instance_report_item +data_quality_inspection_report +data_quality_inspection_result +data_quality_inspection_result_representation +data_quality_inspection_result_with_judgement +data_quality_measurement_requirement +data_quality_report_measurement_association +data_quality_report_request +date +date_and_time +date_and_time_assignment +date_and_time_item +date_assignment +date_item +date_or_date_time_assignment +date_or_date_time_item +date_or_date_time_select +date_or_event +date_representation_item +date_role +date_time +date_time_item +date_time_or_event_occurrence +date_time_representation_item +date_time_role +date_time_select +dated_effectivity +datum +datum_difference +datum_difference_based_characteristic +datum_difference_based_model_parameter +datum_difference_functional_unit_usage_view_terminal_assignment +datum_feature +datum_feature_callout +datum_or_common_datum +datum_reference +datum_reference_compartment +datum_reference_element +datum_reference_modifier +datum_reference_modifier_type +datum_reference_modifier_with_value +datum_system +datum_system_or_reference +datum_target +datum_target_callout +day_in_month_number +day_in_week_number +day_in_year_number +decision_point +decreasing_resource_event +default_attachment_size_based_land_physical_template +default_passage_based_land_physical_template +default_plated_passage_based_land_physical_template +default_tolerance_table +default_tolerance_table_cell +default_tolerance_table_cell_wr2 +default_tolerance_table_cell_wr3 +default_tolerance_table_cell_wr4 +default_tolerance_table_cell_wr5 +default_trace_template +default_unsupported_passage_based_land_physical_template +default_value_property_definition_representation +defined_activities +defined_attributes +defined_character_glyph +defined_constraint +defined_data_class +defined_data_name +defined_function +defined_glyph_select +defined_maths_space_context +defined_methods +defined_state_relationship +defined_symbol +defined_symbol_select +defining_action_method_relationship +definite_integral_check +definite_integral_expr_check +definite_integral_expression +definite_integral_function +definition +definition_for_temporal_spatial_domain +definitional_representation +definitional_representation_relationship +definitional_representation_relationship_with_same_context +degenerate_pcurve +degenerate_toroidal_surface +degree_of_freedom +delete_element +dependent_electrical_isolation_removal_component +dependent_electrical_isolation_removal_template +dependent_instantiable_action_directive +dependent_instantiable_action_resource_type +dependent_instantiable_application_context +dependent_instantiable_approval_role +dependent_instantiable_approval_status +dependent_instantiable_attribute_value_role +dependent_instantiable_certification_type +dependent_instantiable_classification_role +dependent_instantiable_colour_rgb +dependent_instantiable_contract_type +dependent_instantiable_curve_style +dependent_instantiable_date +dependent_instantiable_date_and_time +dependent_instantiable_date_role +dependent_instantiable_date_time_role +dependent_instantiable_derived_unit +dependent_instantiable_dimensional_size +dependent_instantiable_document_type +dependent_instantiable_document_usage_role +dependent_instantiable_effectivity_context_role +dependent_instantiable_event_occurrence_role +dependent_instantiable_externally_defined_symbol +dependent_instantiable_fill_area_style +dependent_instantiable_fill_area_style_colour +dependent_instantiable_identification_role +dependent_instantiable_measure_with_unit +dependent_instantiable_named_unit +dependent_instantiable_object_role +dependent_instantiable_organization_role +dependent_instantiable_organizational_project_role +dependent_instantiable_parametric_representation_context +dependent_instantiable_person_and_organization_role +dependent_instantiable_pre_defined_colour +dependent_instantiable_pre_defined_symbol +dependent_instantiable_precision_qualifier +dependent_instantiable_presentation_style_by_context +dependent_instantiable_product_context +dependent_instantiable_product_definition_context +dependent_instantiable_product_definition_context_role +dependent_instantiable_representation_item +dependent_instantiable_resource_requirement_type +dependent_instantiable_retention +dependent_instantiable_security_classification_level +dependent_instantiable_shape_representation +dependent_instantiable_standard_uncertainty +dependent_instantiable_symbol_colour +dependent_instantiable_text_style +dependent_instantiable_text_style_for_defined_font +dependent_instantiable_time_interval_role +dependent_instantiable_tolerance_value +dependent_instantiable_type_qualifier +dependent_instantiable_uncertainty_qualifier +dependent_thermal_isolation_removal_component +dependent_thermal_isolation_removal_template +dependent_variable_definition +dependently_instantiated +derive_angle +derive_definite_integral_domain +derive_dimensional_exponents +derive_elementary_function_domain +derive_elementary_function_range +derive_finite_function_domain +derive_finite_function_range +derive_function_domain +derive_function_range +derived_laminate_assignment +derived_property_select +derived_shape_aspect +derived_stratum +derived_stratum_technology_occurrence_relationship +derived_unit +derived_unit_element +derived_unit_variable +description +description_attribute +description_attribute_select +descriptive_colour +descriptive_document_property +descriptive_measure +descriptive_or_numerical +descriptive_representation_item +design_composition_path +design_constraint_requires_product_definition +design_context +design_context_for_property +design_layer_stratum +design_make_from_relationship +design_object_management_assignment +design_object_management_relationship_action +design_project +design_project_assignment +design_project_item +design_specific_stratum_technology_mapping_relationship +design_stack_model +detailed_geometric_model_element +detailed_report_request +detailed_report_request_with_number_of_data +detailed_report_type +device_terminal_map +diameter_dimension +dielectric_constant_measure_with_unit +dielectric_crossover_area +dielectric_material_passage +difference_of_set_of_class +digital_analytical_model_port +digital_analytical_model_scalar_port +digital_analytical_model_vector_port +digital_document_definition +digital_file +dimension_callout +dimension_callout_component_relationship +dimension_callout_relationship +dimension_count +dimension_curve +dimension_curve_directed_callout +dimension_curve_terminator +dimension_curve_terminator_to_projection_curve_associativity +dimension_extent_usage +dimension_of +dimension_of_individual +dimension_of_shape +dimension_pair +dimension_related_tolerance_zone_element +dimension_text_associativity +dimensional_characteristic +dimensional_characteristic_representation +dimensional_exponents +dimensional_inspection_schema +dimensional_location +dimensional_location_with_datum_feature +dimensional_location_with_path +dimensional_measurement_representation +dimensional_size +dimensional_size_property +dimensional_size_with_datum_feature +dimensional_size_with_path +dimensionality_is_two_or_three +dimensioning_data_requires_document +dimensions_for_si_unit +direct_connection +direct_stratum_component_join_implementation +directed_action +directed_activity +directed_angle +directed_dimensional_location +direction +direction_count_select +direction_node +direction_shape_representation +directionally_explicit_element_coefficient +directionally_explicit_element_coordinate_system +directionally_explicit_element_coordinate_system_aligned +directionally_explicit_element_coordinate_system_arbitrary +directionally_explicit_element_representation +disallowed_assembly_relationship_usage +disconnected_face_set +discontinuous_geometry +discretised_action_model_select +discretised_distribution_model_select +discretised_product_model_select +discretised_state_model_select +distribution_by_value +distribution_view_relationship +div_expression +dm_analysis_dofs_dml +dm_dimension_parameter +dm_execution_result +dm_execution_result_measurement +dm_feature_analysis_mode_dml +dm_feature_definition +dm_feature_relationship +dm_instanced_feature +dm_parameter_analysis_dml +dm_parameter_value_limits +dm_point +dm_point_parameter +dm_program_identification +dm_program_run +dm_result_parameter +dm_shape_representation_with_parameters +dm_tolerance_analysis_mode_dml +dm_vector_parameter +dmf_arc +dmf_circle +dmf_cone +dmf_cylinder +dmf_edge_point +dmf_ellipse +dmf_generic_feature +dmf_geometric_curve +dmf_geometric_surface +dmf_line_bounded +dmf_line_closed_parallel +dmf_line_unbounded +dmf_pattern +dmf_plane +dmf_plane_closed_parallel +dmf_plane_symmetric +dmf_point +dmf_sphere +dmf_surface_of_revolution_dml +dmf_torus +document +document_assignment +document_definition +document_definition_constraint +document_definition_relationship +document_file +document_file_properties +document_identifier +document_identifier_assigned_item +document_identifier_assignment +document_item +document_location_identification +document_product_association +document_product_equivalence +document_property_item +document_property_representation +document_reference +document_reference_item +document_relationship +document_representation_type +document_to_product_definition +document_type +document_usage_constraint +document_usage_constraint_assignment +document_usage_constraint_item +document_usage_role +document_version +document_version_constraint +document_with_class +documentation_layer_stratum +documented_element_select +domain_from +domain_property +dose_equivalent_measure +dose_equivalent_measure_with_unit +dose_equivalent_unit +dot_count +dot_product +dotted_express_identifier +dotted_identifiers_syntax +double_offset_shelled_solid +draped_defined_transformation +draughting_annotation_occurrence +draughting_callout +draughting_callout_element +draughting_callout_relationship +draughting_elements +draughting_model +draughting_model_item_association +draughting_model_item_association_select +draughting_model_item_definition +draughting_model_item_select +draughting_model_items_constraint +draughting_pre_defined_colour +draughting_pre_defined_curve_font +draughting_pre_defined_text_font +draughting_specification_reference +draughting_subfigure_representation +draughting_subfigure_representation_item +draughting_subfigure_representation_layers +draughting_symbol_representation +draughting_symbol_representation_item +draughting_text_literal_with_delineation +draughting_title +draughting_titled_item +drawing +drawing_definition +drawing_revision +drawing_revision_sequence +drawing_sheet_annotation_layers +drawing_sheet_layout +drawing_sheet_layout_usage +drawing_sheet_revision +drawing_sheet_revision_sequence +drawing_sheet_revision_usage +drawing_view_annotation_layers +drilling_operation +drilling_type_operation +drilling_type_strategy +drop_numeric_constraints +ducting_system +dummy_node +duration +duration_is_negative +duration_is_positive +eccentric_cone +edge +edge_based_wireframe_model +edge_based_wireframe_shape_representation +edge_blended_solid +edge_curve +edge_loop +edge_or_curve +edge_reversed +edge_round +edge_round_requires_faces +edge_round_requires_faces_or_features +edge_segment_cross_section +edge_segment_vertex +edge_with_excessive_segments +effectivity +effectivity_assignment +effectivity_context_assignment +effectivity_context_role +effectivity_item +effectivity_relationship +effectivity_requires_approval +elbow_fitting_classification +electric_charge_measure +electric_charge_measure_with_unit +electric_charge_unit +electric_current_measure +electric_current_measure_with_unit +electric_current_unit +electric_potential_measure +electric_potential_measure_with_unit +electric_potential_unit +electrical_connector_classification +electrical_isolation_laminate_component +electrical_isolation_removal_template +electrical_network +electrical_system +electromagnetic_compatibility_requirement_allocation +element_2d_shape +element_analysis_message +element_aspect +element_constraint +element_definition +element_delivery +element_descriptor +element_geometric_relationship +element_group +element_group_analysis_message +element_integration_algebraic +element_material +element_nodal_freedom_actions +element_nodal_freedom_terms +element_or_element_group +element_order +element_representation +element_sequence +element_topological_relationship +element_volume +elementary_brep_shape_representation +elementary_function +elementary_function_enumerators +elementary_space +elementary_space_enumerators +elementary_surface +elements_bc +ellipse +ellipsoid +elliptic_area +enclose_cregion_in_pregion +enclose_pregion_in_cregion +enclose_pregion_in_pregion +end_task +ending +energy_measure +energy_measure_with_unit +energy_unit +engineering_properties_schema +entirely_narrow_face +entirely_narrow_solid +entirely_narrow_surface +entity_assertion +enum_reference_prefix +enumerated_curve_element_freedom +enumerated_curve_element_purpose +enumerated_curve_matrix_property_type +enumerated_degree_of_freedom +enumerated_matrix_property_type +enumerated_number_set +enumerated_plane_2d_element_purpose +enumerated_property_set +enumerated_set_of_class +enumerated_surface_element_purpose +enumerated_surface_matrix_property_type +enumerated_volume_element_purpose +envelope +envelope_relationship +environment +equal_cregion_pregion +equal_maths_functions +equal_maths_spaces +equal_maths_values +equal_parameter_constraint +equals_expression +equivalent_stackup_model_definition +equivalent_sub_stack_definition +erroneous_b_spline_curve_definition +erroneous_b_spline_surface_definition +erroneous_data +erroneous_geometry +erroneous_manifold_solid_brep +erroneous_topology +erroneous_topology_and_geometry_relationship +es_subspace_of_es +euler_angles +evaluated_characteristic +evaluated_characteristic_of_product_as_individual_test_result +evaluated_degenerate_pcurve +evaluation_product_definition +event +event_assignment +event_item +event_occurred_item +event_occurrence +event_occurrence_assignment +event_occurrence_context_assignment +event_occurrence_context_role +event_occurrence_item +event_occurrence_relationship +event_occurrence_requires_event_occurrence_assignment +event_occurrence_role +event_relationship +excessive_use_of_groups +excessive_use_of_layers +excessively_high_degree_curve +excessively_high_degree_surface +exclusive_product_concept_feature_category +executed_action +executed_action_requires_action_status +exit_loop +exp_function +expanded_uncertainty +experience_gained +experience_instance +experience_type +experience_type_relationship +explicit_constraint +explicit_element_matrix +explicit_element_representation +explicit_geometric_constraint +explicit_procedural_geometric_representation_item_relationship +explicit_procedural_representation_item_relationship +explicit_procedural_representation_relationship +explicit_procedural_shape_representation_relationship +explicit_table_function +explicit_unstructured_mesh +express_binary +express_boolean +express_identifier +express_integer +express_logical +express_real +express_string +expression +expression_conversion_based_unit +expression_denoted_function +expression_extension_numeric +expression_extension_select +expression_extension_string +expression_extension_to_select +expression_is_constant +expression_representation_item +extended_tuple_space +extension +extension_options +extent +external_class +external_class_library +external_geometric_model +external_identification_assignment +external_identification_item +external_item_identification +external_referent_assignment +external_source +external_source_identification +external_source_relationship +external_version_assignment_is_valid +external_version_assignments_are_valid +externally_conditioned_data_quality_criteria_representation +externally_conditioned_data_quality_criterion +externally_conditioned_data_quality_inspection_instance_report_item +externally_conditioned_data_quality_inspection_result +externally_conditioned_data_quality_inspection_result_representation +externally_defined_action_property +externally_defined_character_glyph +externally_defined_class +externally_defined_class_with_known_source_requirement +externally_defined_classification +externally_defined_colour +externally_defined_context_dependent_unit +externally_defined_conversion_based_unit +externally_defined_currency +externally_defined_curve_font +externally_defined_dimension_definition +externally_defined_engineering_property +externally_defined_feature_definition +externally_defined_general_property +externally_defined_hatch_style +externally_defined_item +externally_defined_item_relationship +externally_defined_item_with_multiple_references +externally_defined_marker +externally_defined_physical_network_group +externally_defined_physical_network_group_element_relationship +externally_defined_picture_representation_item +externally_defined_plant_item_definition +externally_defined_product_definition +externally_defined_representation +externally_defined_representation_item +externally_defined_representation_with_parameters +externally_defined_schema +externally_defined_string +externally_defined_style +externally_defined_symbol +externally_defined_terminator_symbol +externally_defined_text_font +externally_defined_tile +externally_defined_tile_style +externally_listed_data +extract_factors +extraction_of_structured_submesh +extraction_of_submesh +extraction_of_submesh_by_cells +extraction_of_submesh_by_vertices +extremal_position_check +extreme_instance +extreme_patch_width_variation +extruded_area_solid +extruded_face_solid +extruded_face_solid_with_draft_angle +extruded_face_solid_with_multiple_draft_angles +extruded_face_solid_with_trim_conditions +fabrication_joint +face +face_based_surface_model +face_bound +face_bound_reversed +face_or_surface +face_outer_bound +face_reversed +face_shape_representation +face_shape_representation_relationship +face_surface +face_surface_with_excessive_patches_in_one_direction +faceted_brep +faceted_brep_shape_representation +faceted_primitive +facing_turning_operation +fact_type +factor1 +factor_space +fd_bc +fd_bc_dataset +fd_bc_type_simple +fd_behaviour_models +fd_defined_data_name +fd_diffusion_equation +fd_diffusion_model +fd_governing_equation +fd_governing_equation_type +fd_nondimensional_parameter_name +fd_step +fd_zone +fd_zone_bc +fea_area_density +fea_axis2_placement_2d +fea_axis2_placement_3d +fea_beam_section_idealisation_relationship +fea_column_normalised_monoclinic_symmetric_tensor4_3d +fea_column_normalised_orthotropic_symmetric_tensor4_3d +fea_curve_section_geometric_relationship +fea_group +fea_group_relation +fea_iso_orthotropic_symmetric_tensor4_3d +fea_isotropic_symmetric_tensor4_3d +fea_linear_elasticity +fea_mass_density +fea_material_property_geometric_relationship +fea_material_property_representation +fea_material_property_representation_item +fea_model +fea_model_2d +fea_model_3d +fea_model_definition +fea_model_topological_relationship +fea_moisture_absorption +fea_parametric_point +fea_representation_item +fea_secant_coefficient_of_linear_thermal_expansion +fea_shell_bending_stiffness +fea_shell_membrane_bending_coupling_stiffness +fea_shell_membrane_stiffness +fea_shell_section_distribution_idealisation_relationship +fea_shell_section_idealisation_relationship +fea_shell_shear_stiffness +fea_surface_section_geometric_relationship +fea_tangential_coefficient_of_linear_thermal_expansion +fea_transverse_isotropic_symmetric_tensor4_3d +feature_component_definition +feature_component_relationship +feature_definition +feature_definition_with_connection_area +feature_dependency +feature_for_datum_target_relationship +feature_identification_item +feature_in_panel +feature_interaction +feature_optional_machining_property_process +feature_pattern +feature_whole_part +featured_shape +fedex +fiducial +fiducial_part_feature +fiducial_stratum_feature +field_value +field_variable_definition +field_variable_element_definition +field_variable_element_group_value +field_variable_node_definition +field_variable_whole_model_value +file +file_location_identification +file_relationship +fill_area_style +fill_area_style_colour +fill_area_style_hatching +fill_area_style_tile_coloured_region +fill_area_style_tile_curve_with_style +fill_area_style_tile_shape_select +fill_area_style_tile_symbol_constraint +fill_area_style_tile_symbol_with_style +fill_area_style_tiles +fill_area_template +fill_style_select +filled_via +fillet +find_aminmax +find_assembly_root +find_representative_shape_representation_of_product_definition +find_representative_shape_representation_of_shape_aspect +find_shape_representation_of_product_definition +find_shape_representation_of_shape_aspect +finite_function +finite_integer_interval +finite_real_interval +finite_space +first_proj_axis +fixed_constituent_assembly_constraint +fixed_element_geometric_constraint +fixed_instance_attribute_set +fixture_assembly +fixture_assembly_element +fixture_assembly_relationship +fixture_contract +fixture_pallet_mounting +fixture_pallet_unmounting +fixture_setup +flange_fitting_classification +flange_fitting_neck_type_classification +flat_face +flat_pattern_ply_representation_relationship +flatness_tolerance +flow_equation_set +flow_solution_data_name +font_select +footprint_definition +footprint_library_stratum_technology +footprint_occurrence +footprint_occurrence_product_definition_relationship +force_measure +force_measure_with_unit +force_moment_data_name +force_unit +format_function +forward_chaining_rule +forward_chaining_rule_premise +founded_item +founded_item_select +founded_kinematic_path +frame_associated_to_background +free_edge +free_form_assignment +free_form_constraint +free_form_relation +free_kinematic_motion_representation +free_variable_semantics +free_variables_of +freedom_and_coefficient +freedoms_list +freeform_milling_operation +freeform_milling_strategy +freeform_milling_tolerance_representation +frequency_measure +frequency_measure_with_unit +frequency_unit +frozen_assignment +full_model_change_completeness_for_action_property +full_model_change_completeness_for_property_definition +fully_constrained_pair +func +function_applicability +function_application +function_is_1d_array +function_is_1d_table +function_is_2d_table +function_is_array +function_is_table +function_space +function_value_pair +functional_breakdown +functional_breakdown_context +functional_breakdown_version +functional_element +functional_element_definition +functional_element_usage +functional_element_version +functional_mapping +functional_physical_object +functional_specification +functional_specification_definition +functional_terminal_group +functional_unit +functional_unit_terminal_definition +functionally_defined_transformation +g1_discontinuity_between_adjacent_faces +g1_discontinuous_curve +g1_discontinuous_surface +g2_discontinuity_between_adjacent_faces +g2_discontinuous_curve +g2_discontinuous_surface +gap_between_adjacent_edges_in_loop +gap_between_edge_and_base_surface +gap_between_faces_related_to_an_edge +gap_between_pcurves_related_to_an_edge +gap_between_vertex_and_base_surface +gap_between_vertex_and_edge +gas_model +gas_model_data_name +gas_model_type +gbsf_check_curve +gbsf_check_point +gbsf_check_surface +gear +gear_pair +gear_pair_range +gear_pair_value +gear_pair_with_range +general_datum_reference +general_feature +general_linear_function +general_material_property +general_property +general_property_association +general_property_relationship +generalized_surface_select +generated_finite_numeric_space +generic_character_glyph_symbol +generic_expression +generic_footprint_definition +generic_laminate_text_component +generic_literal +generic_manufacturing_resource +generic_product_definition_reference +generic_variable +geometric_alignment +geometric_constraint_element +geometric_contact +geometric_coordinate_space +geometric_curve_set +geometric_gap_in_topology +geometric_intersection +geometric_item_specific_usage +geometric_item_specific_usage_select +geometric_mapping_target +geometric_model +geometric_model_element_relationship +geometric_model_item +geometric_node +geometric_representation_context +geometric_representation_context_with_parameter +geometric_representation_item +geometric_representation_item_3d +geometric_set +geometric_set_replica +geometric_set_select +geometric_template +geometric_tolerance +geometric_tolerance_group +geometric_tolerance_modifier +geometric_tolerance_relationship +geometric_tolerance_subtype_exclusiveness +geometric_tolerance_target +geometric_tolerance_with_datum_reference +geometric_tolerance_with_defined_area_unit +geometric_tolerance_with_defined_unit +geometric_tolerance_with_maximum_tolerance +geometric_tolerance_with_modifiers +geometrical_tolerance_callout +geometrically_bounded_2d_wireframe_representation +geometrically_bounded_surface_shape_representation +geometrically_bounded_wireframe_shape_representation +geometry_reference +geometry_with_local_irregularity +geometry_with_local_near_degeneracy +get_action_property +get_associated_mandatory_document_ids +get_basis_surface +get_count_of_relating_amr +get_count_of_relating_amr_with_name +get_description_value +get_diameter_for_round_hole +get_directed_link +get_id_value +get_kinematic_joints_from_kinematic_loops +get_kinematic_joints_from_oriented_joints +get_multi_language +get_name_value +get_plane_of_implicit_geometry +get_property_definition_representations +get_relating_amr +get_relative_direction_2points +get_resource_property +get_role +get_round_holes_for_composite_hole +get_shape_aspect_property_definition_representations +get_shape_aspects +global_assignment +global_length_and_angle_units_2d_or_3d +global_location_representation +global_uncertainty_assigned_context +global_unit_assigned_context +global_unit_assignment +good_t +grid_coordinates +grid_coordinates_with_rind +grooving_turning_operation +ground_fact +grounded_damper +grounded_spring +group +group_assignment +group_item +group_product_definition +group_relationship +group_shape_aspect +groupable_item +guided_wave_terminal +half_space_2d +half_space_solid +hardcopy +hardness_representation +has_values_space +hatch_area_template +hatch_line_element +heat_tracing_representation +hidden_element_over_riding_styled_item +hierarchical_interface_connection +high_degree_axi_symmetric_surface +high_degree_conic +high_degree_linear_curve +high_degree_planar_surface +high_order_kinematic_pair +hole_bottom +hole_in_panel +homogeneous_linear_function +homokinetic_pair +hour_in_day +hybrid_breakdown +hybrid_breakdown_context +hybrid_breakdown_version +hybrid_element_usage +hybrid_shape_representation +hyperbola +id_attribute +id_attribute_select +idealisation_relationship +idealised_action_select +idealised_distribution_select +idealised_product_select +idealised_state_select +identification +identification_assignment +identification_assignment_item +identification_assignment_relationship +identification_item +identification_role +identifier +ifc2dcompositecurve +ifc2x3 +ifc4 +ifcabsorbeddosemeasure +ifcaccelerationmeasure +ifcactionrequest +ifcactionrequesttypeenum +ifcactionsourcetypeenum +ifcactiontypeenum +ifcactor +ifcactorrole +ifcactorselect +ifcactuator +ifcactuatortype +ifcactuatortypeenum +ifcaddress +ifcaddresstypeenum +ifcaddtobeginoflist +ifcadvancedbrep +ifcadvancedbrepwithvoids +ifcadvancedface +ifcaheadorbehind +ifcairterminal +ifcairterminalbox +ifcairterminalboxtype +ifcairterminalboxtypeenum +ifcairterminaltype +ifcairterminaltypeenum +ifcairtoairheatrecovery +ifcairtoairheatrecoverytype +ifcairtoairheatrecoverytypeenum +ifcalarm +ifcalarmtype +ifcalarmtypeenum +ifcamountofsubstancemeasure +ifcanalysismodeltypeenum +ifcanalysistheorytypeenum +ifcangulardimension +ifcangularvelocitymeasure +ifcannotation +ifcannotationcurveoccurrence +ifcannotationfillarea +ifcannotationfillareaoccurrence +ifcannotationoccurrence +ifcannotationsurface +ifcannotationsurfaceoccurrence +ifcannotationsymboloccurrence +ifcannotationtextoccurrence +ifcapplication +ifcappliedvalue +ifcappliedvaluerelationship +ifcappliedvalueselect +ifcapproval +ifcapprovalactorrelationship +ifcapprovalpropertyrelationship +ifcapprovalrelationship +ifcarbitraryclosedprofiledef +ifcarbitraryopenprofiledef +ifcarbitraryprofiledefwithvoids +ifcareadensitymeasure +ifcareameasure +ifcarithmeticoperatorenum +ifcassemblyplaceenum +ifcasset +ifcasymmetricishapeprofiledef +ifcaudiovisualappliance +ifcaudiovisualappliancetype +ifcaudiovisualappliancetypeenum +ifcaxis1placement +ifcaxis2placement +ifcaxis2placement2d +ifcaxis2placement3d +ifcbaseaxis +ifcbeam +ifcbeamstandardcase +ifcbeamtype +ifcbeamtypeenum +ifcbenchmarkenum +ifcbendingparameterselect +ifcbeziercurve +ifcblobtexture +ifcblock +ifcboiler +ifcboilertype +ifcboilertypeenum +ifcboolean +ifcbooleanchoose +ifcbooleanclippingresult +ifcbooleanoperand +ifcbooleanoperator +ifcbooleanresult +ifcboundarycondition +ifcboundarycurve +ifcboundaryedgecondition +ifcboundaryfacecondition +ifcboundarynodecondition +ifcboundarynodeconditionwarping +ifcboundedcurve +ifcboundedsurface +ifcboundingbox +ifcboxalignment +ifcboxedhalfspace +ifcbsplinecurve +ifcbsplinecurveform +ifcbsplinecurvewithknots +ifcbsplinesurface +ifcbsplinesurfaceform +ifcbsplinesurfacewithknots +ifcbuild2axes +ifcbuildaxes +ifcbuilding +ifcbuildingelement +ifcbuildingelementcomponent +ifcbuildingelementpart +ifcbuildingelementparttype +ifcbuildingelementparttypeenum +ifcbuildingelementproxy +ifcbuildingelementproxytype +ifcbuildingelementproxytypeenum +ifcbuildingelementtype +ifcbuildingstorey +ifcbuildingsystem +ifcbuildingsystemtypeenum +ifcburner +ifcburnertype +ifcburnertypeenum +ifccablecarrierfitting +ifccablecarrierfittingtype +ifccablecarrierfittingtypeenum +ifccablecarriersegment +ifccablecarriersegmenttype +ifccablecarriersegmenttypeenum +ifccablefitting +ifccablefittingtype +ifccablefittingtypeenum +ifccablesegment +ifccablesegmenttype +ifccablesegmenttypeenum +ifccalendardate +ifccardinalpointreference +ifccartesianpoint +ifccartesianpointlist +ifccartesianpointlist3d +ifccartesiantransformationoperator +ifccartesiantransformationoperator2d +ifccartesiantransformationoperator2dnonuniform +ifccartesiantransformationoperator3d +ifccartesiantransformationoperator3dnonuniform +ifccenterlineprofiledef +ifcchamferedgefeature +ifcchangeactionenum +ifccharacterstyleselect +ifcchiller +ifcchillertype +ifcchillertypeenum +ifcchimney +ifcchimneytype +ifcchimneytypeenum +ifccircle +ifccirclehollowprofiledef +ifccircleprofiledef +ifccivilelement +ifccivilelementtype +ifcclassification +ifcclassificationitem +ifcclassificationitemrelationship +ifcclassificationnotation +ifcclassificationnotationfacet +ifcclassificationnotationselect +ifcclassificationreference +ifcclassificationreferenceselect +ifcclassificationselect +ifcclosedshell +ifccoil +ifccoiltype +ifccoiltypeenum +ifccolour +ifccolourorfactor +ifccolourrgb +ifccolourrgblist +ifccolourspecification +ifccolumn +ifccolumnstandardcase +ifccolumntype +ifccolumntypeenum +ifccommunicationsappliance +ifccommunicationsappliancetype +ifccommunicationsappliancetypeenum +ifccomplexnumber +ifccomplexproperty +ifccomplexpropertytemplate +ifccomplexpropertytemplatetypeenum +ifccompositecurve +ifccompositecurveonsurface +ifccompositecurvesegment +ifccompositeprofiledef +ifccompoundplaneanglemeasure +ifccompressor +ifccompressortype +ifccompressortypeenum +ifccondenser +ifccondensertype +ifccondensertypeenum +ifccondition +ifcconditioncriterion +ifcconditioncriterionselect +ifcconic +ifcconnectedfaceset +ifcconnectioncurvegeometry +ifcconnectiongeometry +ifcconnectionpointeccentricity +ifcconnectionpointgeometry +ifcconnectionportgeometry +ifcconnectionsurfacegeometry +ifcconnectiontypeenum +ifcconnectionvolumegeometry +ifcconstraint +ifcconstraintaggregationrelationship +ifcconstraintclassificationrelationship +ifcconstraintenum +ifcconstraintrelationship +ifcconstraintsparambspline +ifcconstructionequipmentresource +ifcconstructionequipmentresourcetype +ifcconstructionequipmentresourcetypeenum +ifcconstructionmaterialresource +ifcconstructionmaterialresourcetype +ifcconstructionmaterialresourcetypeenum +ifcconstructionproductresource +ifcconstructionproductresourcetype +ifcconstructionproductresourcetypeenum +ifcconstructionresource +ifcconstructionresourcetype +ifccontext +ifccontextdependentmeasure +ifccontextdependentunit +ifccontrol +ifccontroller +ifccontrollertype +ifccontrollertypeenum +ifcconversionbasedunit +ifcconversionbasedunitwithoffset +ifcconvertdirectioninto2d +ifccooledbeam +ifccooledbeamtype +ifccooledbeamtypeenum +ifccoolingtower +ifccoolingtowertype +ifccoolingtowertypeenum +ifccoordinateduniversaltimeoffset +ifccoordinateoperation +ifccoordinatereferencesystem +ifccoordinatereferencesystemselect +ifccorrectdimensions +ifccorrectfillareastyle +ifccorrectlocalplacement +ifccorrectobjectassignment +ifccorrectunitassignment +ifccostitem +ifccostitemtypeenum +ifccostschedule +ifccostscheduletypeenum +ifccostvalue +ifccountmeasure +ifccovering +ifccoveringtype +ifccoveringtypeenum +ifccranerailashapeprofiledef +ifccranerailfshapeprofiledef +ifccrewresource +ifccrewresourcetype +ifccrewresourcetypeenum +ifccrossproduct +ifccsgprimitive3d +ifccsgselect +ifccsgsolid +ifccshapeprofiledef +ifccurrencyenum +ifccurrencyrelationship +ifccurtainwall +ifccurtainwalltype +ifccurtainwalltypeenum +ifccurvaturemeasure +ifccurve +ifccurveboundedplane +ifccurveboundedsurface +ifccurvedim +ifccurvefontorscaledcurvefontselect +ifccurveinterpolationenum +ifccurveonsurface +ifccurveoredgecurve +ifccurvestyle +ifccurvestylefont +ifccurvestylefontandscaling +ifccurvestylefontpattern +ifccurvestylefontselect +ifccurveweightspositive +ifccylindricalsurface +ifcdamper +ifcdampertype +ifcdampertypeenum +ifcdataoriginenum +ifcdate +ifcdateandtime +ifcdatetime +ifcdatetimeselect +ifcdayinmonthnumber +ifcdayinweeknumber +ifcdaylightsavinghour +ifcdefinedsymbol +ifcdefinedsymbolselect +ifcdefinitionselect +ifcderivedimensionalexponents +ifcderivedmeasurevalue +ifcderivedprofiledef +ifcderivedunit +ifcderivedunitelement +ifcderivedunitenum +ifcdescriptivemeasure +ifcdiameterdimension +ifcdimensionalexponents +ifcdimensioncalloutrelationship +ifcdimensioncount +ifcdimensioncurve +ifcdimensioncurvedirectedcallout +ifcdimensioncurveterminator +ifcdimensionextentusage +ifcdimensionpair +ifcdimensionsforsiunit +ifcdirection +ifcdirectionsenseenum +ifcdiscreteaccessory +ifcdiscreteaccessorytype +ifcdiscreteaccessorytypeenum +ifcdistributionchamberelement +ifcdistributionchamberelementtype +ifcdistributionchamberelementtypeenum +ifcdistributioncircuit +ifcdistributioncontrolelement +ifcdistributioncontrolelementtype +ifcdistributionelement +ifcdistributionelementtype +ifcdistributionflowelement +ifcdistributionflowelementtype +ifcdistributionport +ifcdistributionporttypeenum +ifcdistributionsystem +ifcdistributionsystemenum +ifcdocumentconfidentialityenum +ifcdocumentelectronicformat +ifcdocumentinformation +ifcdocumentinformationrelationship +ifcdocumentreference +ifcdocumentselect +ifcdocumentstatusenum +ifcdoor +ifcdoorliningproperties +ifcdoorpaneloperationenum +ifcdoorpanelpositionenum +ifcdoorpanelproperties +ifcdoorstandardcase +ifcdoorstyle +ifcdoorstyleconstructionenum +ifcdoorstyleoperationenum +ifcdoortype +ifcdoortypeenum +ifcdoortypeoperationenum +ifcdoseequivalentmeasure +ifcdotproduct +ifcdraughtingcallout +ifcdraughtingcalloutelement +ifcdraughtingcalloutrelationship +ifcdraughtingpredefinedcolour +ifcdraughtingpredefinedcurvefont +ifcdraughtingpredefinedtextfont +ifcductfitting +ifcductfittingtype +ifcductfittingtypeenum +ifcductsegment +ifcductsegmenttype +ifcductsegmenttypeenum +ifcductsilencer +ifcductsilencertype +ifcductsilencertypeenum +ifcduration +ifcdynamicviscositymeasure +ifcedge +ifcedgecurve +ifcedgefeature +ifcedgeloop +ifcelectricalbaseproperties +ifcelectricalcircuit +ifcelectricalelement +ifcelectricappliance +ifcelectricappliancetype +ifcelectricappliancetypeenum +ifcelectriccapacitancemeasure +ifcelectricchargemeasure +ifcelectricconductancemeasure +ifcelectriccurrentenum +ifcelectriccurrentmeasure +ifcelectricdistributionboard +ifcelectricdistributionboardtype +ifcelectricdistributionboardtypeenum +ifcelectricdistributionpoint +ifcelectricdistributionpointfunctionenum +ifcelectricflowstoragedevice +ifcelectricflowstoragedevicetype +ifcelectricflowstoragedevicetypeenum +ifcelectricgenerator +ifcelectricgeneratortype +ifcelectricgeneratortypeenum +ifcelectricheatertype +ifcelectricheatertypeenum +ifcelectricmotor +ifcelectricmotortype +ifcelectricmotortypeenum +ifcelectricresistancemeasure +ifcelectrictimecontrol +ifcelectrictimecontroltype +ifcelectrictimecontroltypeenum +ifcelectricvoltagemeasure +ifcelement +ifcelementarysurface +ifcelementassembly +ifcelementassemblytype +ifcelementassemblytypeenum +ifcelementcomponent +ifcelementcomponenttype +ifcelementcompositionenum +ifcelementquantity +ifcelementtype +ifcellipse +ifcellipseprofiledef +ifcenergyconversiondevice +ifcenergyconversiondevicetype +ifcenergymeasure +ifcenergyproperties +ifcenergysequenceenum +ifcengine +ifcenginetype +ifcenginetypeenum +ifcenvironmentalimpactcategoryenum +ifcenvironmentalimpactvalue +ifcequipmentelement +ifcequipmentstandard +ifcevaporativecooler +ifcevaporativecoolertype +ifcevaporativecoolertypeenum +ifcevaporator +ifcevaporatortype +ifcevaporatortypeenum +ifcevent +ifceventtime +ifceventtriggertypeenum +ifceventtype +ifceventtypeenum +ifcextendedmaterialproperties +ifcextendedproperties +ifcexternalinformation +ifcexternallydefinedhatchstyle +ifcexternallydefinedsurfacestyle +ifcexternallydefinedsymbol +ifcexternallydefinedtextfont +ifcexternalreference +ifcexternalreferencerelationship +ifcexternalspatialelement +ifcexternalspatialelementtypeenum +ifcexternalspatialstructureelement +ifcextrudedareasolid +ifcextrudedareasolidtapered +ifcface +ifcfacebasedsurfacemodel +ifcfacebound +ifcfaceouterbound +ifcfacesurface +ifcfacetedbrep +ifcfacetedbrepwithvoids +ifcfailureconnectioncondition +ifcfan +ifcfantype +ifcfantypeenum +ifcfastener +ifcfastenertype +ifcfastenertypeenum +ifcfeatureelement +ifcfeatureelementaddition +ifcfeatureelementsubtraction +ifcfillareastyle +ifcfillareastylehatching +ifcfillareastyletiles +ifcfillareastyletileshapeselect +ifcfillareastyletilesymbolwithstyle +ifcfillstyleselect +ifcfilter +ifcfiltertype +ifcfiltertypeenum +ifcfiresuppressionterminal +ifcfiresuppressionterminaltype +ifcfiresuppressionterminaltypeenum +ifcfirstprojaxis +ifcfixedreferencesweptareasolid +ifcflowcontroller +ifcflowcontrollertype +ifcflowdirectionenum +ifcflowfitting +ifcflowfittingtype +ifcflowinstrument +ifcflowinstrumenttype +ifcflowinstrumenttypeenum +ifcflowmeter +ifcflowmetertype +ifcflowmetertypeenum +ifcflowmovingdevice +ifcflowmovingdevicetype +ifcflowsegment +ifcflowsegmenttype +ifcflowstoragedevice +ifcflowstoragedevicetype +ifcflowterminal +ifcflowterminaltype +ifcflowtreatmentdevice +ifcflowtreatmentdevicetype +ifcfluidflowproperties +ifcfontstyle +ifcfontvariant +ifcfontweight +ifcfooting +ifcfootingtype +ifcfootingtypeenum +ifcforcemeasure +ifcfrequencymeasure +ifcfuelproperties +ifcfurnishingelement +ifcfurnishingelementtype +ifcfurniture +ifcfurniturestandard +ifcfurnituretype +ifcfurnituretypeenum +ifcgasterminaltype +ifcgasterminaltypeenum +ifcgeneralmaterialproperties +ifcgeneralprofileproperties +ifcgeographicelement +ifcgeographicelementtype +ifcgeographicelementtypeenum +ifcgeometriccurveset +ifcgeometricprojectionenum +ifcgeometricrepresentationcontext +ifcgeometricrepresentationitem +ifcgeometricrepresentationsubcontext +ifcgeometricset +ifcgeometricsetselect +ifcgetbasissurface +ifcgloballyuniqueid +ifcglobalorlocalenum +ifcgrid +ifcgridaxis +ifcgridplacement +ifcgridplacementdirectionselect +ifcgridtypeenum +ifcgroup +ifchalfspacesolid +ifchatchlinedistanceselect +ifcheatexchanger +ifcheatexchangertype +ifcheatexchangertypeenum +ifcheatfluxdensitymeasure +ifcheatingvaluemeasure +ifchourinday +ifchumidifier +ifchumidifiertype +ifchumidifiertypeenum +ifchygroscopicmaterialproperties +ifcidentifier +ifcilluminancemeasure +ifcimagetexture +ifcindexedcolourmap +ifcindexedtexturemap +ifcindexedtriangletexturemap +ifcinductancemeasure +ifcinteger +ifcintegercountratemeasure +ifcinterceptor +ifcinterceptortype +ifcinterceptortypeenum +ifcinternalorexternalenum +ifcinventory +ifcinventorytypeenum +ifcionconcentrationmeasure +ifcirregulartimeseries +ifcirregulartimeseriesvalue +ifcishapeprofiledef +ifcisothermalmoisturecapacitymeasure +ifcjunctionbox +ifcjunctionboxtype +ifcjunctionboxtypeenum +ifckinematicviscositymeasure +ifcknottype +ifclabel +ifclaborresource +ifclaborresourcetype +ifclaborresourcetypeenum +ifclagtime +ifclamp +ifclamptype +ifclamptypeenum +ifclanguageid +ifclayereditem +ifclayersetdirectionenum +ifcleapyear +ifclengthmeasure +ifclibraryinformation +ifclibraryreference +ifclibraryselect +ifclightdistributioncurveenum +ifclightdistributiondata +ifclightdistributiondatasourceselect +ifclightemissionsourceenum +ifclightfixture +ifclightfixturetype +ifclightfixturetypeenum +ifclightintensitydistribution +ifclightsource +ifclightsourceambient +ifclightsourcedirectional +ifclightsourcegoniometric +ifclightsourcepositional +ifclightsourcespot +ifcline +ifclineardimension +ifclinearforcemeasure +ifclinearmomentmeasure +ifclinearstiffnessmeasure +ifclinearvelocitymeasure +ifclisttoarray +ifcloadgrouptypeenum +ifclocalplacement +ifclocaltime +ifclogical +ifclogicaloperatorenum +ifcloop +ifcloopheadtotail +ifclshapeprofiledef +ifcluminousfluxmeasure +ifcluminousintensitydistributionmeasure +ifcluminousintensitymeasure +ifcmagneticfluxdensitymeasure +ifcmagneticfluxmeasure +ifcmakearrayofarray +ifcmanifoldsolidbrep +ifcmapconversion +ifcmappeditem +ifcmassdensitymeasure +ifcmassflowratemeasure +ifcmassmeasure +ifcmassperlengthmeasure +ifcmaterial +ifcmaterialclassificationrelationship +ifcmaterialconstituent +ifcmaterialconstituentset +ifcmaterialdefinition +ifcmaterialdefinitionrepresentation +ifcmateriallayer +ifcmateriallayerset +ifcmateriallayersetusage +ifcmateriallayerwithoffsets +ifcmateriallist +ifcmaterialprofile +ifcmaterialprofileset +ifcmaterialprofilesetusage +ifcmaterialprofilesetusagetapering +ifcmaterialprofilewithoffsets +ifcmaterialproperties +ifcmaterialrelationship +ifcmaterialselect +ifcmaterialusagedefinition +ifcmeasurevalue +ifcmeasurewithunit +ifcmechanicalconcretematerialproperties +ifcmechanicalfastener +ifcmechanicalfastenertype +ifcmechanicalfastenertypeenum +ifcmechanicalmaterialproperties +ifcmechanicalsteelmaterialproperties +ifcmedicaldevice +ifcmedicaldevicetype +ifcmedicaldevicetypeenum +ifcmember +ifcmemberstandardcase +ifcmembertype +ifcmembertypeenum +ifcmetric +ifcmetricvalueselect +ifcminuteinhour +ifcmirroredprofiledef +ifcmlstotalthickness +ifcmodulusofelasticitymeasure +ifcmodulusoflinearsubgradereactionmeasure +ifcmodulusofrotationalsubgradereactionmeasure +ifcmodulusofrotationalsubgradereactionselect +ifcmodulusofsubgradereactionmeasure +ifcmodulusofsubgradereactionselect +ifcmodulusoftranslationalsubgradereactionselect +ifcmoisturediffusivitymeasure +ifcmolecularweightmeasure +ifcmomentofinertiameasure +ifcmonetarymeasure +ifcmonetaryunit +ifcmonthinyearnumber +ifcmotorconnection +ifcmotorconnectiontype +ifcmotorconnectiontypeenum +ifcmove +ifcnamedunit +ifcnonnegativelengthmeasure +ifcnormalise +ifcnormalisedratiomeasure +ifcnullstyle +ifcnumericmeasure +ifcobject +ifcobjectdefinition +ifcobjective +ifcobjectiveenum +ifcobjectplacement +ifcobjectreferenceselect +ifcobjecttypeenum +ifcoccupant +ifcoccupanttypeenum +ifcoffsetcurve2d +ifcoffsetcurve3d +ifconedirectionrepeatfactor +ifcopeningelement +ifcopeningelementtypeenum +ifcopeningstandardcase +ifcopenshell +ifcopticalmaterialproperties +ifcorderaction +ifcorganization +ifcorganizationrelationship +ifcorientationselect +ifcorientededge +ifcorthogonalcomplement +ifcouterboundarycurve +ifcoutlet +ifcoutlettype +ifcoutlettypeenum +ifcownerhistory +ifcparameterizedprofiledef +ifcparametervalue +ifcpath +ifcpathheadtotail +ifcpcurve +ifcperformancehistory +ifcperformancehistorytypeenum +ifcpermeablecoveringoperationenum +ifcpermeablecoveringproperties +ifcpermit +ifcpermittypeenum +ifcperson +ifcpersonandorganization +ifcphmeasure +ifcphysicalcomplexquantity +ifcphysicalorvirtualenum +ifcphysicalquantity +ifcphysicalsimplequantity +ifcpile +ifcpileconstructionenum +ifcpiletype +ifcpiletypeenum +ifcpipefitting +ifcpipefittingtype +ifcpipefittingtypeenum +ifcpipesegment +ifcpipesegmenttype +ifcpipesegmenttypeenum +ifcpixeltexture +ifcplacement +ifcplanarbox +ifcplanarextent +ifcplanarforcemeasure +ifcplane +ifcplaneanglemeasure +ifcplate +ifcplatestandardcase +ifcplatetype +ifcplatetypeenum +ifcpoint +ifcpointoncurve +ifcpointonsurface +ifcpointorvertexpoint +ifcpolygonalboundedhalfspace +ifcpolyline +ifcpolyloop +ifcport +ifcpositivelengthmeasure +ifcpositiveplaneanglemeasure +ifcpositiveratiomeasure +ifcpostaladdress +ifcpowermeasure +ifcpredefinedcolour +ifcpredefinedcurvefont +ifcpredefineddimensionsymbol +ifcpredefineditem +ifcpredefinedpointmarkersymbol +ifcpredefinedproperties +ifcpredefinedpropertyset +ifcpredefinedsymbol +ifcpredefinedterminatorsymbol +ifcpredefinedtextfont +ifcpresentabletext +ifcpresentationitem +ifcpresentationlayerassignment +ifcpresentationlayerwithstyle +ifcpresentationstyle +ifcpresentationstyleassignment +ifcpresentationstyleselect +ifcpressuremeasure +ifcprocedure +ifcproceduretype +ifcproceduretypeenum +ifcprocess +ifcprocessselect +ifcproduct +ifcproductdefinitionshape +ifcproductrepresentation +ifcproductrepresentationselect +ifcproductselect +ifcproductsofcombustionproperties +ifcprofiledef +ifcprofileproperties +ifcprofiletypeenum +ifcproject +ifcprojectedcrs +ifcprojectedortruelengthenum +ifcprojectioncurve +ifcprojectionelement +ifcprojectionelementtypeenum +ifcprojectlibrary +ifcprojectorder +ifcprojectorderrecord +ifcprojectorderrecordtypeenum +ifcprojectordertypeenum +ifcproperty +ifcpropertyabstraction +ifcpropertyboundedvalue +ifcpropertyconstraintrelationship +ifcpropertydefinition +ifcpropertydependencyrelationship +ifcpropertyenumeratedvalue +ifcpropertyenumeration +ifcpropertylistvalue +ifcpropertyreferencevalue +ifcpropertyset +ifcpropertysetdefinition +ifcpropertysetdefinitionselect +ifcpropertysetdefinitionset +ifcpropertysettemplate +ifcpropertysettemplatetypeenum +ifcpropertysinglevalue +ifcpropertysourceenum +ifcpropertytablevalue +ifcpropertytemplate +ifcpropertytemplatedefinition +ifcprotectivedevice +ifcprotectivedevicetrippingunit +ifcprotectivedevicetrippingunittype +ifcprotectivedevicetrippingunittypeenum +ifcprotectivedevicetype +ifcprotectivedevicetypeenum +ifcproxy +ifcpump +ifcpumptype +ifcpumptypeenum +ifcquantityarea +ifcquantitycount +ifcquantitylength +ifcquantityset +ifcquantitytime +ifcquantityvolume +ifcquantityweight +ifcradioactivitymeasure +ifcradiusdimension +ifcrailing +ifcrailingtype +ifcrailingtypeenum +ifcramp +ifcrampflight +ifcrampflighttype +ifcrampflighttypeenum +ifcramptype +ifcramptypeenum +ifcratiomeasure +ifcrationalbeziercurve +ifcrationalbsplinecurvewithknots +ifcrationalbsplinesurfacewithknots +ifcreal +ifcrectanglehollowprofiledef +ifcrectangleprofiledef +ifcrectangularpyramid +ifcrectangulartrimmedsurface +ifcrecurrencepattern +ifcrecurrencetypeenum +ifcreference +ifcreferencesvaluedocument +ifcreflectancemethodenum +ifcregulartimeseries +ifcreinforcementbarproperties +ifcreinforcementdefinitionproperties +ifcreinforcingbar +ifcreinforcingbarroleenum +ifcreinforcingbarsurfaceenum +ifcreinforcingbartype +ifcreinforcingbartypeenum +ifcreinforcingelement +ifcreinforcingelementtype +ifcreinforcingmesh +ifcreinforcingmeshtype +ifcreinforcingmeshtypeenum +ifcrelaggregates +ifcrelassigns +ifcrelassignstasks +ifcrelassignstoactor +ifcrelassignstocontrol +ifcrelassignstogroup +ifcrelassignstogroupbyfactor +ifcrelassignstoprocess +ifcrelassignstoproduct +ifcrelassignstoprojectorder +ifcrelassignstoresource +ifcrelassociates +ifcrelassociatesappliedvalue +ifcrelassociatesapproval +ifcrelassociatesclassification +ifcrelassociatesconstraint +ifcrelassociatesdocument +ifcrelassociateslibrary +ifcrelassociatesmaterial +ifcrelassociatesprofileproperties +ifcrelationship +ifcrelaxation +ifcrelconnects +ifcrelconnectselements +ifcrelconnectspathelements +ifcrelconnectsports +ifcrelconnectsporttoelement +ifcrelconnectsstructuralactivity +ifcrelconnectsstructuralelement +ifcrelconnectsstructuralmember +ifcrelconnectswitheccentricity +ifcrelconnectswithrealizingelements +ifcrelcontainedinspatialstructure +ifcrelcoversbldgelements +ifcrelcoversspaces +ifcreldeclares +ifcreldecomposes +ifcreldefines +ifcreldefinesbyobject +ifcreldefinesbyproperties +ifcreldefinesbytemplate +ifcreldefinesbytype +ifcrelfillselement +ifcrelflowcontrolelements +ifcrelinteractionrequirements +ifcrelinterfereselements +ifcrelnests +ifcreloccupiesspaces +ifcreloverridesproperties +ifcrelprojectselement +ifcrelreferencedinspatialstructure +ifcrelschedulescostitems +ifcrelsequence +ifcrelservicesbuildings +ifcrelspaceboundary +ifcrelspaceboundary1stlevel +ifcrelspaceboundary2ndlevel +ifcrelvoidselement +ifcreparametrisedcompositecurvesegment +ifcrepresentation +ifcrepresentationcontext +ifcrepresentationcontextsamewcs +ifcrepresentationitem +ifcrepresentationmap +ifcresource +ifcresourceapprovalrelationship +ifcresourceconstraintrelationship +ifcresourceconsumptionenum +ifcresourcelevelrelationship +ifcresourceobjectselect +ifcresourceselect +ifcresourcetime +ifcrevolvedareasolid +ifcrevolvedareasolidtapered +ifcribplatedirectionenum +ifcribplateprofileproperties +ifcrightcircularcone +ifcrightcircularcylinder +ifcroleenum +ifcroof +ifcrooftype +ifcrooftypeenum +ifcroot +ifcrotationalfrequencymeasure +ifcrotationalmassmeasure +ifcrotationalstiffnessmeasure +ifcrotationalstiffnessselect +ifcroundededgefeature +ifcroundedrectangleprofiledef +ifcsameaxis2placement +ifcsamecartesianpoint +ifcsamedirection +ifcsamevalidprecision +ifcsamevalue +ifcsanitaryterminal +ifcsanitaryterminaltype +ifcsanitaryterminaltypeenum +ifcscalartimesvector +ifcscheduletimecontrol +ifcschedulingtime +ifcsecondinminute +ifcsecondprojaxis +ifcsectionalareaintegralmeasure +ifcsectionedspine +ifcsectionmodulusmeasure +ifcsectionproperties +ifcsectionreinforcementproperties +ifcsectiontypeenum +ifcsensor +ifcsensortype +ifcsensortypeenum +ifcsequenceenum +ifcservicelife +ifcservicelifefactor +ifcservicelifefactortypeenum +ifcservicelifetypeenum +ifcshadingdevice +ifcshadingdevicetype +ifcshadingdevicetypeenum +ifcshapeaspect +ifcshapemodel +ifcshaperepresentation +ifcshaperepresentationtypes +ifcshearmodulusmeasure +ifcshell +ifcshellbasedsurfacemodel +ifcsimpleproperty +ifcsimplepropertytemplate +ifcsimplepropertytemplatetypeenum +ifcsimplevalue +ifcsingleprojectinstance +ifcsiprefix +ifcsite +ifcsiunit +ifcsiunitname +ifcsizeselect +ifcslab +ifcslabelementedcase +ifcslabstandardcase +ifcslabtype +ifcslabtypeenum +ifcslippageconnectioncondition +ifcsolardevice +ifcsolardevicetype +ifcsolardevicetypeenum +ifcsolidanglemeasure +ifcsolidmodel +ifcsolidorshell +ifcsoundpowerlevelmeasure +ifcsoundpowermeasure +ifcsoundpressurelevelmeasure +ifcsoundpressuremeasure +ifcsoundproperties +ifcsoundscaleenum +ifcsoundvalue +ifcspace +ifcspaceboundaryselect +ifcspaceheater +ifcspaceheatertype +ifcspaceheatertypeenum +ifcspaceprogram +ifcspacethermalloadproperties +ifcspacetype +ifcspacetypeenum +ifcspatialelement +ifcspatialelementtype +ifcspatialstructureelement +ifcspatialstructureelementtype +ifcspatialzone +ifcspatialzonetype +ifcspatialzonetypeenum +ifcspecificheatcapacitymeasure +ifcspecularexponent +ifcspecularhighlightselect +ifcspecularroughness +ifcsphere +ifcstackterminal +ifcstackterminaltype +ifcstackterminaltypeenum +ifcstair +ifcstairflight +ifcstairflighttype +ifcstairflighttypeenum +ifcstairtype +ifcstairtypeenum +ifcstateenum +ifcstructuralaction +ifcstructuralactivity +ifcstructuralactivityassignmentselect +ifcstructuralanalysismodel +ifcstructuralconnection +ifcstructuralconnectioncondition +ifcstructuralcurveaction +ifcstructuralcurveactivitytypeenum +ifcstructuralcurveconnection +ifcstructuralcurvemember +ifcstructuralcurvemembertypeenum +ifcstructuralcurvemembervarying +ifcstructuralcurvereaction +ifcstructuralcurvetypeenum +ifcstructuralitem +ifcstructurallinearaction +ifcstructurallinearactionvarying +ifcstructuralload +ifcstructuralloadcase +ifcstructuralloadconfiguration +ifcstructuralloadgroup +ifcstructuralloadlinearforce +ifcstructuralloadorresult +ifcstructuralloadplanarforce +ifcstructuralloadsingledisplacement +ifcstructuralloadsingledisplacementdistortion +ifcstructuralloadsingleforce +ifcstructuralloadsingleforcewarping +ifcstructuralloadstatic +ifcstructuralloadtemperature +ifcstructuralmember +ifcstructuralplanaraction +ifcstructuralplanaractionvarying +ifcstructuralpointaction +ifcstructuralpointconnection +ifcstructuralpointreaction +ifcstructuralprofileproperties +ifcstructuralreaction +ifcstructuralresultgroup +ifcstructuralsteelprofileproperties +ifcstructuralsurfaceaction +ifcstructuralsurfaceactivitytypeenum +ifcstructuralsurfaceconnection +ifcstructuralsurfacemember +ifcstructuralsurfacemembertypeenum +ifcstructuralsurfacemembervarying +ifcstructuralsurfacereaction +ifcstructuralsurfacetypeenum +ifcstructureddimensioncallout +ifcstyleassignmentselect +ifcstyleditem +ifcstyledrepresentation +ifcstylemodel +ifcsubcontractresource +ifcsubcontractresourcetype +ifcsubcontractresourcetypeenum +ifcsubedge +ifcsurface +ifcsurfacecurvesweptareasolid +ifcsurfacefeature +ifcsurfacefeaturetypeenum +ifcsurfaceoflinearextrusion +ifcsurfaceofrevolution +ifcsurfaceorfacesurface +ifcsurfacereinforcementarea +ifcsurfaceside +ifcsurfacestyle +ifcsurfacestyleelementselect +ifcsurfacestylelighting +ifcsurfacestylerefraction +ifcsurfacestylerendering +ifcsurfacestyleshading +ifcsurfacestylewithtextures +ifcsurfacetexture +ifcsurfacetextureenum +ifcsurfaceweightspositive +ifcsweptareasolid +ifcsweptdisksolid +ifcsweptdisksolidpolygonal +ifcsweptsurface +ifcswitchingdevice +ifcswitchingdevicetype +ifcswitchingdevicetypeenum +ifcsymbolstyle +ifcsymbolstyleselect +ifcsystem +ifcsystemfurnitureelement +ifcsystemfurnitureelementtype +ifcsystemfurnitureelementtypeenum +ifctable +ifctablecolumn +ifctablerow +ifctank +ifctanktype +ifctanktypeenum +ifctaperedsweptareaprofiles +ifctask +ifctaskdurationenum +ifctasktime +ifctasktimerecurring +ifctasktype +ifctasktypeenum +ifctelecomaddress +ifctemperaturegradientmeasure +ifctemperaturerateofchangemeasure +ifctendon +ifctendonanchor +ifctendonanchortype +ifctendonanchortypeenum +ifctendontype +ifctendontypeenum +ifcterminatorsymbol +ifctessellatedfaceset +ifctessellateditem +ifctext +ifctextalignment +ifctextdecoration +ifctextfontname +ifctextfontselect +ifctextliteral +ifctextliteralwithextent +ifctextpath +ifctextstyle +ifctextstylefontmodel +ifctextstylefordefinedfont +ifctextstyleselect +ifctextstyletextmodel +ifctextstylewithboxcharacteristics +ifctexttransformation +ifctexturecoordinate +ifctexturecoordinategenerator +ifctexturemap +ifctexturevertex +ifctexturevertexlist +ifcthermaladmittancemeasure +ifcthermalconductivitymeasure +ifcthermalexpansioncoefficientmeasure +ifcthermalloadsourceenum +ifcthermalloadtypeenum +ifcthermalmaterialproperties +ifcthermalresistancemeasure +ifcthermaltransmittancemeasure +ifcthermodynamictemperaturemeasure +ifctime +ifctimemeasure +ifctimeorratioselect +ifctimeperiod +ifctimeseries +ifctimeseriesdatatypeenum +ifctimeseriesreferencerelationship +ifctimeseriesschedule +ifctimeseriesscheduletypeenum +ifctimeseriesvalue +ifctimestamp +ifctopologicalrepresentationitem +ifctopologyrepresentation +ifctopologyrepresentationtypes +ifctorquemeasure +ifctransformer +ifctransformertype +ifctransformertypeenum +ifctransitioncode +ifctranslationalstiffnessselect +ifctransportelement +ifctransportelementtype +ifctransportelementtypeenum +ifctrapeziumprofiledef +ifctriangulatedfaceset +ifctrimmedcurve +ifctrimmingpreference +ifctrimmingselect +ifctshapeprofiledef +ifctubebundle +ifctubebundletype +ifctubebundletypeenum +ifctwodirectionrepeatfactor +ifctypeobject +ifctypeprocess +ifctypeproduct +ifctyperesource +ifcuniquepropertyname +ifcuniquepropertytemplatenames +ifcuniquequantitynames +ifcunit +ifcunitarycontrolelement +ifcunitarycontrolelementtype +ifcunitarycontrolelementtypeenum +ifcunitaryequipment +ifcunitaryequipmenttype +ifcunitaryequipmenttypeenum +ifcunitassignment +ifcunitenum +ifcurireference +ifcushapeprofiledef +ifcvalidcalendardate +ifcvalidtime +ifcvalue +ifcvalve +ifcvalvetype +ifcvalvetypeenum +ifcvaporpermeabilitymeasure +ifcvector +ifcvectordifference +ifcvectorordirection +ifcvectorsum +ifcvertex +ifcvertexbasedtexturemap +ifcvertexloop +ifcvertexpoint +ifcvibrationisolator +ifcvibrationisolatortype +ifcvibrationisolatortypeenum +ifcvirtualelement +ifcvirtualgridintersection +ifcvoidingfeature +ifcvoidingfeaturetypeenum +ifcvolumemeasure +ifcvolumetricflowratemeasure +ifcwall +ifcwallelementedcase +ifcwallstandardcase +ifcwalltype +ifcwalltypeenum +ifcwarpingconstantmeasure +ifcwarpingmomentmeasure +ifcwarpingstiffnessselect +ifcwasteterminal +ifcwasteterminaltype +ifcwasteterminaltypeenum +ifcwaterproperties +ifcwindow +ifcwindowliningproperties +ifcwindowpaneloperationenum +ifcwindowpanelpositionenum +ifcwindowpanelproperties +ifcwindowstandardcase +ifcwindowstyle +ifcwindowstyleconstructionenum +ifcwindowstyleoperationenum +ifcwindowtype +ifcwindowtypeenum +ifcwindowtypepartitioningenum +ifcworkcalendar +ifcworkcalendartypeenum +ifcworkcontrol +ifcworkcontroltypeenum +ifcworkplan +ifcworkplantypeenum +ifcworkschedule +ifcworkscheduletypeenum +ifcworktime +ifcyearnumber +ifczone +ifczshapeprofiledef +ijk_minmax +illuminance_measure +illuminance_measure_with_unit +illuminance_unit +illustration +impedance_measurement_setup_requirement +impedance_requirement +implicit_explicit_positioned_sketch_relationship +implicit_intersection_curve +implicit_model_intersection_curve +implicit_planar_curve +implicit_planar_intersection_point +implicit_planar_projection_point +implicit_point_on_plane +implicit_projected_curve +implicit_silhouette_curve +imported_curve_function +imported_point_function +imported_surface_function +imported_volume_function +in_facility_location +in_zone +in_zone_item +inappropriate_element_visibility +inappropriate_use_of_layer +inapt_data +inapt_geometry +inapt_manifold_solid_brep +inapt_topology +inapt_topology_and_geometry_relationship +incidence_assembly_constraint +incidence_geometric_constraint +included_text_block +inclusion_product_concept_feature +inconsistent_adjacent_face_normals +inconsistent_curve_transition_code +inconsistent_edge_and_curve_directions +inconsistent_element_reference +inconsistent_face_and_closed_shell_normals +inconsistent_face_and_surface_normals +inconsistent_surface_transition_code +increasing_resource_event +independent_property +independent_property_relationship +independent_property_representation +index_expression +indexed_elements_bc +indexed_points_bc +indices_group +indices_list +indices_range +indirect_connection +indirect_property +indirect_stratum_component_join_implementation +indirectly_selected_elements +indirectly_selected_shape_elements +indistinct_curve_knots +indistinct_surface_knots +individual_dimension +individual_used_in_connection +inductance_measure +inductance_measure_with_unit +inductance_unit +information_right +information_usage_right +information_usage_right_item +information_usage_right_relationship +initial_state +inline_equipment +input_selector +inspected_ecdq_element_select +inspected_element_select +inspected_product_definition +inspected_shape_element_select +instance_attribute_reference +instance_report_item_with_extreme_instances +instance_usage_context_assignment +instance_usage_context_select +instanced_feature +instrumentation_and_control_system +int_literal +int_numeric_variable +int_value_function +integer_defined_function +integer_interval_from_min +integer_interval_to_max +integer_number +integer_representation_item +integer_tuple_literal +integral_shield +integrated_cnc_schema +integration_rule +intended_role_and_domain +inter_stratum_feature +inter_stratum_feature_dependent_land +inter_stratum_feature_edge_segment_template +inter_stratum_feature_edge_segment_template_with_cross_section +inter_stratum_feature_edge_template +inter_stratum_feature_template +interconnect_module_component +interconnect_module_component_surface_feature +interconnect_module_cutout_segment_surface +interconnect_module_design_object_category +interconnect_module_design_view +interconnect_module_edge +interconnect_module_edge_segment +interconnect_module_edge_segment_surface +interconnect_module_interface_terminal +interconnect_module_macro_component +interconnect_module_macro_component_join_terminal +interconnect_module_macro_terminal +interconnect_module_stratum_based_terminal +interconnect_module_terminal +interconnect_module_usage_view +interconnect_shield_allocation +interface_access_component_definition +interface_access_material_removal_laminate_component +interface_access_stratum_feature_template_component +interface_component +interface_connection +interface_connector +interface_connector_as_planned +interface_connector_as_realized +interface_connector_definition +interface_connector_design +interface_connector_design_to_planned +interface_connector_design_to_realized +interface_connector_occurrence +interface_connector_planned_to_realized +interface_connector_version +interface_definition_connection +interface_definition_for +interface_definition_item +interface_mounted_join +interface_plane +interface_specification +interface_specification_definition +interface_specification_version +interfaced_group_component +interfacial_connection +interfering_shape_element +internal_or_reflected_shape_aspect +internal_probe_access_area +interpolated_configuration_representation +interpolated_configuration_segment +interpolated_configuration_sequence +interpolation_type +intersecting_connected_face_sets +intersecting_loops_in_face +intersecting_shells_in_solid +intersection +intersection_curve +intersection_of_set_of_class +interval_expression +invalidate_vrep_item +inverse_copy_stratum_technology_occurrence_relationship +invisibility +invisibility_context +invisible_item +involvement_by_reference +ir_usage_item +is_acyclic +is_coordinate_property +is_int_expr +is_sql_mappable +iso4217_currency +isotropic_symmetric_tensor2_3d +item_correlation +item_defined_transformation +item_design_association +item_identified_representation_usage +item_identified_representation_usage_definition +item_identified_representation_usage_select +item_in_context +item_link_motion_relationship +item_restricted_requirement +item_shape +item_usage_effectivity +joggle +joggle_termination +join_shape_aspect +justification +justification_assignment +justification_item +justification_relationship +justification_support_assignment +justification_support_item +keepout_design_object_category +kinematic_analysis_consistency +kinematic_analysis_definition +kinematic_analysis_result +kinematic_control +kinematic_frame_background +kinematic_frame_background_representation +kinematic_frame_background_representation_association +kinematic_frame_based_transformation +kinematic_ground_representation +kinematic_joint +kinematic_link +kinematic_link_representation +kinematic_link_representation_association +kinematic_link_representation_items +kinematic_link_representation_relation +kinematic_loop +kinematic_pair +kinematic_path +kinematic_path_defined_by_curves +kinematic_path_defined_by_nodes +kinematic_path_segment +kinematic_property_definition +kinematic_property_definition_representation +kinematic_property_mechanism_representation +kinematic_property_representation_relation +kinematic_property_topology_representation +kinematic_result +kinematic_structure +kinematic_topology_directed_structure +kinematic_topology_network_structure +kinematic_topology_representation_select +kinematic_topology_structure +kinematic_topology_substructure +kinematic_topology_tree_structure +knot_type +known_source +knurling_turning_operation +label +laid_defined_transformation +laminate_component +laminate_component_feature +laminate_component_interface_terminal +laminate_component_join_terminal +laminate_group_component_make_from_relationship +laminate_table +laminate_text_string_component +land +land_physical_template +land_template_terminal +land_with_join_terminal +language +language_assignment +language_indication +language_item +layer_connection_point +layer_qualified_layout_spacing_requirement +layer_stack_region +layered_assembly_module_design_view +layered_assembly_module_usage_view +layered_assembly_panel_design_view +layered_interconnect_module_design_view +layered_interconnect_module_usage_view +layered_interconnect_panel_design_view +layered_item +layout_junction +layout_macro_component +layout_macro_definition +layout_macro_definition_terminal_to_usage_terminal_assignment +layout_macro_floor_plan_template +layout_spacing_contextual_area +layout_spacing_requirement +leader_curve +leader_directed_callout +leader_directed_dimension +leader_terminator +leap_year +left_namespace +length_function +length_measure +length_measure_with_unit +length_trimmed_terminal +length_unit +library_class_version_assignment +library_defined_product_definition +library_property_version_assignment +library_stack_model +library_to_design_stack_model_mapping +lifecycle_integration_schema +lifecycle_stage +light_source +light_source_ambient +light_source_directional +light_source_positional +light_source_spot +like_expression +limit_condition +limit_qualifier_list +limits_and_fits +line +line_branch_connection +line_less_piping_system +line_plant_item_branch_connection +line_plant_item_connection +line_profile_tolerance +line_termination_connection +linear_array_component_definition_link +linear_array_placement_group_component +linear_composite_array_shape_aspect +linear_composite_array_shape_aspect_link +linear_constraint_equation_element +linear_constraint_equation_element_value +linear_constraint_equation_nodal_term +linear_dimension +linear_flexible_and_pinion_pair +linear_flexible_and_planar_curve_pair +linear_flexible_link_representation +linear_geometry_constraint_element +linear_path +linear_profile +linear_profile_tolerance +linearized_table_function +linearly_superimposed_state +link_motion_relationship +link_motion_representation_along_path +link_motion_transformation +link_or_shape_representation +list_face_loops +list_of_reversible_topology_item +list_of_topology_reversed +list_representation_item +list_selected_components +list_to_array +list_to_set +listed_complex_number_data +listed_data +listed_integer_data +listed_logical_data +listed_product_space +listed_real_data +listed_string_data +literal_conjunction +literal_disjunction +literal_number +local_linear_stack +local_time +location +location_assignment +location_assignment_select +location_in_aggregate_item +location_in_aggregate_representation_item +location_item +location_of_extreme_value_select +location_relationship +location_representation +location_representation_assignment +location_representation_item +location_representation_role +location_role +location_shape_representation +locator +log10_function +log2_function +log_function +logical_literal +logical_representation_item +loop +looping_element +loss_tangent_measure_with_unit +lot_effectivity +low_order_kinematic_pair +low_order_kinematic_pair_value +low_order_kinematic_pair_with_motion_coupling +low_order_kinematic_pair_with_range +lower_bound_of_number_range +lower_bound_of_property_range +lower_upper +luminous_flux_measure +luminous_flux_measure_with_unit +luminous_flux_unit +luminous_intensity_measure +luminous_intensity_measure_with_unit +luminous_intensity_unit +machine +machine_element_relationship +machine_setup +machine_usage +machining_adaptive_control_relationship +machining_approach_retract_strategy +machining_cutting_component +machining_dwell_time_representation +machining_feature_definition +machining_feature_definition_constraints +machining_feature_life_cycle +machining_feature_process +machining_feature_relationship +machining_feature_sequence_relationship +machining_feed_speed_representation +machining_final_feature_relationship +machining_functions +machining_functions_relationship +machining_nc_function +machining_offset_vector_representation +machining_operation +machining_operation_relationship +machining_operator_instruction +machining_operator_instruction_relationship +machining_process +machining_process_body_relationship +machining_process_branch_relationship +machining_process_concurrent_relationship +machining_process_executable +machining_process_model +machining_process_model_relationship +machining_process_sequence_relationship +machining_project +machining_project_workpiece_relationship +machining_rapid_movement +machining_setup +machining_setup_workpiece_relationship +machining_spindle_speed_representation +machining_strategy +machining_strategy_relationship +machining_technology +machining_technology_relationship +machining_tolerance +machining_tool +machining_tool_body_representation +machining_tool_dimension_representation +machining_tool_direction_representation +machining_toolpath +machining_toolpath_sequence_relationship +machining_toolpath_speed_profile_representation +machining_touch_probing +machining_workingstep +machining_workplan +magnetic_flux_density_measure +magnetic_flux_density_measure_with_unit +magnetic_flux_density_unit +magnetic_flux_measure +magnetic_flux_measure_with_unit +magnetic_flux_unit +make_array_of_array +make_atom_based_literal +make_binary_literal +make_boolean_literal +make_cartesian_complex_number_region +make_complex_number_literal +make_elementary_function +make_elementary_space +make_extended_tuple_space +make_finite_integer_interval +make_finite_real_interval +make_finite_space +make_from_connectivity_relationship +make_from_feature_relationship +make_from_functional_unit_terminal_definition_relationship +make_from_model_port_relationship +make_from_part_feature_relationship +make_from_relationship +make_from_usage_option +make_function_application +make_function_space +make_int_literal +make_listed_product_space +make_logical_literal +make_maths_enum_literal +make_maths_tuple_literal +make_number_literal +make_numeric_set +make_parallel_composed_function +make_polar_complex_number_region +make_real_interval_from_min +make_real_interval_to_max +make_real_literal +make_string_literal +make_uniform_product_space +makec +managed_design_object +managed_resource +managed_resource_relationship +manifold_constraining_context_dependent_shape_representation +manifold_solid_brep +manifold_subsurface_shape_representation +manifold_surface_shape_representation +manufacturing_activity +manufacturing_process +manufacturing_process_relationship +mapped_item +mapping_based_template_instance +marker_select +marker_type +market +marking +mass_measure +mass_measure_with_unit +mass_unit +matched_mesh_connection +mated_part_relationship +material_designation +material_designation_characterization +material_designation_with_conductivity_classification +material_electrical_conductivity_category +material_for_coating_layer +material_is_specified_for_part +material_property +material_property_representation +material_removal_feature_template +material_removal_laminate_component +material_removal_laminate_text_component +material_removal_structured_component +material_removal_structured_template +materialized_physical_object +mathematical_description +maths_atom +maths_binary +maths_boolean +maths_boolean_variable +maths_enum_atom +maths_enum_literal +maths_expression +maths_function +maths_function_select +maths_integer +maths_integer_variable +maths_logical +maths_number +maths_real +maths_real_variable +maths_simple_atom +maths_space +maths_space_context +maths_space_or_function +maths_string +maths_string_variable +maths_tuple +maths_tuple_literal +maths_value +maths_value_qualification +maths_value_representation_item +maths_value_with_unit +maths_variable +mating_definition_relationship_orientation +matrix_property_type +matrix_symmetry +max_exists +max_included +maximum_function +mbna_bc +mbna_bc_data +mbna_bc_data_global +mbna_bc_data_local +mbna_bc_dataset +mbna_bc_type +mbna_bc_type_compound +mbna_bc_type_simple +mbna_behaviour_model +mbna_behaviour_models +mbna_condition +mbna_dirichlet_bc_dataset +mbna_discrete_data +mbna_discrete_data_with_rind +mbna_equation +mbna_equation_set +mbna_governing_equation +mbna_governing_equation_type +mbna_history +mbna_model +mbna_neumann_bc_dataset +mbna_reference_state +mbna_result +mbna_solution +mbna_solution_with_rind +mbna_state +mbna_step +mbna_zone +mbna_zone_bc +measure_item +measure_item_with_precision +measure_or_unspecified_value +measure_qualification +measure_representation_item +measure_value +measure_with_unit +measured_value_select +measurment_location +mechanical_context +mechanical_design_and_draughting_relationship +mechanical_design_and_draughting_relationship_select +mechanical_design_geometric_presentation_area +mechanical_design_geometric_presentation_area_items +mechanical_design_geometric_presentation_representation +mechanical_design_geometric_presentation_representation_items +mechanical_design_presentation_representation_with_draughting +mechanical_design_shaded_presentation_area +mechanical_design_shaded_presentation_area_items +mechanical_design_shaded_presentation_representation +mechanical_design_shaded_presentation_representation_items +mechanism +mechanism_base_placement +mechanism_representation +mechanism_state_representation +mem_of_vs +member_of +mesh +mesh_connectivity +mesh_derived_maths_space +mesh_function +mesh_function_basis +mesh_location +mesh_maths_space_type +mesh_overset_hole +message +message_definer_select +message_level +message_relationship +method_or_method_version +milling_type_operation +milling_type_strategy +min_and_major_ply_orientation_basis +min_exists +min_included +minimally_defined_bare_die_terminal +minimally_defined_connector +minimum_function +minus_expression +minus_function +minute_in_hour +mismatched_donor_mesh +mismatched_mesh_connection +mismatched_mesh_region +mismatched_region_type +mixed_loop_type_set +mod_expression +model_action_domain +model_or_control_element +model_parameter +model_parameter_with_unit +model_product_domain +model_product_domain_with_mesh +model_property_distribution +model_state_domain +modified_geometric_tolerance +modified_pattern +modified_solid +modified_solid_with_placed_configuration +modify_element +moments_of_inertia_representation +month_in_year_number +motion_link_relationship +motion_parameter_measure +mounting_restriction_area +mounting_restriction_volume +msb_shells +msf_curve_check +msf_surface_check +mult_expression +multi_language_attribute_assignment +multi_language_attribute_item +multi_layer_component_definition +multi_layer_material_removal_laminate_component +multi_layer_stratum_feature_template_component +multi_level_reference_designator +multi_or_next_assembly_usage_occurrence +multi_stratum_printed_component +multi_stratum_printed_part_template +multi_stratum_special_symbol_component +multi_stratum_special_symbol_template +multi_stratum_structured_template +multidimensional_number +multidimensional_number_space +multidimensional_object +multidimensional_property +multidimensional_property_space +multidimensional_scale +multiple_arity_boolean_expression +multiple_arity_function_call +multiple_arity_generic_expression +multiple_arity_numeric_expression +multiple_mesh_block +multiply_defined_cartesian_points +multiply_defined_curves +multiply_defined_directions +multiply_defined_edges +multiply_defined_faces +multiply_defined_geometry +multiply_defined_placements +multiply_defined_solids +multiply_defined_surfaces +multiply_defined_vertices +name_assignment +name_attribute +name_attribute_select +name_item +named_unit +named_unit_variable +namespace +narrow_surface_patch +nc_variable_compatible_initial_value +near_point_relationship +nearest_good_direction +nearly_degenerate_geometry +nearly_degenerate_surface_boundary +nearly_degenerate_surface_patch +necessary_value_coordinate_system +network_node_definition +neutral_sketch_representation +next_assembly_usage +next_assembly_usage_occurrence +next_assembly_usage_occurrence_relationship +ngon_closed_profile +ngon_shape_representation +nmsf_curve_check +nmsf_surface_check +no_cyclic_domain_reference +no_cyclic_space_reference +no_shape_for_make_from +no_shape_for_supplied_part +no_symmetry_control +nodal_dof_reduction +nodal_freedom_action_definition +nodal_freedom_and_value_definition +nodal_freedom_values +node +node_analysis_message +node_definition +node_geometric_relationship +node_group +node_or_node_group +node_output_reference +node_representation +node_sequence +node_set +node_topological_relationship +node_with_solution_coordinate_system +node_with_vector +non_agreed_accuracy_parameter_usage +non_agreed_scale_usage +non_agreed_unit_usage +non_conductive_base_blind_via +non_conductive_cross_section_template +non_machining_process +non_machining_process_relationship +non_manifold_at_edge +non_manifold_at_vertex +non_manifold_surface_shape_representation +non_negative_length_measure +non_referenced_coordinate_system +non_smooth_geometry_transition_across_edge +non_uniform_zone_definition +nondecreasing +nonnegative_integer +normalise +not_expression +not_instantiable_pre_defined_surface_side_style +null_representation_item +null_style +number_of_terms +number_range +number_space +number_superspace_of +number_tuple_subspace_check +numeric_defined_function +numeric_expression +numeric_measure +numeric_variable +numerical_document_property +numerical_item_with_global_unit +numerical_item_with_unit +numerical_model +numerical_representation_context +object_role +observation +observation_consequence +observation_item +observation_recorder +observation_relationship +observed_context +odd_function +offset_curve_2d +offset_curve_3d +offset_orientation +offset_surface +one_direction_repeat_factor +one_or_two +one_tuples_of +open_closed +open_closed_shell +open_edge_loop +open_path_based_inner_boundary +open_path_profile +open_shell +open_shell_reversed +operational_requirement_relationship +opposing_boundary_dimensional_size +or_expression +or_state_cause_effect_definition +ordering_type +ordinal_date +ordinate_dimension +organization +organization_assignment +organization_based_location_representation +organization_item +organization_or_person_in_organization_assignment +organization_or_person_in_organization_item +organization_or_person_in_organization_select +organization_organization_type_relationship +organization_relationship +organization_role +organization_type +organizational_address +organizational_location_identification +organizational_project +organizational_project_assignment +organizational_project_item +organizational_project_relationship +organizational_project_role +orientation_basis_select +oriented_closed_shell +oriented_edge +oriented_face +oriented_joint +oriented_open_shell +oriented_path +oriented_surface +orthogonal_complement +orthotropic_symmetric_tensor2_3d +other_relationship +outer_boundary_curve +outer_round +output_request_state +outside_profile +over_riding_styled_item +over_used_vertex +overcomplex_geometry +overcomplex_topology_and_geometry_relationship +overlapping_geometry +package +package_body +package_body_bottom_surface +package_body_edge_segment_surface +package_body_edge_surface +package_body_surface +package_body_top_surface +package_footprint_relationship_definition +package_product_concept_feature +package_terminal +package_terminal_template_definition +packaged_component +packaged_connector +packaged_connector_component +packaged_connector_terminal_relationship +packaged_part +packaged_part_terminal +padstack_definition +padstack_occurrence +padstack_occurrence_product_definition_relationship +pair_actuator +pair_representation_relationship +pair_value +pallet +parabola +parallel_assembly_constraint +parallel_assembly_constraint_with_dimension +parallel_composed_function +parallel_composed_function_composability_check +parallel_composed_function_domain_check +parallel_geometric_constraint +parallel_offset +parallel_offset_geometric_constraint +parallel_offset_type +parallelism_tolerance +parameter_assignment +parameter_assignment_override +parameter_assignment_select +parameter_value +parameterized_distribution +parametric_curve_3d_element_coordinate_direction +parametric_curve_3d_element_coordinate_system +parametric_representation_context +parametric_surface_2d_element_coordinate_system +parametric_surface_3d_element_coordinate_system +parametric_template +parametric_volume_2d_element_coordinate_system +parametric_volume_3d_element_coordinate_system +parse_express_identifier +part +part_connected_terminals_definition +part_connected_terminals_definition_domain +part_connected_terminals_element +part_connected_terminals_layout_topology_requirement_assignment +part_connected_terminals_structure_definition +part_contract +part_feature_template_definition +part_fixture_mounting +part_fixture_unmounting +part_handling +part_interface_access_feature +part_laminate_table +part_machine_mounting +part_machine_unmounting +part_mating_feature +part_mounting +part_mounting_feature +part_string_template +part_template_definition +part_template_keepout_shape_allocation_to_stratum_stack +part_terminal_external_reference +part_text_template +part_tooling_feature +part_version +part_version_constraint +part_view_definition +part_view_definition_constraint +partial_circular_profile +partial_derivative_check +partial_derivative_expression +partial_derivative_function +partial_document_assignment +partial_document_with_structured_text_representation_assignment +partially_plated_cutout +partially_plated_interconnect_module_edge +participating_role_and_domain +participation +partly_overlapping_curves +partly_overlapping_edges +partly_overlapping_faces +partly_overlapping_solids +partly_overlapping_surfaces +parts +passage_deposition_material_identification +passage_filling_material_identification +passage_padstack_definition +passage_technology +passage_technology_allocation_to_stack_model +passage_terminal_based_fabrication_joint_link +path +path_area_with_parameters +path_feature_component +path_head_to_tail +path_node +path_or_composite_curve +path_parameter_representation +path_parameter_representation_context +path_reversed +path_shape_representation +pattern_offset_membership +pattern_omit_membership +pcurve +pcurve_or_surface +pdgc_with_dimension +pdm_schema +percentage_laminate_definition +percentage_laminate_table +percentage_ply_definition +period_in_time +perpendicular_assembly_constraint +perpendicular_geometric_constraint +perpendicular_to +perpendicularity_tolerance +person +person_and_organization +person_and_organization_address +person_and_organization_assignment +person_and_organization_item +person_and_organization_role +person_assignment +person_in_organization +person_item +person_or_organization_or_person_in_organization_in_position +person_or_organization_or_person_in_organization_in_position_relationship +person_or_organization_or_person_in_organization_select +person_organization_item +person_organization_select +person_requires_person_and_organization +person_role +person_type +person_type_definition +person_type_definition_formation +person_type_definition_relationship +personal_address +pgc_with_dimension +phase +physical_action_domain +physical_breakdown +physical_breakdown_context +physical_breakdown_version +physical_component +physical_component_feature +physical_component_interface_terminal +physical_component_terminal +physical_connectivity_definition +physical_connectivity_definition_domain +physical_connectivity_element +physical_connectivity_interrupting_cutout +physical_connectivity_layout_topology_link +physical_connectivity_layout_topology_node +physical_connectivity_layout_topology_requirement +physical_connectivity_layout_topology_requirement_assignment +physical_document_definition +physical_element +physical_element_definition +physical_element_usage +physical_element_version +physical_instance_requires_product_definition +physical_network +physical_network_group +physical_network_group_element_relationship +physical_network_supporting_inter_stratum_feature +physical_node_branch_requirement_to_implementing_component_allocation +physical_node_requirement_to_implementing_component_allocation +physical_object +physical_product_domain +physical_shield +physical_state_domain +physical_unit +physical_unit_datum_feature +physical_unit_geometric_tolerance +physical_unit_interconnect_definition +physical_unit_keepout_shape_allocation_to_stratum_stack +physical_unit_keepout_shape_allocation_to_stratum_technology +physical_unit_network_definition +physically_modelled_product_definition +picture_representation +picture_representation_item +picture_representation_item_select +pipe_classification +pipe_closure_fitting_classification +piping_component_class +piping_component_definition +piping_connector_classification +piping_design_csg_shape_representation +piping_system +placed_datum_target_feature +placed_feature +placement +planar_box +planar_closed_path_shape_representation_with_parameters +planar_curve_pair +planar_curve_pair_range +planar_curve_select +planar_extent +planar_pair +planar_pair_range +planar_pair_value +planar_pair_with_range +planar_path_shape_representation_with_parameters +planar_shape_representation +plane +plane_2d_element_property +plane_2d_element_purpose +plane_angle_and_length_pair +plane_angle_and_ratio_pair +plane_angle_for_pair_in_radian +plane_angle_measure +plane_angle_measure_with_unit +plane_angle_unit +plane_curve_2d_element_descriptor +plane_curve_2d_element_representation +plane_milling_operation +plane_or_planar_box +plane_surface_2d_element_descriptor +plane_surface_2d_element_representation +plane_volume_2d_element_descriptor +plane_volume_2d_element_representation +plant +plant_item_connection +plant_item_connector +plant_item_interference +plant_item_route +plant_item_weight_representation +plant_line_definition +plant_line_segment_definition +plant_line_segment_termination +plant_spatial_configuration +plant_spatial_configuration_action_request_assignment +plant_spatial_configuration_action_request_item +plant_spatial_configuration_approval_assignment +plant_spatial_configuration_change_assignment +plant_spatial_configuration_date_and_time_assignment +plant_spatial_configuration_date_and_time_item +plant_spatial_configuration_date_assignment +plant_spatial_configuration_dated_item +plant_spatial_configuration_document_item +plant_spatial_configuration_document_reference +plant_spatial_configuration_organization_assignment +plant_spatial_configuration_organization_correlation +plant_spatial_configuration_organization_item +plant_spatial_configuration_person_and_organization_assignment +plant_spatial_configuration_person_and_organization_correlation +plant_spatial_configuration_person_and_organization_item +plant_spatial_configuration_person_assignment +plant_spatial_configuration_person_correlation +plant_spatial_configuration_person_item +plated_conductive_base_blind_via +plated_cutout +plated_cutout_edge_segment +plated_inter_stratum_feature +plated_interconnect_module_edge +plated_interconnect_module_edge_segment +plated_passage +plated_passage_dependent_land +plib_class_reference_requires_version +plib_property_reference_requires_name_scope +plib_property_reference_requires_version +plus_expression +plus_minus_tolerance +ply_laminate_definition +ply_laminate_sequence_definition +ply_laminate_table +ply_reference +ply_stock_material_select +pocket +pocket_bottom +pogc_with_dimension +point +point_and_vector +point_and_vector_member +point_and_vector_members +point_constraint +point_curve_or_surface_constraint_element +point_distance_geometric_constraint +point_element_matrix +point_element_representation +point_freedom_action_definition +point_freedom_and_value_definition +point_freedom_values +point_in_time +point_in_volume +point_on_curve +point_on_edge_curve +point_on_face_surface +point_on_planar_curve_pair +point_on_planar_curve_pair_range +point_on_planar_curve_pair_value +point_on_planar_curve_pair_with_range +point_on_surface +point_on_surface_pair +point_on_surface_pair_range +point_on_surface_pair_value +point_on_surface_pair_with_range +point_path +point_path_members +point_placement_shape_representation +point_placement_shape_representation_item +point_replica +point_representation +point_style +point_to_point_path +polar_complex_number_literal +polar_complex_number_region +polar_point +poly_loop +polygonal_area +polyline +port_variable +position +position_assignment +position_context_item +position_group +position_group_assignment +position_group_item +position_group_relationship +position_group_role +position_item +position_person_or_organization_or_person_in_organization_select +position_position_type_assignment +position_relationship +position_role +position_tolerance +position_type +position_type_assignment +position_type_item +position_type_role +positional_boundary +positional_boundary_member +positioned_sketch +positive_integer +positive_length_measure +positive_plane_angle_measure +positive_ratio_measure +possible_individual +possible_role_and_domain +power_expression +power_measure +power_measure_with_unit +power_set +power_unit +pre_defined_character_glyph +pre_defined_colour +pre_defined_curve_font +pre_defined_dimension_symbol +pre_defined_geometrical_tolerance_symbol +pre_defined_item +pre_defined_marker +pre_defined_parallel_datum_axis_symbol_3d_2d_relationship +pre_defined_perpendicular_datum_axis_symbol_3d_2d_relationship +pre_defined_perpendicular_datum_plane_symbol_3d_2d_relationship +pre_defined_physical_network_group +pre_defined_physical_network_group_element_relationship +pre_defined_point_marker_symbol +pre_defined_presentation_style +pre_defined_surface_condition_symbol +pre_defined_surface_side_style +pre_defined_symbol +pre_defined_terminator_symbol +pre_defined_text_font +pre_defined_tile +precision_qualifier +predefined_picture_representation_item +predefined_requirement_view_definition +preferred_ordering +preferred_surface_curve_representation +prescribed_path +presentable_text +presentation_area +presentation_layer_assignment +presentation_layer_assignment_constraint_2d_or_3d +presentation_representation +presentation_representation_select +presentation_set +presentation_size +presentation_size_assignment_select +presentation_style_assignment +presentation_style_by_context +presentation_style_select +presentation_view +presentation_view_presented_once +presented_item +presented_item_representation +presented_item_select +pressure_measure +pressure_measure_with_unit +pressure_unit +previous_change_element_assignment +previous_design_assignment +previous_design_object_assignment +previous_element_assignment_select +primary_orientation_feature +primary_reference_terminal +primary_stratum_indicator_symbol +primitive_2d +primitive_2d_with_inner_boundary +printed_component +printed_connector_component +printed_connector_template +printed_connector_template_terminal_relationship +printed_part_cross_section_template +printed_part_cross_section_template_terminal +printed_part_template +printed_part_template_connected_terminals_definition +printed_part_template_material +printed_part_template_material_link +printed_part_template_terminal +printed_part_template_terminal_connection_zone_category +printed_tiebar_template +prismatic_pair +prismatic_pair_range +prismatic_pair_value +prismatic_pair_with_range +probability +probability_by_name +probability_derivation_parameter +probability_derived +probability_distribution +probability_distribution_parameter +probability_function_value +probability_generator +probability_named_value +probability_numeric +probability_numeric_value +probe_access_area +procedural_representation +procedural_representation_sequence +procedural_shape_representation +procedural_shape_representation_sequence +process_activity +process_capability +process_operation +process_or_process_relationship +process_or_process_relationship_effectivity +process_plan +process_plan_activity +process_plan_security +process_plan_specification +process_plan_version +process_planning_schema +process_product_association +process_product_space +process_property_association +product +product_as_individual +product_as_individual_effectivity +product_as_individual_version +product_as_individual_view +product_as_planned +product_as_realised +product_as_realized +product_based_location_identification +product_based_location_representation +product_category +product_category_assignment +product_category_hierarchy +product_category_relationship +product_class +product_concept +product_concept_context +product_concept_feature +product_concept_feature_association +product_concept_feature_category +product_concept_feature_category_usage +product_concept_feature_requires_category +product_concept_relationship +product_concept_requires_configuration_item +product_configuration +product_context +product_context_discipline_type_constraint +product_data_and_data_quality_relationship +product_definition +product_definition_context +product_definition_context_association +product_definition_context_name_constraint +product_definition_context_role +product_definition_effectivity +product_definition_element_relationship +product_definition_formation +product_definition_formation_relationship +product_definition_formation_requires_security_classification +product_definition_formation_with_specified_source +product_definition_group_assignment +product_definition_kinematics +product_definition_occurrence_relationship +product_definition_or_assembly_relationship +product_definition_or_breakdown_element_usage +product_definition_or_product_definition_relationship +product_definition_or_reference +product_definition_process +product_definition_reference +product_definition_reference_with_local_representation +product_definition_relationship +product_definition_relationship_kinematics +product_definition_replacement_requires_effectivity_assignment +product_definition_requires_approval +product_definition_requires_date_time +product_definition_requires_person_organization +product_definition_resource +product_definition_shape +product_definition_substitute +product_definition_usage +product_definition_usage_constraint +product_definition_with_associated_documents +product_design_to_individual +product_design_version_to_individual +product_group +product_group_membership +product_group_relationship +product_identification +product_in_attachment_slot +product_item +product_material_composition_relationship +product_of_mesh +product_or_formation_or_definition +product_or_presentation_space +product_planned_to_realized +product_process_plan +product_related_product_category +product_relationship +product_requires_category +product_requires_id_owner +product_requires_person_organization +product_requires_product_category +product_requires_version +product_select +product_space +product_specific_parameter_value_assignment +product_specification +product_version +product_version_relationship +product_version_requires_approval +product_version_requires_person_organization +product_version_requires_security_classification +product_view_definition +product_view_relationship +production_rate +profile_floor +project +project_assignment +project_item +project_relationship +projected_zone_definition +projected_zone_definition_with_offset +projection_curve +projection_directed_callout +promissory_usage +promissory_usage_occurrence +proper_subset +property +property_3d_data_name +property_assignment_select +property_definition +property_definition_relationship +property_definition_representation +property_distribution_description +property_distribution_select +property_for_shape_dimension +property_or_shape_select +property_process +property_quantification +property_range +property_representation +property_space +property_space_for_class_of_shape_dimension +property_value_representation +property_variable_rep_select +protocol_physical_layer_definition +protocol_physical_layer_definition_with_characterization +protocol_requirement_allocation_to_part_terminal +protrusion +purchase_assignment +purchase_item +qualification +qualification_assignment +qualification_item +qualification_relationship +qualification_type +qualification_type_assignment +qualification_type_relationship +qualification_type_role +qualifications_select +qualified_property_value_representation +qualified_representation_item +qualitative_uncertainty +quantified_assembly_component_usage +quantifier_expression +quasi_uniform_curve +quasi_uniform_surface +rack_and_pinion_pair +rack_and_pinion_pair_range +rack_and_pinion_pair_value +rack_and_pinion_pair_with_range +radial_geometry_constraint_element +radioactivity_measure +radioactivity_measure_with_unit +radioactivity_unit +radius_dimension +radius_geometric_constraint +random_variable +range_characteristic +range_max +range_min +range_of_parts +ratio_measure +ratio_measure_with_unit +ratio_unit +rational_b_spline_curve +rational_b_spline_surface +rational_representation_item +rationalize_function +real_defined_function +real_interval +real_interval_from_min +real_interval_to_max +real_literal +real_max +real_min +real_number +real_numeric_variable +real_representation_item +real_tuple_literal +recognition +rectangular_area +rectangular_array_placement_group_component +rectangular_closed_profile +rectangular_composite_array_shape_aspect +rectangular_composite_surface +rectangular_composite_surface_transition_locator +rectangular_pattern +rectangular_pyramid +rectangular_trimmed_surface +reducer_fitting_classification +reference_composition_path +reference_geometry +reference_graphic_registration_mark +referenced_modified_datum +region_based_derived_pattern +regional_coordinate +regional_grid_location_representation +regular_indexing +regular_table_function +reindexed_array_function +related_condition_parameter +relating_shape_representations_of_extreme_values +relationship +relationship_condition +relationship_with_condition +relative_event +relative_event_occurrence +relative_location +removal_volume +remove_first +rendering_properties_select +rep_item_group +repackage +repackage_options +repackaging_function +reparametrised_composite_curve_segment +repeat_count +repeat_until +repeat_while +replicate_feature +repositioned_neutral_sketch +repositioned_tessellated_item +representation +representation_context +representation_context_defined_maths_space_context +representation_form +representation_item +representation_item_relationship +representation_map +representation_of_gregorian_date_and_utc_time +representation_of_link +representation_of_thing +representation_proxy_item +representation_relationship +representation_relationship_with_transformation +representation_subtype_exclusiveness +representations_mapped_into +representative_shape_representation +represented_definition +required_0d_nodes +required_1d_nodes +required_2d_nodes +required_3d_nodes +required_material_property +required_resource +required_resource_assignment +required_resource_by_resource_item +required_resource_by_specification +required_resource_item +required_resource_relationship +requirement +requirement_assigned_item +requirement_assigned_object +requirement_assignment +requirement_assignment_item +requirement_collection_relationship +requirement_for_action_resource +requirement_satisfaction_item +requirement_source +requirement_source_item +requirement_version +requirement_version_relationship +requirement_view_definition +requirement_view_definition_relationship +reserved_space +resistance_measure +resistance_measure_with_unit +resistance_unit +resource_as_realized +resource_as_realized_assignment +resource_as_realized_item +resource_as_realized_relationship +resource_as_realized_relationship_select +resource_as_realized_resource_item +resource_assignment_item +resource_event +resource_event_correspondence_relationship +resource_event_relationship +resource_group_relationship +resource_item +resource_item_assignment +resource_item_relationship +resource_item_select +resource_property +resource_property_relationship +resource_property_representation +resource_requirement_type +resource_requirement_type_relationship +resource_with_material +resource_with_representation +responsibility_for_representation +restore_binary +restore_mulary +restore_unary +restrict_action_request_status +restrict_action_resource_requirement_for_process_operation +restrict_alternative_definition +restrict_applied_action_assignment +restrict_applied_action_request_assignment +restrict_applied_classification_assignment_role +restrict_applied_event_occurrence_assignment +restrict_applied_organizational_project_assignment +restrict_approval +restrict_approval_status +restrict_assembly_category +restrict_camera_image_in_view +restrict_centre_of_mass_representation +restrict_certification_type +restrict_class_system_assignment_for_approval_status +restrict_class_system_assignment_for_class +restrict_class_system_assignment_for_descriptive_representation_item +restrict_class_system_assignment_for_document_type +restrict_class_system_assignment_for_security_classification_level +restrict_classification_assignments +restrict_collection_category +restrict_concept_feature_operator +restrict_configuration_design_for_class_breakdown_association +restrict_configuration_design_for_design_constraint +restrict_configuration_design_for_product_class +restrict_contract_type +restrict_date_time_role +restrict_default_settings +restrict_default_thickness +restrict_document_type +restrict_drawing +restrict_effectivity_assignment_for_class_category_usage +restrict_effectivity_for_effectivity_relationship +restrict_effectivity_usage +restrict_externally_defined_item_relationship +restrict_group_relationship_for_classification_hierarchy +restrict_group_relationship_for_general_classification_hierarchy +restrict_group_relationship_for_specification_category +restrict_language_assignment_per_attribute +restrict_multi_language_for_action +restrict_multi_language_for_action_directive +restrict_multi_language_for_action_method +restrict_multi_language_for_action_property +restrict_multi_language_for_action_relationship +restrict_multi_language_for_alternate_product_relationship +restrict_multi_language_for_application_context +restrict_multi_language_for_approval_relationship +restrict_multi_language_for_assembly_component_usage_substitute +restrict_multi_language_for_certification +restrict_multi_language_for_configuration_design +restrict_multi_language_for_configuration_item +restrict_multi_language_for_contract +restrict_multi_language_for_data_environment +restrict_multi_language_for_date_role +restrict_multi_language_for_date_time_role +restrict_multi_language_for_descriptive_representation_item +restrict_multi_language_for_document_relationship +restrict_multi_language_for_draughting_title +restrict_multi_language_for_effectivity +restrict_multi_language_for_effectivity_relationship +restrict_multi_language_for_event_occurrence +restrict_multi_language_for_external_source +restrict_multi_language_for_general_property +restrict_multi_language_for_general_property_relationship +restrict_multi_language_for_geometric_representation_item +restrict_multi_language_for_geometric_tolerance +restrict_multi_language_for_group +restrict_multi_language_for_group_relationship +restrict_multi_language_for_identification_role +restrict_multi_language_for_kinematic_pair +restrict_multi_language_for_mapped_item +restrict_multi_language_for_name_assignment +restrict_multi_language_for_organization_relationship +restrict_multi_language_for_organization_role +restrict_multi_language_for_organizational_project +restrict_multi_language_for_organizational_project_relationship +restrict_multi_language_for_pair_actuator +restrict_multi_language_for_person_and_organization_role +restrict_multi_language_for_presentation_layer_assignment +restrict_multi_language_for_process_product_association +restrict_multi_language_for_product +restrict_multi_language_for_product_concept +restrict_multi_language_for_product_concept_feature +restrict_multi_language_for_product_concept_feature_association +restrict_multi_language_for_product_concept_relationship +restrict_multi_language_for_product_definition +restrict_multi_language_for_product_definition_formation +restrict_multi_language_for_product_definition_formation_relationship +restrict_multi_language_for_product_definition_relationship +restrict_multi_language_for_product_definition_substitute +restrict_multi_language_for_product_related_product_category +restrict_multi_language_for_property_definition +restrict_multi_language_for_property_definition_relationship +restrict_multi_language_for_representation +restrict_multi_language_for_representation_relationship +restrict_multi_language_for_requirement_for_action_resource +restrict_multi_language_for_resource_property +restrict_multi_language_for_resource_requirement_type +restrict_multi_language_for_security_classification +restrict_multi_language_for_shape_aspect +restrict_multi_language_for_shape_aspect_relationship +restrict_multi_language_for_styled_item +restrict_multi_language_for_time_interval_role +restrict_multi_language_for_topological_representation_item +restrict_multi_language_for_uncertainty_measure_with_unit +restrict_multi_language_for_uncertainty_qualifier +restrict_multi_language_for_versioned_action_request +restrict_multi_language_for_versioned_action_request_relationship +restrict_name_assignment_for_kinematic_joint +restrict_name_assignment_for_kinematic_link +restrict_name_assignment_for_kinematic_structure +restrict_name_for_known_source +restrict_part_occurrence +restrict_part_occurrence_category +restrict_person_organization_role +restrict_process_product_association +restrict_product_categories_for_tool_part_relationship +restrict_product_category_for_product +restrict_product_category_value +restrict_product_definition_context_for_external_properties +restrict_product_definition_context_for_product +restrict_product_definition_for_mating_tree +restrict_product_definition_substitute +restrict_product_definitions_for_base_element +restrict_product_definitions_for_collection +restrict_product_definitions_for_definition_usage +restrict_product_definitions_for_design_constraint_association +restrict_product_definitions_for_part_definition_relationship +restrict_product_definitions_for_product_definition_relationship +restrict_properties_of_document_file +restrict_properties_of_document_representation +restrict_representation_for_document_content_property +restrict_representation_for_document_creation_property +restrict_representation_for_document_format_property +restrict_representation_for_document_properties +restrict_representation_for_document_size_property +restrict_representation_for_surface_condition +restrict_representation_item_for_hybrid_geometric_model_3d +restrict_security_classification_level +restrict_shape_aspect_subtypes +restrict_treatment_result +restrict_unneeded_feature_usage +restrict_version_assignment_for_action +restrict_version_assignment_for_action_directive +restrict_version_assignment_for_action_method +restrict_version_assignment_for_applied_identification_assignment +restrict_version_assignment_for_class +restrict_version_assignment_for_configuration_item +restrict_version_assignment_for_document_file +restrict_version_assignment_for_draughting_model +restrict_version_assignment_for_effectivity +restrict_version_assignment_for_general_property +restrict_version_assignment_for_mechanical_design_geometric_presentation_representation +restrict_version_assignment_for_presentation_area +restrict_version_assignment_for_product_concept +restrict_version_assignment_for_product_concept_feature +restrict_version_assignment_for_shape_representation +restrict_viewing_plane_usage +restrict_zone_boundary +restriction_function +result +result_analysis_step +result_linear_modes_and_frequencies_analysis_sub_step +result_linear_static_analysis_sub_step +resulting_path +retention +retention_requires_retention_assignment +reversible_topology +reversible_topology_item +revision +revolute_pair +revolute_pair_range +revolute_pair_value +revolute_pair_with_range +revolved_area_solid +revolved_face_solid +revolved_face_solid_with_trim_conditions +revolved_profile +rgc_with_dimension +rib +rib_top +rib_top_floor +riemann_1d_data_name +right_angular_wedge +right_circular_cone +right_circular_cylinder +right_namespace +right_to_usage_association +rigid_link_representation +rigid_placement +rigid_subsketch +rind +role +role_and_domain +role_association +role_select +rolling_curve_pair +rolling_curve_pair_value +rolling_surface_pair +rolling_surface_pair_value +rotation_about_direction +rotational_range_measure +round_hole +rounded_end +rounded_u_profile +roundness_tolerance +routed_interconnect_component +routed_physical_component +routed_physical_shield +routed_shield +routed_transmission_line +row_representation_item +row_value +row_variable +rule_action +rule_condition +rule_definition +rule_set +rule_set_group +rule_software_definition +rule_superseded_assignment +rule_superseded_item +rule_supersedence +ruled_surface_swept_area_solid +runout_zone_definition +runout_zone_orientation +runout_zone_orientation_reference_direction +same_discretised_action_model +same_discretised_distribution_model +same_discretised_state_model +same_idealised_action +same_idealised_distribution +same_idealised_state +same_membership +same_side +satisfied_requirement +satisfies_requirement +satisfying_item +scalar +scalar_terminal_definition_link +scalar_times_vector +scalar_variable +scale +scattering_parameter +schema_based_model_parameter +scheme +scheme_entry +scheme_entry_assignment +scheme_entry_item_select +scheme_entry_relationship +scheme_relationship +scheme_subject_assignment +scheme_subject_select +scheme_version +scheme_version_assignment +scheme_version_relationship +scheme_version_select +screw_pair +screw_pair_range +screw_pair_value +screw_pair_with_range +sculptured_solid +sdgc_with_dimension +seam_curve +seam_edge +seating_plane +second_in_minute +second_proj_axis +secondary_orientation_feature +security_classification +security_classification_assignment +security_classification_item +security_classification_level +security_classification_optional_date_time +security_classification_requires_approval +security_classification_requires_assignment +security_classification_requires_date_time +security_classification_requires_person_organization +security_classification_requires_security_classification_assignment +security_classified_item +selected_instance_usage_requires_representation +selected_item +selected_item_assignment +selected_item_context_items +selected_item_select +selector_function +self_intersecting_curve +self_intersecting_geometry +self_intersecting_loop +self_intersecting_shell +self_intersecting_surface +sequence_of_state +sequence_of_state_definition +sequencing_relationship +sequential_laminate_passage_based_fabrication_joint +sequential_laminate_stackup_component +sequential_laminate_stackup_definition +sequential_method +serial_action_method +serial_effectivity +serial_numbered_effectivity +series_composed_function +set_inner_area_boundary +set_of_reversible_topology_item +set_of_topology_reversed +set_representation_item +shading_curve_method +shading_surface_method +shape +shape_aspect +shape_aspect_associativity +shape_aspect_deriving_relationship +shape_aspect_relationship +shape_aspect_relationship_representation_association +shape_aspect_relationship_subtype_exclusiveness +shape_aspect_subtype_exclusiveness +shape_aspect_transition +shape_criteria_representation_with_accuracy +shape_data_quality_assessment_by_logical_test +shape_data_quality_assessment_by_numerical_test +shape_data_quality_assessment_specification_select +shape_data_quality_criteria_representation +shape_data_quality_criterion +shape_data_quality_criterion_and_accuracy_association +shape_data_quality_inspected_shape_and_result_relationship +shape_data_quality_inspection_criterion_report +shape_data_quality_inspection_instance_report +shape_data_quality_inspection_instance_report_item +shape_data_quality_inspection_result +shape_data_quality_inspection_result_representation +shape_data_quality_lower_value_limit +shape_data_quality_upper_value_limit +shape_data_quality_value_limit +shape_data_quality_value_limit_type_select +shape_data_quality_value_range +shape_defining_relationship +shape_definition +shape_definition_3d_intersection +shape_definition_representation +shape_dependent_property_representation +shape_dependent_select +shape_description_association +shape_dimension +shape_dimension_representation +shape_dimension_representation_item +shape_element +shape_element_relationship +shape_feature_definition +shape_formed_terminal +shape_function +shape_inspection_result_accuracy_association +shape_inspection_result_representation_with_accuracy +shape_measurement_accuracy +shape_model +shape_of_array +shape_representation +shape_representation_item +shape_representation_relationship +shape_representation_requires_origin +shape_representation_subtype_exclusiveness +shape_representation_with_parameters +shape_representation_with_parameters_items +shape_select +shape_summary_request_with_representative_value +shape_tolerance_select +shapeable_item +sheets_belong_to_one_drawing +shell +shell_based_surface_model +shell_based_wireframe_model +shell_based_wireframe_shape_representation +shell_reversed +shelled_solid +short_length_curve +short_length_curve_segment +short_length_edge +shorten_array +si_absorbed_dose_unit +si_capacitance_unit +si_conductance_unit +si_dose_equivalent_unit +si_electric_charge_unit +si_electric_potential_unit +si_energy_unit +si_force_unit +si_frequency_unit +si_illuminance_unit +si_inductance_unit +si_magnetic_flux_density_unit +si_magnetic_flux_unit +si_power_unit +si_prefix +si_pressure_unit +si_radioactivity_unit +si_resistance_unit +si_unit +si_unit_name +side_milling_operation +signal +signal_category +simple_boolean_expression +simple_clause +simple_datum_reference_modifier +simple_generic_expression +simple_numeric_expression +simple_pair_range +simple_plane_2d_element_property +simple_string_expression +simplify_function_application +simplify_generic_expression +simplify_maths_space +simplify_maths_value +simulation_run +simultaneous_constraint_group +simultaneous_elements +sin_function +single_activity_relationship +single_area_csg_2d_shape_representation +single_boundary_csg_2d_shape_representation +single_point_constraint_element +single_point_constraint_element_values +single_property_dimension +single_property_is_definition +single_setup_process +single_setup_process_relationship +single_stratum_continuous_template +single_stratum_printed_component +single_stratum_printed_part_template +single_stratum_special_symbol_component +single_stratum_special_symbol_template +single_stratum_structured_template +single_stratum_template +singleton_member_of +site +site_building +site_feature +site_representation +size_select +sketch_basis_select +sketch_element_select +sketch_type_select +skew_line_distance_geometric_constraint +slash_expression +sliding_curve_pair +sliding_curve_pair_value +sliding_surface_pair +sliding_surface_pair_value +slot +slot_end +small_area_face +small_area_surface +small_area_surface_patch +small_volume_solid +smeared_material_definition +snowball_template +software_for_data_quality_check +solid_angle_measure +solid_angle_measure_with_unit +solid_angle_unit +solid_character_glyph_2d_symbol +solid_constraint +solid_curve_font +solid_freedom_action_definition +solid_freedom_and_value_definition +solid_freedom_values +solid_model +solid_replica +solid_with_angle_based_chamfer +solid_with_chamfered_edges +solid_with_circular_pattern +solid_with_circular_pocket +solid_with_circular_protrusion +solid_with_conical_bottom_round_hole +solid_with_constant_radius_edge_blend +solid_with_curved_slot +solid_with_depression +solid_with_double_offset_chamfer +solid_with_excessive_number_of_voids +solid_with_flat_bottom_round_hole +solid_with_general_pocket +solid_with_general_protrusion +solid_with_groove +solid_with_hole +solid_with_incomplete_circular_pattern +solid_with_incomplete_rectangular_pattern +solid_with_pocket +solid_with_protrusion +solid_with_rectangular_pattern +solid_with_rectangular_pocket +solid_with_rectangular_protrusion +solid_with_shape_element_pattern +solid_with_single_offset_chamfer +solid_with_slot +solid_with_spherical_bottom_round_hole +solid_with_stepped_round_hole +solid_with_stepped_round_hole_and_conical_transitions +solid_with_straight_slot +solid_with_tee_section_slot +solid_with_through_depression +solid_with_trapezoidal_section_slot +solid_with_variable_radius_edge_blend +solid_with_wrong_number_of_voids +solution_definition_requires_solution_category +sort_link_associations +source +source_for_requirement +source_item +sourced_requirement +space_constraint_type +space_context_select +space_dimension +space_is_continuum +space_is_singleton +spacer_fitting_classification +spatial_decomposition_of_numerical_model +spatial_decomposition_of_temporal_spatial_domain +spatial_location +spatial_rotation +special_symbol_template +specialization +specialization_by_domain +specialization_by_role +specialization_of_individual_dimension_from_property +specialty_item_classification +specification_definition +specified_general_property +specified_higher_usage_occurrence +specified_item +specified_representation_context +specified_state +sphere +spherical_cap +spherical_pair +spherical_pair_range +spherical_pair_select +spherical_pair_value +spherical_pair_with_pin +spherical_pair_with_pin_and_range +spherical_pair_with_range +spherical_point +spherical_surface +spherical_volume +spline_curve_population_constraint +sql_mappable_defined_function +square_root_function +square_u_profile +standard_table_function +standard_uncertainty +start_request +start_request_item +start_request_requires_approval +start_request_requires_date_time +start_request_requires_person_organization +start_work +start_work_requires_approval +start_work_requires_date_time +state +state_assertion +state_assessment +state_cause_effect +state_cause_effect_definition +state_complement_definition +state_component +state_definition +state_definition_of_item +state_definition_relationship +state_definition_role +state_item +state_observed +state_observed_assignment +state_observed_item +state_observed_relationship +state_observed_role +state_of_item +state_or_state_definition_select +state_predicted +state_predicted_to_observed +state_proper_subset_definition +state_relationship +state_role +state_subset_definition +state_symptom_definition +state_transition +state_transition_definition +state_type +state_type_assignment +state_type_relationship +state_type_role +state_view_relationship +state_with_harmonic +stationary_mass +statistical_dimensional_location +statistical_dimensional_size +statistical_distribution_for_tolerance +statistical_geometric_tolerance +statistical_value_type +status +steep_angle_between_adjacent_edges +steep_angle_between_adjacent_faces +steep_geometry_transition_across_edge +step +stock_material_reference +straightness_tolerance +stratum +stratum_feature +stratum_feature_based_derived_pattern +stratum_feature_conductive_join +stratum_feature_template +stratum_feature_template_component +stratum_feature_template_component_with_stratum_feature +stratum_specific_template_location +stratum_stack_dependent_template +stratum_stack_model +stratum_sub_stack +stratum_surface +stratum_surface_technology +stratum_technology +stratum_technology_mapping_relationship +stratum_technology_occurrence +stratum_technology_occurrence_feature_constraint +stratum_technology_occurrence_link +stratum_technology_occurrence_relationship +stratum_technology_occurrence_swap_relationship +stratum_technology_swap_relationship +stream +stream_design_case +stream_phase +strict_triangular_matrix +strictly_in +string_defined_function +string_expression +string_literal +string_representation_item +string_representation_item_select +string_select +string_variable +stripped_typeof +structural_load_connector_classification +structural_response_property +structural_response_property_definition_representation +structural_system +structured_dimension_callout +structured_donor_mesh +structured_inter_stratum_feature_template +structured_layout_component +structured_layout_component_sub_assembly_relationship +structured_layout_component_sub_assembly_relationship_with_component +structured_mesh +structured_mesh_type +structured_mesh_with_rind +structured_printed_part_template +structured_printed_part_template_terminal +structured_task_element +structured_template +structured_text_composition +structured_text_representation +sts_get_general_datum_reference +sts_get_product_definition_shape +style_context_select +styled_curve +styled_item +styled_item_target +su_parameters +subedge +subface +submesh +subset +subsketch +subspace_of +subspace_of_es +substitute +substring_expression +substructure_element_representation +substructure_node_reference +substructure_node_relationship +subtype_exclusive_characterized_object +subtype_exclusive_shape_representation +subtype_exclusiveness_action +subtype_exclusiveness_action_resource +subtype_exclusiveness_action_resource_relationship +subtype_exclusiveness_characterized_object +subtype_exclusiveness_classification_assignment +subtype_exclusiveness_colour +subtype_exclusiveness_compound_representation_item +subtype_exclusiveness_contract +subtype_exclusiveness_document +subtype_exclusiveness_document_reference +subtype_exclusiveness_effectivity +subtype_exclusiveness_effectivity_assignment +subtype_exclusiveness_effectivity_context_assignment +subtype_exclusiveness_externally_defined_item +subtype_exclusiveness_feature_component_relationship +subtype_exclusiveness_feature_definition +subtype_exclusiveness_founded_item +subtype_exclusiveness_geometric_tolerance +subtype_exclusiveness_group +subtype_exclusiveness_group_assignment +subtype_exclusiveness_identification_assignment +subtype_exclusiveness_mapped_item +subtype_exclusiveness_pre_defined_item +subtype_exclusiveness_pre_defined_symbol +subtype_exclusiveness_presentation_area +subtype_exclusiveness_presentation_representation +subtype_exclusiveness_property_definition +subtype_exclusiveness_property_definition_representation +subtype_exclusiveness_replicate_feature +subtype_exclusiveness_representation +subtype_exclusiveness_representation_item +subtype_exclusiveness_representation_map +subtype_exclusiveness_representation_relationship +subtype_exclusiveness_representation_relationship_with_transformation +subtype_exclusiveness_resource_property +subtype_exclusiveness_shape_aspect +subtype_exclusiveness_shape_aspect_relationship +subtype_exclusiveness_shape_representation +subtype_exclusiveness_shape_representation_feature_geometry +subtype_exclusiveness_shape_representation_geometry +subtype_exclusiveness_symbol_representation +subtype_exclusiveness_transition_feature +subtype_mandatory_action +subtype_mandatory_address +subtype_mandatory_annotation_occurrence +subtype_mandatory_camera_image +subtype_mandatory_camera_model +subtype_mandatory_characterized_object +subtype_mandatory_colour_specification +subtype_mandatory_configurable_item +subtype_mandatory_document_product_association +subtype_mandatory_draughting_callout +subtype_mandatory_effectivity +subtype_mandatory_externally_defined_item +subtype_mandatory_founded_item +subtype_mandatory_geometric_tolerance +subtype_mandatory_pre_defined_colour +subtype_mandatory_pre_defined_curve_font +subtype_mandatory_pre_defined_item +subtype_mandatory_pre_defined_symbol +subtype_mandatory_pre_defined_text_font +subtype_mandatory_product_context +subtype_mandatory_product_definition_formation +subtype_mandatory_product_definition_usage +subtype_mandatory_representation +subtype_mandatory_representation_context +subtype_mandatory_shape_representation +suitably_based_mechanism +summary_report_request +summary_report_type +supplied_part_relationship +support_constraint_representation +supported_item +surface +surface_2d_edge +surface_2d_element_basis +surface_2d_element_boundary_constant_specified_surface_variable_value +surface_2d_element_boundary_constant_specified_variable_value +surface_2d_element_boundary_edge_constant_specified_surface_variable_value +surface_2d_element_boundary_edge_constant_specified_variable_value +surface_2d_element_boundary_edge_location_point_surface_variable_values +surface_2d_element_boundary_edge_location_point_variable_values +surface_2d_element_boundary_edge_nodal_specified_variable_values +surface_2d_element_boundary_edge_whole_edge_variable_value +surface_2d_element_boundary_location_point_surface_variable_values +surface_2d_element_boundary_nodal_specified_variable_values +surface_2d_element_boundary_whole_face_variable_value +surface_2d_element_constant_specified_variable_value +surface_2d_element_constant_specified_volume_variable_value +surface_2d_element_coordinate_system +surface_2d_element_descriptor +surface_2d_element_field_variable_definition +surface_2d_element_group +surface_2d_element_integrated_matrix +surface_2d_element_integrated_matrix_with_definition +surface_2d_element_integration +surface_2d_element_length_integration +surface_2d_element_length_integration_explicit +surface_2d_element_length_integration_rule +surface_2d_element_location_point_variable_values +surface_2d_element_location_point_volume_variable_values +surface_2d_element_nodal_specified_variable_values +surface_2d_element_output_reference +surface_2d_element_representation +surface_2d_element_value_and_location +surface_2d_element_value_and_volume_location +surface_2d_face +surface_2d_node_field_aggregated_variable_values +surface_2d_node_field_section_variable_values +surface_2d_node_field_variable_definition +surface_2d_state_coordinate_system +surface_2d_substructure_element_reference +surface_2d_whole_element_variable_value +surface_3d_edge +surface_3d_element_basis +surface_3d_element_boundary_constant_specified_surface_variable_value +surface_3d_element_boundary_constant_specified_variable_value +surface_3d_element_boundary_edge_constant_specified_surface_variable_value +surface_3d_element_boundary_edge_constant_specified_variable_value +surface_3d_element_boundary_edge_location_point_surface_variable_values +surface_3d_element_boundary_edge_location_point_variable_values +surface_3d_element_boundary_edge_nodal_specified_variable_values +surface_3d_element_boundary_edge_whole_edge_variable_value +surface_3d_element_boundary_location_point_surface_variable_values +surface_3d_element_boundary_nodal_specified_variable_values +surface_3d_element_boundary_whole_face_variable_value +surface_3d_element_constant_specified_variable_value +surface_3d_element_constant_specified_volume_variable_value +surface_3d_element_coordinate_system +surface_3d_element_descriptor +surface_3d_element_field_integration +surface_3d_element_field_integration_explicit +surface_3d_element_field_integration_rule +surface_3d_element_field_variable_definition +surface_3d_element_group +surface_3d_element_integrated_matrix +surface_3d_element_integrated_matrix_with_definition +surface_3d_element_integration +surface_3d_element_location_point_variable_values +surface_3d_element_location_point_volume_variable_values +surface_3d_element_nodal_specified_variable_values +surface_3d_element_output_reference +surface_3d_element_representation +surface_3d_element_value_and_location +surface_3d_element_value_and_volume_location +surface_3d_face +surface_3d_node_field_aggregated_variable_values +surface_3d_node_field_section_variable_values +surface_3d_node_field_variable_definition +surface_3d_state_coordinate_system +surface_3d_substructure_element_reference +surface_3d_whole_element_variable_value +surface_boundary +surface_boundary_type +surface_condition_callout +surface_condition_correlation +surface_constraint +surface_curve +surface_curve_swept_area_solid +surface_distance_assembly_constraint_with_dimension +surface_distance_geometric_constraint +surface_element_location +surface_element_property +surface_element_purpose +surface_element_variable +surface_freedom_action_definition +surface_freedom_and_value_definition +surface_freedom_values +surface_matrix_property_type +surface_model +surface_of_linear_extrusion +surface_of_revolution +surface_or_solid_model +surface_pair +surface_pair_range +surface_pair_with_range +surface_patch +surface_patch_set +surface_position_weight +surface_prepped_terminal +surface_profile_tolerance +surface_rendering_properties +surface_replica +surface_scalar_variable +surface_section +surface_section_element_location +surface_section_element_location_absolute +surface_section_element_location_dimensionless +surface_section_field +surface_section_field_constant +surface_section_field_varying +surface_section_integration +surface_section_integration_explicit +surface_section_integration_rule +surface_section_position_weight +surface_side +surface_side_style +surface_side_style_select +surface_smoothness_geometric_constraint +surface_style_boundary +surface_style_control_grid +surface_style_element_select +surface_style_fill_area +surface_style_parameter_line +surface_style_reflectance_ambient +surface_style_reflectance_ambient_diffuse +surface_style_reflectance_ambient_diffuse_specular +surface_style_rendering +surface_style_rendering_with_properties +surface_style_segmentation_curve +surface_style_silhouette +surface_style_transparent +surface_style_usage +surface_tensor2_2d_variable +surface_texture_representation +surface_tolerance_deviation +surface_tolerance_parameter +surface_vector_2d_variable +surface_vector_3d_variable +surface_volume_element_location +surface_weights_positive +surface_with_excessive_patches_in_one_direction +surface_with_small_curvature_radius +surfaced_open_shell +swage_fitting_classification +swept_area_solid +swept_curve_surface_geometric_constraint +swept_disk_solid +swept_face_solid +swept_point_curve_geometric_constraint +swept_surface +swept_surface_or_solid +symbol +symbol_colour +symbol_representation +symbol_representation_map +symbol_style +symbol_style_select +symbol_target +symmetric_banded_matrix +symmetric_matrix +symmetric_shape_aspect +symmetric_tensor2_2d +symmetric_tensor2_3d +symmetric_tensor4_2d +symmetric_tensor4_3d +symmetry_control +symmetry_geometric_constraint +symmetry_tolerance +symmetry_type +system_and_freedom +system_breakdown +system_breakdown_context +system_breakdown_version +system_classification +system_element +system_element_definition +system_element_usage +system_element_version +system_space +table_representation_item +tactile_appearance_representation +tagged_text_format +tagged_text_item +tan_function +tangent +tangent_assembly_constraint +tangent_contact_type +tangent_geometric_constraint +taper +tapping_operation +task_element +task_element_assignment +task_element_levels +task_element_relationship +task_element_sequence +task_element_state_relationship +task_invocation +task_item +task_method +task_method_assignment +task_method_relationship +task_method_state_relationship +task_method_version +task_method_version_assignment +task_method_version_relationship +task_objective +task_objective_state_relationship +task_step +teardrop_by_angle_template +teardrop_by_length_template +teardrop_template +tee_profile +template_instance +template_material_cross_section_boundary +temporal_bounding +temporal_decomposition_of_action_domain +temporal_decomposition_of_model_action +temporal_sequence +temporal_spatial_domain +temporal_spatial_domain_for_model +temporal_whole_part +tensor1_2d +tensor1_3d +tensor_representation_item +tensor_type +terminator_symbol +terminator_symbol_constraint +tertiary_orientation_feature +tessellated_annotation_occurrence +tessellated_connecting_edge +tessellated_curve_set +tessellated_edge +tessellated_edge_or_vertex +tessellated_face +tessellated_geometric_set +tessellated_item +tessellated_point_set +tessellated_shape_representation +tessellated_shell +tessellated_solid +tessellated_structured_item +tessellated_surface_set +tessellated_vertex +tessellated_wire +test_method_based_parameter_assignment +test_point_part_feature +tetrahedron +text +text_alignment +text_delineation +text_font +text_font_family +text_font_in_family +text_font_usage +text_literal +text_literal_with_associated_curves +text_literal_with_blanking_box +text_literal_with_delineation +text_literal_with_extent +text_or_character +text_path +text_string_representation +text_string_representation_item +text_style +text_style_for_defined_font +text_style_with_box_characteristics +text_style_with_mirror +text_style_with_spacing +thermal_component +thermal_conductivity_model +thermal_conductivity_model_data_name +thermal_conductivity_model_type +thermal_feature +thermal_isolation_removal_component +thermal_isolation_removal_template +thermal_network +thermal_network_node_definition +thermal_requirement_allocation +thermal_resistance_measure_with_unit +thermal_resistance_unit +thermodynamic_temperature_measure +thermodynamic_temperature_measure_with_unit +thermodynamic_temperature_unit +thickened_face_solid +thickness_laminate_definition +thickness_laminate_table +thickness_laminate_table_component_select +thing +thread +thread_runout +threading_turning_operation +through_port_variable +tiebar_printed_component +tile_area_template +time_interval +time_interval_assignment +time_interval_based_effectivity +time_interval_effectivity +time_interval_item +time_interval_relationship +time_interval_role +time_interval_with_bounds +time_measure +time_measure_with_unit +time_offset +time_role +time_unit +tolerance_deviation_select +tolerance_method_definition +tolerance_parameter_select +tolerance_select +tolerance_value +tolerance_with_statistical_distribution +tolerance_zone +tolerance_zone_boundary +tolerance_zone_definition +tolerance_zone_explicit_opposing_boundary_set +tolerance_zone_form +tolerance_zone_form_name_constraint +tolerance_zone_implicit_opposing_boundary_set +tolerance_zone_target +tool_assembly +tool_assembly_element +tool_assembly_relationship +tool_body +tool_contract +tool_data +tool_data_representation +tool_magazine_turret_carousel +tool_registration_mark +tool_setup +topological_representation_item +topology_related_to_multiply_defined_geometry +topology_related_to_nearly_degenerate_geometry +topology_related_to_overlapping_geometry +topology_related_to_self_intersecting_geometry +topology_reversed +toroidal_surface +torus +total_runout_tolerance +trace_template +tracing_relationship +track_blended_solid +track_blended_solid_with_end_conditions +transform_port_variable +transformation +transformation_based_template_instance +transformation_with_derived_angle +transition_code +transition_feature +transition_feature_life_cycle +transition_feature_on_part_boundary +translational_range_measure +triangular_matrix +triangulated_face +triangulated_surface_set +trim_condition_select +trim_intent +trimmed_curve +trimming_preference +trimming_select +truncated_pyramid +tuple_space +turbulence_closure +turbulence_closure_data_name +turbulence_closure_type +turbulence_model +turbulence_model_data_name +turbulence_model_type +turned_knurl +turning_type_operation +turning_type_strategy +two_direction_repeat_factor +type_check_function +type_of_person +type_of_person_assignment +type_of_person_definition +type_of_person_definition_relationship +type_of_person_definition_required_attributes_relationship +type_of_person_item_select +type_qualifier +types_of_product +u_direction_count +u_or_v_parameter +unambiguously_specified_multi_level_reference_designator +unary_boolean_expression +unary_function_call +unary_generic_expression +unary_numeric_expression +unbound_parameter_environment +unbound_variational_parameter +unbound_variational_parameter_semantics +uncertainty_assigned_representation +uncertainty_measure_with_unit +uncertainty_qualifier +uncertainty_with_unit +unconstrained_pair +unconstrained_pair_value +unequally_disposed_geometric_tolerance +uniform_curve +uniform_product_space +uniform_resource_identifier +uniform_surface +uniform_surface_section +uniform_surface_section_layered +union +union_of_set_of_class +unique_datum_system +unique_gdt_element_id_constraint +unique_in_product_definition +unique_in_shape_aspect +unique_link_usage +unique_version_change_order +unique_version_change_order_rule +unit +universal_pair +universal_pair_range +universal_pair_value +universal_pair_with_range +unlimited_range +unplated_cutout_edge_segment +unplated_interconnect_module_edge_segment +unrouted_conductive_interconnect_element +unspecified_value +unstructured_donor_mesh +unstructured_mesh +unsupported_passage +unsupported_passage_dependent_land +unsupported_passage_template +unused_patches +unused_shape_element +upper_bound_of_number_range +upper_bound_of_property_range +usage_association +usage_concept_usage_relationship +usage_of_representation +usage_view_connection_zone_terminal_shape_relationship +used_quality_representation_select +used_variables +user_defined_curve_font +user_defined_marker +user_defined_terminator_symbol +user_selected_elements +user_selected_shape_elements +using_items +using_product_definition_of_shape_aspect +using_product_definition_of_shape_representation +using_representation_with_mapping +using_representations +using_shape_aspect_of_shape_representation +v_direction_count +valid_2d_wireframe_edge_curve +valid_advanced_csg_tree +valid_basis_curve_in_2d_wireframe +valid_calendar_date +valid_csg_2d_primitives +valid_datum_target_parameters +valid_document_property_representation +valid_geometrically_bounded_wf_curve +valid_geometrically_bounded_wf_point +valid_measure_value +valid_parametric_coordinate +valid_product_and_manufacturing_information_view_contexts +valid_range_property_definition_representation +valid_selected_instance_representation +valid_time +valid_units +valid_wireframe_edge_curve +valid_wireframe_vertex_point +validate_accuracy_types +validate_attribute_id +validate_countersink_radii +validate_dependently_instantiable_entity_data_types +validate_ecdq_inspected_elements_type +validate_inspected_elements_type +validate_locations_of_extreme_value_type +validate_measured_data_type +validation +value_format_type +value_format_type_qualifier +value_function +value_limit +value_limit_type +value_limit_with_global_unit +value_list +value_qualifier +value_range +value_range_aggregate_rep_item +value_range_with_global_unit +value_range_wr1 +value_range_wr2 +value_range_wr3 +value_representation_item +value_set +value_with_tolerances +value_with_unit +values_space_of +valve_classification +variable +variable_expression +variable_semantics +variable_value_type +variational_current_representation_relationship +variational_parameter +variational_representation +variational_representation_item +vector +vector_difference +vector_or_direction +vector_style +vee_profile +velocity_measure +velocity_measure_with_unit +velocity_unit +verify_angle_measure_action_property +verify_angle_measure_rep_item +verify_ball_endmill_edge_dimensions +verify_count_measure_rep_item +verify_descriptive_action_property +verify_descriptive_rep_item +verify_enumeration_action_property +verify_enumeration_rep_item +verify_length_measure_action_property +verify_length_measure_rep_item +verify_length_measure_resource_property +verify_linear_speed_measure_rep_item +verify_numeric_measure_action_property +verify_optional_action_property +verify_optional_in_process_geometry +verify_optional_relating_amr +verify_optional_relating_amr_with_name +verify_optional_rep_item +verify_optional_resource_property +verify_parameter_action_property +verify_pressure_measure_action_property +verify_ratio_measure_action_property +verify_ratio_measure_rep_item +verify_related_type_for_amr +verify_related_type_for_amr_with_name +verify_rep_desc_for_action_property +verify_rep_item_for_action_property +verify_rep_item_for_resource_property +verify_rep_type_for_action_property +verify_rep_type_for_resource_property +verify_required_action_property +verify_required_relating_amr +verify_required_relating_amr_with_name +verify_required_rep_item +verify_required_resource_property +verify_rotary_speed_measure_rep_item +verify_time_measure_action_property +verify_time_measure_rep_item +verify_time_measure_resource_property +version_or_definition +versioned_action_request +versioned_action_request_relationship +versioned_action_request_requires_change_action +versioned_action_request_requires_date_and_person_or_organization +versioned_action_request_requires_solution +versioned_action_request_requires_status +vertex +vertex_defined_cell +vertex_loop +vertex_point +vertex_shell +via +via_template +view_definition_context +view_definition_relationship +view_definition_usage +view_reference +view_relationship +view_volume +viewing_plane +viscosity_model +viscosity_model_data_name +viscosity_model_type +visual_appearance_representation +visual_orientation_feature +volume +volume_2d_edge +volume_2d_element_basis +volume_2d_element_boundary_constant_specified_variable_value +volume_2d_element_boundary_edge_constant_specified_volume_variable_value +volume_2d_element_boundary_edge_location_point_volume_variable_values +volume_2d_element_boundary_edge_nodal_specified_variable_values +volume_2d_element_boundary_edge_whole_edge_variable_value +volume_2d_element_boundary_location_point_variable_values +volume_2d_element_boundary_nodal_specified_variable_values +volume_2d_element_boundary_whole_face_variable_value +volume_2d_element_constant_specified_variable_value +volume_2d_element_coordinate_system +volume_2d_element_descriptor +volume_2d_element_field_integration +volume_2d_element_field_integration_explicit +volume_2d_element_field_integration_rule +volume_2d_element_field_variable_definition +volume_2d_element_group +volume_2d_element_integrated_matrix +volume_2d_element_integrated_matrix_with_definition +volume_2d_element_location_point_variable_values +volume_2d_element_nodal_specified_variable_values +volume_2d_element_output_reference +volume_2d_element_representation +volume_2d_element_value_and_location +volume_2d_face +volume_2d_node_field_variable_definition +volume_2d_substructure_element_reference +volume_2d_whole_element_variable_value +volume_3d_edge +volume_3d_element_basis +volume_3d_element_boundary_constant_specified_variable_value +volume_3d_element_boundary_edge_constant_specified_volume_variable_value +volume_3d_element_boundary_edge_location_point_volume_variable_values +volume_3d_element_boundary_edge_nodal_specified_variable_values +volume_3d_element_boundary_edge_whole_edge_variable_value +volume_3d_element_boundary_location_point_variable_values +volume_3d_element_boundary_nodal_specified_variable_values +volume_3d_element_boundary_whole_face_variable_value +volume_3d_element_constant_specified_variable_value +volume_3d_element_coordinate_system +volume_3d_element_descriptor +volume_3d_element_field_integration +volume_3d_element_field_integration_explicit +volume_3d_element_field_integration_rule +volume_3d_element_field_variable_definition +volume_3d_element_group +volume_3d_element_integrated_matrix +volume_3d_element_integrated_matrix_with_definition +volume_3d_element_location_point_variable_values +volume_3d_element_nodal_specified_variable_values +volume_3d_element_output_reference +volume_3d_element_representation +volume_3d_element_shape +volume_3d_element_value_and_location +volume_3d_face +volume_3d_node_field_variable_definition +volume_3d_substructure_element_reference +volume_3d_whole_element_variable_value +volume_aggregated_variable +volume_angular_variable +volume_element_location +volume_element_purpose +volume_measure +volume_measure_with_unit +volume_position_weight +volume_scalar_variable +volume_tensor2_3d_variable +volume_unit +volume_variable +volume_vector_3d_variable +week_in_year_number +week_of_year_and_day_date +whole_life_individual +whole_model_analysis_message +whole_model_modes_and_frequencies_analysis_message +wire_shell +wire_terminal +wire_terminal_template_definition +wireframe_model +work_cell +work_item +work_order +work_output +work_output_assignment +work_output_item +work_output_relationship +work_request +work_request_status +workstation +wrong_element_name +wrongly_oriented_void +wrongly_placed_loop +wrongly_placed_void +xor_expression +xor_state_cause_effect_definition +year_month +year_number +ypr_enumeration +ypr_index +ypr_rotation +zero_or_one +zero_surface_normal +zone_breakdown +zone_breakdown_context +zone_breakdown_version +zone_element +zone_element_definition +zone_element_usage +zone_element_version +zone_structural_makeup diff --git a/src/express/test/hash_test.c b/src/express/test/hash_test.c new file mode 100644 index 000000000..361b57e84 --- /dev/null +++ b/src/express/test/hash_test.c @@ -0,0 +1,222 @@ +#include +#include + +#include "bstrlib.h" +#include "express/hash.h" + +#define error_helper(fmt, ...) \ + do { fprintf(stderr, "error, line %i: " fmt "\n", __LINE__, __VA_ARGS__); exit(1); } while (0) +#define error(...) error_helper(__VA_ARGS__, 0) + +int main(int argc, char *argv[]) { + FILE *fp; + bstring buf, id; + struct bstrList *testdata; + unsigned int i, qty; + Hash_Table tbl; + Symbol *ep; + Symbol e; + Hash_Iterator it; + + if (argc < 2) + error("no input files"); + + fp = fopen(argv[1], "r"); + if (!fp) + error("failed to open input!"); + + buf = bread((bNread) fread, fp); + if (!buf) + error("failed to read input!"); + + if (fclose(fp)) + error("failed to correctly close input file!"); + + testdata = bsplit(buf, '\n'); + qty = testdata->qty; + + tbl = HASHcreate(); + + /* HASHsearch INSERT */ + for (i = 0; i < testdata->qty; i++) { + id = testdata->entry[i]; + if (id->slen > 0 && btrimws(id) == BSTR_ERR) + error("btrimws failed?!"); + + if (!id->slen) { + qty--; + continue; + } + + ep = HASHsearch(tbl, (Symbol) {.name = id->data, .data = id}, HASH_INSERT); + if (!ep) + error("HASHsearch HASH_INSERT failed!"); + } + + /* HASHsearch FIND */ + for (i = 0; i < testdata->qty; i++) { + id = testdata->entry[i]; + + if (!id->slen) + continue; + + ep = HASHsearch(tbl, (Symbol) {.name = id->data, .data = id}, HASH_FIND); + if (!ep) + error("HASHsearch HASH_FIND failed!"); + } + + /* HASHdo */ + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + if (i != qty) + error("HASHdo failed! expected: %d, got: %d", qty, i); + + if (qty != 6512) + error("HASHdelete tests require a specific test input file, and build parameters"); + + /* expected collisions + * [change_action, + * device_terminal_map, + * fea_column_normalised_orthotropic_symmetric_tensor4_3d, + * fill_area_style_tile_symbol_with_style, + * ifcorthogonalcomplement, + * time_interval_with_bounds] + * + */ + e = (Symbol) {.name = "fea_column_normalised_orthotropic_symmetric_tensor4_3d"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (#, #, x, #, #, #, #), expected %d, got %d", qty, i); + + e = (Symbol) {.name = "ifcorthogonalcomplement"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (#, #, _, #, #, x, #), expected %d, got %d", qty, i); + + /* + * expected collisions + * [evaluation_product_definition, + * ifcfurniture, + * ifcreloverridesproperties, + * language, + * physical_state_domain] + */ + e = (Symbol) {.name = "ifcfurniture"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (#, x, #, #, #), expected %d, got %d", qty, i); + + e = (Symbol) {.name = "physical_state_domain"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (#, _, #, #, x), expected %d, got %d", qty, i); + + /* + * [action_resource_relationship, + * annotation_occurrence_relationship, + * erroneous_data, + * ifclinearvelocitymeasure] + */ + e = (Symbol) {.name = "action_resource_relationship"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (x, #, #, #), expected %d, got %d", qty, i); + + /* + * [choose_representation_context_identifier, + * dependent_instantiable_text_style] + */ + e = (Symbol) {.name = "choose_representation_context_identifier"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (x, #), expected %d, got %d", qty, i); + + e = (Symbol) {.name = "dependent_instantiable_text_style"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (_, x), expected %d, got %d", qty, i); + + /* + * [connector_based_interconnect_definition] + */ + e = (Symbol) {.name = "connector_based_interconnect_definition"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + qty--; + if (i != qty) + error("HASHdelete failed (x,), expected %d, got %d", qty, i); + + e = (Symbol) {.name = "connector_based_interconnect_definition"}; + HASHdelete(tbl, &e); + + i = 0; + HASHdo_init(tbl, &it, OBJ_ANY); + while (HASHdo(&it)) + i++; + + if (i != qty) + error("HASHdelete failed (_,), expected %d, got %d", qty, i); + + HASHdestroy(tbl); + bstrListDestroy(testdata); + bdestroy(buf); + + exit(0); +} diff --git a/src/express/test/parser_test.c b/src/express/test/parser_test.c new file mode 100644 index 000000000..514e908ae --- /dev/null +++ b/src/express/test/parser_test.c @@ -0,0 +1,33 @@ +#include + +#include "lexsupport.h" + +int main(int argc, char *argv[]) +{ + int tok; + struct YYSTYPE yylval; + struct YYSTATE *pState; + void *pParser, *pScanner; + FILE *fp; + + if (argc < 2) + yyerror("no input files!", 0); + + fp = fopen(argv[1], "r"); + if (!fp) + yyerror("failed to open input!", 0); + + pScanner = yylexAlloc(); + pParser = yyparseAlloc(malloc); + pState = yystateAlloc(); + + yylexInit(pScanner, pState, fp); + + // yyparseTrace(stderr, "dbg: "); + while ((tok = yylex(pScanner, &yylval))) { + yyparse(pParser, tok, &yylval, pState); + } + yyparse(pParser, 0, &yylval, pState); + + exit(0); +} diff --git a/src/express/test/print_attrs.c b/src/express/test/print_attrs.c index 881ada059..714731a50 100644 --- a/src/express/test/print_attrs.c +++ b/src/express/test/print_attrs.c @@ -16,13 +16,16 @@ #ifdef HAVE_UNISTD_H # include #endif -#include -#include -#include -#include -#include "ordered_attrs.h" + #include +#include "express/info.h" +#include "express/express.h" +#include "express/scope.h" +#include "express/variable.h" +#include "express/hash.h" +#include "ordered_attrs.h" + char * entityName, _buf[512] = { 0 }; /** prints usage info specific to print_attrs */ @@ -70,13 +73,14 @@ void print_attrs( Entity ent ) { } void find_and_print( Express model ) { - DictionaryEntry de; + Hash_Iterator it; Schema s; Entity e; - DICTdo_init( model->symbol_table, &de ); - while( 0 != ( s = (Schema) DICTdo( &de ) ) ) { + + HASHdo_init(model->symbol_table, &it, OBJ_ANY); + while((s = HASHdo(&it))) { printf( "Schema %s\n", s->symbol.name ); - e = (Entity) DICTlookup( s->symbol_table, entityName ); + e = HASHsearch(s->symbol_table, (Symbol) {.name = entityName}, HASH_FIND); if( e ) { print_attrs( e ); } diff --git a/src/express/test/print_schemas.c b/src/express/test/print_schemas.c index 40bb0a1e0..43d11c4e7 100644 --- a/src/express/test/print_schemas.c +++ b/src/express/test/print_schemas.c @@ -13,16 +13,17 @@ # include #endif #include "express/express.h" +#include "express/hash.h" void print_schemas( Express model ) { - DictionaryEntry de; + Hash_Iterator it; Schema s; printf( "File: %s\n ", model->u.express->filename ); - DICTdo_init( model->symbol_table, &de ); - while( 0 != ( s = (Schema) DICTdo( &de ) ) ) { + HASHdo_init( model->symbol_table, &it, OBJ_ANY ); + while((s = HASHdo(&it))) { printf( "%s", s->symbol.name ); } printf( "\n" ); diff --git a/src/express/test/scanner_test.c b/src/express/test/scanner_test.c new file mode 100644 index 000000000..2c0ef0943 --- /dev/null +++ b/src/express/test/scanner_test.c @@ -0,0 +1,33 @@ +#include "lexsupport.h" + +/* stubs */ +Symbol * SYMBOLcreate( char * name, int ref_tok, int line, const char * filename ) { + return NULL; +} + +int main(int argc, char **argv) +{ + FILE *fp; + struct YYSTATE *pState; + struct exp_scanner *pScanner; + YYSTYPE yylval; + + if (argc < 2) { + fprintf(stderr, "no input files\n"); + return 1; + } + + fp = fopen(argv[1], "r"); + if (!fp) + yyerror("failed to open input!", 0); + + + pScanner = yylexAlloc(); + pState = yystateAlloc(); + yylexInit(pScanner, pState, fp); + + while(yylex(pScanner, &yylval) != 0) + ; + + fclose(fp); +} diff --git a/src/express/test/test_expr.c b/src/express/test/test_expr.c index 72c4d3e14..2388acdd1 100644 --- a/src/express/test/test_expr.c +++ b/src/express/test/test_expr.c @@ -5,9 +5,10 @@ /* core */ #include "express/hash.h" #include "express/linklist.h" +#include "expparse.h" /* non-core */ -#include "express/dict.h" +#include "express/hash.h" #include "express/variable.h" #include "driver.h" @@ -21,10 +22,6 @@ char * EXPRESSprogram_name; int yylineno; int __SCOPE_search_id; -Error ERROR_warn_unsupported_lang_feat; -Error WARNING_case_skip_label; -Error ERROR_undefined_attribute; - /* * mock functions */ @@ -47,18 +44,23 @@ void setup() { RESET_FAKE(EXP_resolve); } -/* TODO: remove DICTlookup after eliminating DICT_type */ void EXP_resolve_type_handler(Expression exp, Scope cxt, Type typ) { (void) typ; - Type res_typ = DICTlookup(cxt->symbol_table, exp->symbol.name); - exp->type = res_typ; - exp->return_type = res_typ; + Symbol *ep; + + ep = HASHsearch(cxt->symbol_table, exp->symbol, HASH_FIND); + if (!ep) + return; + + exp->type = ep->data; + exp->return_type = ep->data; exp->symbol.resolved = RESOLVED; } int test_resolve_select_enum_member() { Schema scope; - Symbol *e_type_id, *enum_id, *s_type_id; + Symbol e; + Symbol *e_type_id, *enum_id_inner, *enum_id_outer, *s_type_id; Type enum_typ, select_typ, chk_typ; TypeBody tb; Expression expr, op1, op2, exp_enum_id; @@ -68,37 +70,42 @@ int test_resolve_select_enum_member() { */ scope = SCHEMAcreate(); - s_type_id = SYMBOLcreate("sel1", 1, "test1"); - e_type_id = SYMBOLcreate("enum1", 1, "test1"); - enum_id = SYMBOLcreate("val1", 1, "test1"); + e = (Symbol) {.name = "sel1", .type = OBJ_TYPE, .ref_tok = T_TYPE_REF}; + s_type_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); + /* TODO: check use of OBJ_ENUM / OBJ_TYPE */ + e = (Symbol) {.name ="enum1", .type = OBJ_TYPE, .ref_tok = T_TYPE_REF}; + e_type_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); enum_typ = TYPEcreate_name(e_type_id); - enum_typ->symbol_table = DICTcreate(50); + enum_typ->symbol_table = HASHcreate(); + enum_typ->symbol = e; + e_type_id->data = enum_typ; + /* TODO: check use of OBJ_ENUM / OBJ_TYPE */ + /* TODO: OBJ_ENUM / OBJ_EXPRESSION are used interchangeably, this is confusing. */ + e = (Symbol) {.name = "val1", .type = OBJ_ENUM, .ref_tok = T_ENUMERATION_REF}; + enum_id_outer = HASHsearch(scope->enum_table, e, HASH_INSERT); + enum_id_inner = HASHsearch(enum_typ->symbol_table, e, HASH_INSERT); exp_enum_id = EXPcreate(enum_typ); - exp_enum_id->symbol = *enum_id; + exp_enum_id->symbol = e; exp_enum_id->u.integer = 1; + enum_id_outer->data = exp_enum_id; + enum_id_inner->data = exp_enum_id; tb = TYPEBODYcreate(enumeration_); tb->list = LISTcreate(); - LISTadd_last(tb->list, enum_id); + LISTadd_last(tb->list, enum_id_inner); enum_typ->u.type->body = tb; - DICT_define(scope->symbol_table, e_type_id->name, enum_typ, &enum_typ->symbol, OBJ_TYPE); - - /* TODO: OBJ_ENUM / OBJ_EXPRESSION are used interchangeably, this is confusing. */ - DICT_define(scope->enum_table, exp_enum_id->symbol.name, exp_enum_id, &exp_enum_id->symbol, OBJ_EXPRESSION); - DICT_define(enum_typ->symbol_table, enum_id->name, exp_enum_id, enum_id, OBJ_EXPRESSION); - select_typ = TYPEcreate_name(s_type_id); + s_type_id->data = select_typ; tb = TYPEBODYcreate(select_); tb->list = LISTcreate(); LISTadd_last(tb->list, enum_typ); select_typ->u.type->body = tb; - DICT_define(scope->symbol_table, s_type_id->name, select_typ, &select_typ->symbol, OBJ_TYPE); op1 = EXPcreate_from_symbol(Type_Identifier, s_type_id); - op2 = EXPcreate_from_symbol(Type_Identifier, enum_id); + op2 = EXPcreate_from_symbol(Type_Identifier, enum_id_inner); expr = BIN_EXPcreate(OP_DOT, op1, op2); /* @@ -118,25 +125,35 @@ int test_resolve_select_enum_member() { return 0; } -/* TODO: remove DICTlookup after eliminating DICT_type */ void EXP_resolve_entity_handler(Expression exp, Scope cxt, Type unused) { (void) unused; - Entity ent = DICTlookup(cxt->symbol_table, exp->symbol.name); - Type typ = ent->u.entity->type; - exp->type = typ; - exp->return_type = typ; + Symbol *ep; + Entity ent; + + ep = HASHsearch(cxt->symbol_table, exp->symbol, HASH_FIND); + if (!ep) + return; + + ent = ep->data; + exp->type = ent->u.entity->type; + exp->return_type = ent->u.entity->type; exp->symbol.resolved = RESOLVED; } Variable ENTITY_resolve_attr_handler(Entity ent, Symbol *grp_ref, Symbol *attr_ref) { (void) grp_ref; - Variable v = DICTlookup(ent->symbol_table, attr_ref->name); - return v; + Symbol *ep; + + ep = HASHsearch(ent->symbol_table, *attr_ref, HASH_FIND); + if (!ep) + return NULL; + + return ep->data; } int test_resolve_entity_attribute() { Schema scope; - Symbol *e_type_id, *attr_id; + Symbol e, *e_type_id, *attr_id; Entity ent; Type attr_typ, chk_typ; TypeBody tb; @@ -149,22 +166,24 @@ int test_resolve_entity_attribute() { */ scope = SCHEMAcreate(); - e_type_id = SYMBOLcreate("entity1", 1, "test2"); + e = (Symbol) {.name = "entity1", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + e_type_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(e_type_id); - DICT_define(scope->symbol_table, e_type_id->name, ent, &ent->symbol, OBJ_ENTITY); - - attr_id = SYMBOLcreate("attr1", 1, "test2"); + e_type_id->data = ent; + + e = (Symbol) {.name = "attr1", .type = OBJ_VARIABLE, .ref_tok = T_SIMPLE_REF}; + attr_id = HASHsearch(ent->symbol_table, e, HASH_INSERT); exp_attr = EXPcreate_from_symbol(Type_Attribute, attr_id); tb = TYPEBODYcreate(number_); attr_typ = TYPEcreate_from_body_anonymously(tb); attr_typ->superscope = ent; var_attr = VARcreate(exp_attr, attr_typ); var_attr->flags.attribute = 1; + attr_id->data = var_attr; + explicit_attr_list = LISTcreate(); - LISTadd_last(explicit_attr_list, var_attr); - + LISTadd_last(explicit_attr_list, var_attr); LISTadd_last(ent->u.entity->attributes, explicit_attr_list); - DICTdefine(ent->symbol_table, attr_id->name, var_attr, &var_attr->name->symbol, OBJ_VARIABLE); op1 = EXPcreate_from_symbol(Type_Identifier, e_type_id); op2 = EXPcreate_from_symbol(Type_Attribute, attr_id); diff --git a/src/express/test/test_express.c b/src/express/test/test_express.c index 8ce3eb5e1..c57aa37cc 100644 --- a/src/express/test/test_express.c +++ b/src/express/test/test_express.c @@ -5,14 +5,16 @@ /* core */ #include "express/hash.h" #include "express/linklist.h" +#include "expparse.h" /* non-core */ #include "express/resolve.h" #include "express/schema.h" #include "../token_type.h" -#include "../parse_data.h" #include "expscan.h" +#include "lexsupport.h" +#include "expparse.h" #include "driver.h" #include "fff.h" @@ -20,10 +22,6 @@ /* * mock globals */ - -Error ERROR_circular_reference; -Error ERROR_undefined_schema; - int yylineno; Express yyexpresult; Linked_List PARSEnew_schemas; @@ -48,28 +46,22 @@ FAKE_VOID_FUNC0(ENTITYinitialize) FAKE_VOID_FUNC0(SCHEMAinitialize) FAKE_VOID_FUNC0(CASE_ITinitialize) FAKE_VOID_FUNC0(EXPinitialize) -FAKE_VOID_FUNC0(SCANinitialize) -FAKE_VOID_FUNC0(EXPKWinitialize) FAKE_VOID_FUNC0(RESOLVEcleanup) FAKE_VOID_FUNC0(TYPEcleanup) FAKE_VOID_FUNC0(EXPcleanup) -FAKE_VOID_FUNC0(SCANcleanup) -FAKE_VOID_FUNC0(parserInitState) -FAKE_VOID_FUNC(SCAN_lex_init, char *, FILE *) -FAKE_VOID_FUNC(ParseTrace, FILE *, char *) -FAKE_VOID_FUNC(Parse, void *, int, YYSTYPE, parse_data_t) -FAKE_VOID_FUNC(perplexFree, perplex_t) -FAKE_VOID_FUNC(ParseFree, void *, free_func_t) FAKE_VOID_FUNC(SCHEMAdefine_use, Schema, Rename *) FAKE_VOID_FUNC(SCHEMAdefine_reference, Schema, Rename *) FAKE_VOID_FUNC(SCOPEresolve_subsupers, Scope) FAKE_VOID_FUNC(SCOPEresolve_types, Scope) FAKE_VOID_FUNC(SCOPEresolve_expressions_statements, Scope) - -FAKE_VALUE_FUNC(void *, ParseAlloc, malloc_func_t) -FAKE_VALUE_FUNC(char *, SCANstrdup, const char *) -FAKE_VALUE_FUNC(perplex_t, perplexFileScanner, FILE *) -FAKE_VALUE_FUNC(int, yylex, perplex_t) +FAKE_VOID_FUNC(yyparse, void *, int, struct YYSTYPE *, struct YYSTATE *) +FAKE_VOID_FUNC(yyparseFree, void *, free_func_t) +FAKE_VOID_FUNC(yyparseTrace, FILE *, char *) +FAKE_VALUE_FUNC(void *, yyparseAlloc, malloc_func_t) +FAKE_VALUE_FUNC0(struct YYSTATE *, yystateAlloc) +FAKE_VALUE_FUNC(int, yylex, struct exp_scanner *, struct YYSTYPE *) +FAKE_VALUE_FUNC0(struct exp_scanner *, yylexAlloc) +FAKE_VALUE_FUNC(int, yylexInit, struct exp_scanner *, struct YYSTATE *, FILE *) void setup() { RESET_FAKE(RESOLVEinitialize); @@ -81,58 +73,62 @@ void setup() { RESET_FAKE(SCHEMAinitialize); RESET_FAKE(CASE_ITinitialize); RESET_FAKE(EXPinitialize); - RESET_FAKE(SCANinitialize); - RESET_FAKE(EXPKWinitialize); RESET_FAKE(RESOLVEcleanup); RESET_FAKE(TYPEcleanup); RESET_FAKE(EXPcleanup); - RESET_FAKE(SCANcleanup); - RESET_FAKE(parserInitState); - RESET_FAKE(SCAN_lex_init); - RESET_FAKE(ParseTrace); - RESET_FAKE(Parse); - RESET_FAKE(perplexFree); - RESET_FAKE(ParseFree); RESET_FAKE(SCHEMAdefine_use); RESET_FAKE(SCHEMAdefine_reference); RESET_FAKE(SCOPEresolve_subsupers); RESET_FAKE(SCOPEresolve_types); RESET_FAKE(SCOPEresolve_expressions_statements); - RESET_FAKE(ParseAlloc); - RESET_FAKE(SCANstrdup); - RESET_FAKE(perplexFileScanner); + RESET_FAKE(yyparse); + RESET_FAKE(yyparseFree); + RESET_FAKE(yyparseTrace); + RESET_FAKE(yyparseAlloc); + RESET_FAKE(yystateAlloc); RESET_FAKE(yylex); + RESET_FAKE(yylexAlloc); + RESET_FAKE(yylexInit); } int test_express_rename_resolve() { + Scope model; Schema cur_schema, ref_schema; Rename *use_ref; Entity ent; - Symbol *cur_schema_id, *ent_id, *ent_ref, *ref_schema_id; + Symbol e, *cur_schema_id, *ent_id, *ent_ref, *ref_schema_id; - cur_schema_id = SYMBOLcreate("cur_schema", 1, "cur.exp"); - ent_id = SYMBOLcreate("line", 1, "cur.exp"); - ent_ref = SYMBOLcreate("line", 1, "ref.exp"); - ref_schema_id = SYMBOLcreate("ref_schema", 1, "ref.exp"); + model = SCOPEcreate(OBJ_EXPRESS); cur_schema = SCHEMAcreate(); + cur_schema->u.schema->uselist = LISTcreate(); + e = (Symbol) {.name = "cur_schema", .type = OBJ_SCHEMA, .data = cur_schema, + .ref_tok = T_SCHEMA_REF, .filename = "cur.exp"}; + cur_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); cur_schema->symbol = *cur_schema_id; - cur_schema->u.schema->uselist = LISTcreate(); - + ref_schema = SCHEMAcreate(); + e = (Symbol) {.name = "ref_schema", .type = OBJ_SCHEMA, .data = ref_schema, + .ref_tok = T_SCHEMA_REF, .filename = "ref.exp"}; + ref_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); ref_schema->symbol = *ref_schema_id; + + e = (Symbol) {.name = "line", .type = OBJ_ENTITY, + .ref_tok = T_ENTITY_REF, .filename = "cur.exp"}; + ent_id = HASHsearch(ref_schema->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(ent_id); - DICTdefine(ref_schema->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); + ent_id->data = ent; - /* TODO: create RENcreate(...), refactor SCHEMAadd_use() */ + /* TODO: one of the few cases for using SYMBOLcreate(), perhaps refactor */ + ent_ref = SYMBOLcreate("line", OBJ_ENTITY, T_ENTITY_REF, 1, "ref.exp"); use_ref = REN_new(); use_ref->schema_sym = ref_schema_id; use_ref->old = ent_ref; use_ref->nnew = ent_ref; use_ref->rename_type = use; + use_ref->schema = ref_schema_id->data; LISTadd_last(cur_schema->u.schema->uselist, use_ref); - use_ref->schema = ref_schema; RENAMEresolve(use_ref, cur_schema); diff --git a/src/express/test/test_resolve.c b/src/express/test/test_resolve.c index 2fc30ac68..4d295dde5 100644 --- a/src/express/test/test_resolve.c +++ b/src/express/test/test_resolve.c @@ -11,6 +11,7 @@ #include "express/schema.h" #include "express/expr.h" #include "express/type.h" +#include "expparse.h" #include "driver.h" #include "fff.h" @@ -36,8 +37,8 @@ int tag_count; DEFINE_FFF_GLOBALS -FAKE_VALUE_FUNC(void *, SCOPEfind, Scope, char *, int) -FAKE_VALUE_FUNC(Variable, VARfind, Scope, char *, int) +FAKE_VALUE_FUNC(Symbol *, SCOPEfind, Scope, char *, int) +FAKE_VALUE_FUNC(Symbol *, VARfind, Scope, char *) FAKE_VALUE_FUNC(char *, VARget_simple_name, Variable) FAKE_VALUE_FUNC(struct Scope_ *, ENTITYfind_inherited_entity, struct Scope_ *, char *, int) FAKE_VALUE_FUNC(Variable, ENTITYget_named_attribute, Entity, char *) @@ -58,9 +59,11 @@ void setup() { RESET_FAKE(EXPRESS_fail); } -void * SCOPEfind_handler(Scope scope, char * name, int type) { - (void) type; - return DICTlookup(scope->symbol_table, name); +Symbol *SCOPEfind_handler(Scope scope, char * name, int type) { + Symbol *ep; + + ep = HASHsearch(scope->symbol_table, (Symbol) {.name = name, .type = type}, HASH_FIND); + return ep; } int test_exp_resolve_bad_func_call() { @@ -70,7 +73,7 @@ int test_exp_resolve_bad_func_call() { scope = SCHEMAcreate(); - func_id = SYMBOLcreate("func1", 1, "test1"); + func_id = SYMBOLcreate("func1", OBJ_FUNCTION, T_FUNCTION_REF, 1, "test1"); func_call = EXPcreate_from_symbol(Type_Funcall, func_id); SCOPEfind_fake.custom_fake = SCOPEfind_handler; @@ -90,7 +93,7 @@ int test_exp_resolve_func_call() { scope = SCHEMAcreate(); - func_id = SYMBOLcreate("func1", 1, "test1"); + func_id = SYMBOLcreate("func1", OBJ_FUNCTION, T_FUNCTION_REF, 1, "test1"); func_call = EXPcreate_from_symbol(Type_Funcall, func_id); func_def = TYPEcreate_nostab(func_id, scope, OBJ_FUNCTION); @@ -104,33 +107,38 @@ int test_exp_resolve_func_call() { return 0; } -Variable VARfind_handler(Scope scope, char *name, int strict) { - (void) strict; - return DICTlookup(scope->symbol_table, name); +Symbol *VARfind_handler(Scope scope, char *name, int strict) { + Symbol *ep; + + ep = HASHsearch(scope->symbol_table, (Symbol) {.name = name}, HASH_FIND); + return ep; } int test_exp_resolve_local_identifier() { Schema scope; Entity ent; Expression ent_attr, ent_attr_ref; - Symbol *attr_id, *attr_ref, *ent_id; + Symbol e, *attr_id, *attr_ref, *ent_id; Variable v_attr; Type attr_typ; scope = SCHEMAcreate(); - - ent_id = SYMBOLcreate("entity1", 1, "test_2"); + + e = (Symbol) {.name = "entity1", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(ent_id); - DICT_define(scope->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); + ent_id->data = ent; - attr_id = SYMBOLcreate("attr1", 1, "test_2"); + e = (Symbol) {.name = "attr1", .type = OBJ_VARIABLE, .ref_tok = T_SIMPLE_REF}; + attr_id = HASHsearch(ent->symbol_table, e, HASH_INSERT); ent_attr = EXPcreate_from_symbol(Type_Attribute, attr_id); attr_typ = TYPEcreate(real_); v_attr = VARcreate(ent_attr, attr_typ); v_attr->flags.attribute = true; - DICT_define(ent->symbol_table, attr_id->name, v_attr, attr_id, OBJ_VARIABLE); + attr_id->data = v_attr; + - attr_ref = SYMBOLcreate("attr1", 1, "test_2"); + attr_ref = SYMBOLcreate("attr1", OBJ_ENTITY, T_ENTITY_REF, 1, "test_2"); ent_attr_ref = EXPcreate_from_symbol(Type_Identifier, attr_ref); VARfind_fake.custom_fake = VARfind_handler; @@ -147,19 +155,22 @@ int test_entity_resolve_subtype_expr_entity() { Schema scope; Entity ent1, ent2; Expression subtype_exp; - Symbol *ent1_id, *ent2_id, *ent2_ref; + Symbol e, *ent1_id, *ent2_id, *ent2_ref; int chk; scope = SCHEMAcreate(); - ent1_id = SYMBOLcreate("ent1", 1, "test_3"); - ent2_id = SYMBOLcreate("ent2", 1, "test_3"); - ent2_ref = SYMBOLcreate("ent2", 1, "test_3"); + + e = (Symbol) {.name = "ent1", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent1_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent1 = ENTITYcreate(ent1_id); + ent1_id->data = ent1; + + e = (Symbol) {.name = "ent2", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent2_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent2 = ENTITYcreate(ent2_id); + ent2_id->data = ent2; - DICTdefine(scope->symbol_table, ent1_id->name, ent1, ent1_id, OBJ_ENTITY); - DICTdefine(scope->symbol_table, ent2_id->name, ent2, ent2_id, OBJ_ENTITY); - + ent2_ref = SYMBOLcreate("ent2", OBJ_ENTITY, T_ENTITY_REF, 1, "test_3"); subtype_exp = EXPcreate_from_symbol(Type_Identifier, ent2_ref); ent1->superscope = scope; ent1->u.entity->subtypes = LISTcreate(); @@ -177,25 +188,32 @@ int test_type_resolve_entity() { Schema scope; Type sel, ent_base; Entity ent; - Symbol *ent_id, *sel_id; + Symbol e, *ent_id, *sel_id, *ent_base_id; scope = SCHEMAcreate(); - ent_id = SYMBOLcreate("ent", 1, "test_4"); - sel_id = SYMBOLcreate("sel_typ", 1, "test_4"); - ent_base = TYPEcreate_name(ent_id); - ent_base->superscope = scope; + e = (Symbol) {.name = "ent", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(ent_id); - ent->superscope = scope; - sel = TYPEcreate(select_); + ent_id->data = ent; + + e = (Symbol) {.name = "sel_typ", .type = OBJ_TYPE, .ref_tok = T_TYPE_REF}; + sel_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); + sel = TYPEcreate_name(sel_id); + sel->superscope = scope; + sel_id->data = sel; + + ent_base_id = SYMBOLcreate("ent", OBJ_ENTITY, T_ENTITY_REF, 1, "test_5"); + ent_base = TYPEcreate_name(ent_base_id); + ent_base->superscope = sel; + ent_base_id->data = ent_base; + sel->symbol = *sel_id; + sel->u.type->body = TYPEBODYcreate(select_); sel->u.type->body->list = LISTcreate(); sel->superscope = scope; LISTadd_last(sel->u.type->body->list, ent_base); - DICTdefine(scope->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); - DICTdefine(scope->symbol_table, sel_id->name, sel, sel_id, OBJ_TYPE); - SCOPEfind_fake.custom_fake = SCOPEfind_handler; TYPE_resolve(&sel); @@ -210,20 +228,19 @@ int test_stmt_resolve_pcall_proc() { Function f; Procedure p; Statement s; - Symbol *func_id, *proc_id, *proc_ref; + Symbol e, *func_id, *proc_id, *proc_ref; scope = SCHEMAcreate(); - func_id = SYMBOLcreate("func1", 1, "test_5"); - proc_id = SYMBOLcreate("proc1", 1, "test_5"); - proc_ref = SYMBOLcreate("proc1", 1, "test_5"); - f = ALGcreate(OBJ_FUNCTION); - DICTdefine(scope->symbol_table, func_id->name, f, func_id, OBJ_FUNCTION); + e = (Symbol) {.name = "func1", .type = OBJ_FUNCTION, .ref_tok = T_FUNCTION_REF, .data = f}; + func_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); p = ALGcreate(OBJ_PROCEDURE); - DICTdefine(f->symbol_table, proc_id->name, p, proc_id, OBJ_PROCEDURE); + e = (Symbol) {.name = "proc1", .type = OBJ_PROCEDURE, .ref_tok = T_PROCEDURE_REF, .data = p}; + proc_id = HASHsearch(f->symbol_table, e, HASH_INSERT); + proc_ref = SYMBOLcreate("proc1", OBJ_PROCEDURE, T_PROCEDURE_REF, 1, "test_5"); s = PCALLcreate(NULL); s->symbol = *proc_ref; @@ -240,11 +257,15 @@ int test_scope_resolve_named_types() { Schema scope; Type sel, ent_base; Entity ent; - Symbol *ent_id, *sel_id; + Symbol e, *ent_id, *sel_id; scope = SCHEMAcreate(); - sel_id = SYMBOLcreate("sel_typ", 1, "test_4"); - ent_id = SYMBOLcreate("ent", 1, "test_4"); + + e = (Symbol) {.name = "sel_typ", .type = OBJ_TYPE, .ref_tok = T_TYPE_REF}; + sel_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); + + e = (Symbol) {.name = "ent", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent_base = TYPEcreate(entity_); ent_base->symbol = *ent_id; @@ -256,9 +277,9 @@ int test_scope_resolve_named_types() { sel->u.type->body->list = LISTcreate(); sel->superscope = scope; LISTadd_last(sel->u.type->body->list, ent_base); - - DICTdefine(scope->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); - DICTdefine(scope->symbol_table, sel_id->name, sel, sel_id, OBJ_TYPE); + + ent_id->data = ent; + sel_id->data = sel; SCOPEfind_fake.custom_fake = SCOPEfind_handler; @@ -274,19 +295,23 @@ int test_scope_resolve_named_types() { int test_entity_resolve_supertypes() { Schema scope; Entity ent1, ent2; - Symbol *ent1_id, *ent2_id, *ent1_ref; + Symbol e, *ent1_id, *ent2_id, *ent1_ref; scope = SCHEMAcreate(); - ent1_id = SYMBOLcreate("ent1", 1, "test_3"); - ent2_id = SYMBOLcreate("ent2", 1, "test_3"); - ent1_ref = SYMBOLcreate("ent1", 1, "test_3"); + + e = (Symbol) {.name = "ent1", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent1_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent1 = ENTITYcreate(ent1_id); - ent2 = ENTITYcreate(ent2_id); ent1->superscope = scope; + ent1_id->data = ent1; + + e = (Symbol) {.name = "ent2", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent2_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); + ent2 = ENTITYcreate(ent2_id); ent2->superscope = scope; + ent2_id->data = ent2; - DICTdefine(scope->symbol_table, ent1_id->name, ent1, ent1_id, OBJ_ENTITY); - DICTdefine(scope->symbol_table, ent2_id->name, ent2, ent2_id, OBJ_ENTITY); + ent1_ref = SYMBOLcreate("ent1", OBJ_ENTITY, T_ENTITY_REF, 1, "test_3"); ent2->u.entity->supertype_symbols = LISTcreate(); LISTadd_last(ent2->u.entity->supertype_symbols, ent1_ref); diff --git a/src/express/test/test_resolve2.c b/src/express/test/test_resolve2.c index a293dce69..4c5011f6d 100644 --- a/src/express/test/test_resolve2.c +++ b/src/express/test/test_resolve2.c @@ -9,6 +9,7 @@ /* non-core */ #include "express/type.h" +#include "expparse.h" #include "driver.h" #include "fff.h" @@ -55,25 +56,29 @@ int test_scope_resolve_expr_stmt() { Schema scope; Type sel, ent_base; Entity ent; - Symbol *ent_id, *sel_id; + Symbol e, *ent_id, *sel_id, *ent_ref; scope = SCHEMAcreate(); - ent_id = SYMBOLcreate("ent", 1, "test_4"); - sel_id = SYMBOLcreate("sel_typ", 1, "test_4"); - ent_base = TYPEcreate_name(ent_id); - ent_base->superscope = scope; + e = (Symbol) {.name = "ent", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(ent_id); ent->superscope = scope; + ent_id->data = ent; + + e = (Symbol) {.name = "sel_typ", .type = OBJ_TYPE, .ref_tok = T_TYPE_REF}; + sel_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); sel = TYPEcreate(select_); sel->symbol = *sel_id; sel->u.type->body->list = LISTcreate(); sel->superscope = scope; + sel_id->data = sel; + + ent_ref = SYMBOLcreate("ent", OBJ_ENTITY, T_ENTITY_REF, 1, "test_5"); + ent_base = TYPEcreate_name(ent_ref); + ent_base->superscope = sel; LISTadd_last(sel->u.type->body->list, ent_base); - DICTdefine(scope->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); - DICTdefine(scope->symbol_table, sel_id->name, sel, sel_id, OBJ_TYPE); - SCOPEresolve_expressions_statements(scope); assert(ENTITYresolve_expressions_fake.call_count == 1); @@ -86,24 +91,28 @@ int test_scope_resolve_subsupers() { Schema scope; Type sel, ent_base; Entity ent; - Symbol *ent_id, *sel_id; + Symbol e, *ent_id, *sel_id, *ent_ref; scope = SCHEMAcreate(); - ent_id = SYMBOLcreate("ent", 1, "test_4"); - sel_id = SYMBOLcreate("sel_typ", 1, "test_4"); - ent_base = TYPEcreate_name(ent_id); - ent_base->superscope = scope; + e = (Symbol) {.name = "ent", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(ent_id); ent->superscope = scope; + ent_id->data = ent; + + e = (Symbol) {.name = "sel_typ", .type = OBJ_TYPE, .ref_tok = T_TYPE_REF}; + sel_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); sel = TYPEcreate(select_); sel->symbol = *sel_id; sel->u.type->body->list = LISTcreate(); sel->superscope = scope; - LISTadd_last(sel->u.type->body->list, ent_base); + sel_id->data = sel; - DICTdefine(scope->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); - DICTdefine(scope->symbol_table, sel_id->name, sel, sel_id, OBJ_TYPE); + ent_ref = SYMBOLcreate("ent", OBJ_ENTITY, T_ENTITY_REF, 1, "test_6"); + ent_base = TYPEcreate_name(ent_id); + ent_base->superscope = sel; + LISTadd_last(sel->u.type->body->list, ent_base); SCOPEresolve_subsupers(scope); diff --git a/src/express/test/test_schema.c b/src/express/test/test_schema.c index 80fe0eadc..bbc86de88 100644 --- a/src/express/test/test_schema.c +++ b/src/express/test/test_schema.c @@ -10,6 +10,7 @@ /* non-core */ #include "express/variable.h" #include "express/scope.h" +#include "expparse.h" #include "driver.h" #include "fff.h" @@ -31,7 +32,7 @@ DEFINE_FFF_GLOBALS FAKE_VALUE_FUNC(int, EXPRESS_fail, Express) FAKE_VOID_FUNC(SCOPE_get_entities, Scope, Linked_List) -FAKE_VALUE_FUNC(Variable, ENTITYfind_inherited_attribute, struct Scope_ *, char *, struct Symbol_ **) +FAKE_VALUE_FUNC(Symbol *, ENTITYfind_inherited_attribute, struct Scope_ *, char *, struct Symbol_ **) void setup() { RESET_FAKE(EXPRESS_fail) @@ -40,28 +41,36 @@ void setup() { } int test_schema_define_ref() { + Express model; Schema cur_schema, ref_schema; Rename *ref_rename; - Symbol *cur_schema_id, *ent_ref, *ref_schema_id; + Symbol e, *cur_schema_id, *ent_ref, *ref_schema_id; - cur_schema_id = SYMBOLcreate("cur_schema", 1, "cur.exp"); - ent_ref = SYMBOLcreate("line", 1, "ref.exp"); - ref_schema_id = SYMBOLcreate("ref_schema", 1, "ref.exp"); + model = SCOPEcreate(OBJ_EXPRESS); + e = (Symbol) {.name = "cur_schema", .type = OBJ_SCHEMA, .ref_tok = T_SCHEMA_REF}; + cur_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); cur_schema = SCHEMAcreate(); cur_schema->symbol = *cur_schema_id; - cur_schema->u.schema->refdict = DICTcreate(20); + cur_schema->u.schema->refdict = HASHcreate(); + cur_schema_id->data = cur_schema; + e = (Symbol) {.name = "ref_schema", .type = OBJ_SCHEMA, .ref_tok = T_SCHEMA_REF}; + ref_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); ref_schema = SCHEMAcreate(); ref_schema->symbol = *ref_schema_id; + ref_schema_id->data = ref_schema; + e = (Symbol) {.name = "line", .type = OBJ_RENAME, .ref_tok = T_SIMPLE_REF}; + ent_ref = HASHsearch(cur_schema->u.schema->refdict, e, HASH_INSERT); ref_rename = REN_new(); + ent_ref->data = ref_rename; + ref_rename->schema_sym = ref_schema_id; ref_rename->old = ent_ref; ref_rename->nnew = ent_ref; ref_rename->rename_type = ref; ref_rename->schema = ref_schema; - DICTdefine(cur_schema->u.schema->refdict, ent_ref->name, ref_rename, ent_ref, OBJ_RENAME); SCHEMAdefine_reference(cur_schema, ref_rename); @@ -71,28 +80,36 @@ int test_schema_define_ref() { } int test_schema_define_use() { + Express model; Schema cur_schema, ref_schema; Rename *use_rename; - Symbol *cur_schema_id, *ent_ref, *ref_schema_id; + Symbol e, *cur_schema_id, *ent_ref, *ref_schema_id; - cur_schema_id = SYMBOLcreate("cur_schema", 1, "cur.exp"); - ent_ref = SYMBOLcreate("line", 1, "ref.exp"); - ref_schema_id = SYMBOLcreate("ref_schema", 1, "ref.exp"); + model = SCOPEcreate(OBJ_EXPRESS); + e = (Symbol) {.name = "cur_schema", .type = OBJ_SCHEMA, .ref_tok = T_SCHEMA_REF}; + cur_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); cur_schema = SCHEMAcreate(); cur_schema->symbol = *cur_schema_id; - cur_schema->u.schema->usedict = DICTcreate(20); + cur_schema->u.schema->usedict = HASHcreate(); + cur_schema_id->data = cur_schema; + e = (Symbol) {.name = "ref_schema", .type = OBJ_SCHEMA, .ref_tok = T_SCHEMA_REF}; + ref_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); ref_schema = SCHEMAcreate(); ref_schema->symbol = *ref_schema_id; + ref_schema_id->data = ref_schema; + e = (Symbol) {.name = "line", .type = OBJ_RENAME, .ref_tok = T_SIMPLE_REF}; + ent_ref = HASHsearch(cur_schema->u.schema->usedict, e, HASH_INSERT); use_rename = REN_new(); + ent_ref->data = use_rename; + use_rename->schema_sym = ref_schema_id; use_rename->old = ent_ref; use_rename->nnew = ent_ref; use_rename->rename_type = use; use_rename->schema = ref_schema; - DICTdefine(cur_schema->u.schema->usedict, ent_ref->name, use_rename, ent_ref, OBJ_RENAME); SCHEMAdefine_use(cur_schema, use_rename); @@ -106,35 +123,41 @@ int test_schema_define_use() { * (to indicate partial reference) */ int test_schema_get_entities_ref() { + Express model; Schema cur_schema, ref_schema; Rename *ref_rename; Entity ent; - Symbol *cur_schema_id, *ent_id, *ent_ref, *ref_schema_id; + Symbol e, *cur_schema_id, *ent_id, *ent_ref, *ref_schema_id; Linked_List r; - cur_schema_id = SYMBOLcreate("cur_schema", 1, "cur.exp"); - ent_id = SYMBOLcreate("line", 1, "cur.exp"); - ent_ref = SYMBOLcreate("line", 1, "ref.exp"); - ref_schema_id = SYMBOLcreate("ref_schema", 1, "ref.exp"); + model = SCOPEcreate(OBJ_EXPRESS); + e = (Symbol) {.name = "cur_schema", .type = OBJ_SCHEMA, .ref_tok = T_SCHEMA_REF}; + cur_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); cur_schema = SCHEMAcreate(); cur_schema->symbol = *cur_schema_id; - cur_schema->u.schema->refdict = DICTcreate(20); + cur_schema->u.schema->refdict = HASHcreate(); + e = (Symbol) {.name = "ref_schema", .type = OBJ_SCHEMA, .ref_tok = T_SCHEMA_REF}; + ref_schema_id = HASHsearch(model->symbol_table, e, HASH_INSERT); ref_schema = SCHEMAcreate(); ref_schema->symbol = *ref_schema_id; - + + e = (Symbol) {.name = "line", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_id = HASHsearch(ref_schema->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(ent_id); - DICTdefine(ref_schema->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); + e = (Symbol) {.name = "line", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_ref = HASHsearch(cur_schema->u.schema->refdict, e, HASH_INSERT); ref_rename = REN_new(); + ent_ref->data = ref_rename; + ref_rename->schema_sym = ref_schema_id; ref_rename->old = ent_ref; ref_rename->nnew = ent_ref; ref_rename->rename_type = ref; ref_rename->schema = ref_schema; ref_rename->object = ent; - DICTdefine(cur_schema->u.schema->refdict, ent_ref->name, ref_rename, ent_ref, OBJ_ENTITY); r = LISTcreate(); cur_schema->search_id = -1; @@ -145,32 +168,37 @@ int test_schema_get_entities_ref() { return 0; } -Variable +Symbol * ENTITY_find_attr_handler(struct Scope_ *entity, char * name, struct Symbol_** down_sym) { - Variable r; + Symbol e, *ep; (void) down_sym; - r = DICTlookup(entity->symbol_table, name); - return r; + + e = (Symbol) {.name = name}; + ep = HASHsearch(entity->symbol_table, e, HASH_FIND); + + return ep; } int test_var_find() { Schema scope; - Symbol *e_type_id, *attr_id; + Symbol e, *e_type_id, *attr_id, *var_ref; Entity ent; Type attr_typ; TypeBody tb; Expression exp_attr; - Variable var_attr, var_ref; + Variable var_attr; Linked_List explicit_attr_list; scope = SCHEMAcreate(); - e_type_id = SYMBOLcreate("entity1", 1, "test2"); + e = (Symbol) {.name = "entity1", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + e_type_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); ent = ENTITYcreate(e_type_id); - DICT_define(scope->symbol_table, e_type_id->name, ent, &ent->symbol, OBJ_ENTITY); + e_type_id->data = ent; - attr_id = SYMBOLcreate("attr1", 1, "test2"); + e = (Symbol) {.name = "attr1", .type = OBJ_VARIABLE, .ref_tok = T_SIMPLE_REF}; + attr_id = HASHsearch(ent->symbol_table, e, HASH_INSERT); exp_attr = EXPcreate_from_symbol(Type_Attribute, attr_id); tb = TYPEBODYcreate(number_); attr_typ = TYPEcreate_from_body_anonymously(tb); @@ -181,11 +209,11 @@ int test_var_find() { LISTadd_last(explicit_attr_list, var_attr); LISTadd_last(ent->u.entity->attributes, explicit_attr_list); - DICTdefine(ent->symbol_table, attr_id->name, var_attr, &var_attr->name->symbol, OBJ_VARIABLE); + attr_id->data = var_attr; ENTITYfind_inherited_attribute_fake.custom_fake = ENTITY_find_attr_handler; - var_ref = VARfind(ent, "attr1", 1); + var_ref = VARfind(ent, "attr1"); assert(var_ref != NULL); diff --git a/src/express/test/test_scope.c b/src/express/test/test_scope.c index b59ef4acc..9d5094d9f 100644 --- a/src/express/test/test_scope.c +++ b/src/express/test/test_scope.c @@ -5,9 +5,9 @@ /* core */ #include "express/hash.h" #include "express/linklist.h" +#include "expparse.h" /* non-core */ - #include "driver.h" #include "fff.h" @@ -21,7 +21,7 @@ int __SCOPE_search_id; int ENTITY_MARK; -Dictionary EXPRESSbuiltins; +Hash_Table EXPRESSbuiltins; /* @@ -41,25 +41,26 @@ int test_scope_find() { Schema scope; Type sel, ent_base, chk_sel; Entity ent, chk_ent; - Symbol *ent_id, *sel_id; + Symbol e, *ent_id, *sel_id; scope = SCHEMAcreate(); - ent_id = SYMBOLcreate("ent", 1, "test_4"); - sel_id = SYMBOLcreate("sel_typ", 1, "test_4"); + e = (Symbol) {.name = "ent", .type = OBJ_ENTITY, .ref_tok = T_ENTITY_REF}; + ent_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); + ent = ent_id->data = ENTITYcreate(ent_id); + ent->superscope = scope; + ent_base = TYPEcreate_name(ent_id); ent_base->superscope = scope; - ent = ENTITYcreate(ent_id); - ent->superscope = scope; - sel = TYPEcreate(select_); - sel->symbol = *sel_id; + + e = (Symbol) {.name = "sel_typ", .type = OBJ_TYPE, + .ref_tok = T_TYPE_REF, .data = TYPEcreate(select_)}; + sel_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); + sel = sel_id->data; sel->u.type->body->list = LISTcreate(); sel->superscope = scope; LISTadd_last(sel->u.type->body->list, ent_base); - - DICTdefine(scope->symbol_table, ent_id->name, ent, ent_id, OBJ_ENTITY); - DICTdefine(scope->symbol_table, sel_id->name, sel, sel_id, OBJ_TYPE); - + scope->search_id = -1; chk_sel = SCOPE_find(scope, "sel_typ", SCOPE_FIND_ENTITY | SCOPE_FIND_TYPE); diff --git a/src/express/test/test_type.c b/src/express/test/test_type.c index 94b1f8b5a..b3107514b 100644 --- a/src/express/test/test_type.c +++ b/src/express/test/test_type.c @@ -5,9 +5,9 @@ /* core */ #include "express/hash.h" #include "express/linklist.h" +#include "expparse.h" /* non-core */ - #include "driver.h" #include "fff.h" @@ -36,23 +36,23 @@ void setup() { int test_type_create_user_defined_tag() { Schema scope; - Function f; Type t, g, chk; - Symbol *func_id, *tag_id; + Symbol e, *func_id, *tag_id; scope = SCHEMAcreate(); - func_id = SYMBOLcreate("func1", 1, "test_5"); - tag_id = SYMBOLcreate("item1", 1, "test_5"); + e = (Symbol) {.name = "func1", .type = OBJ_FUNCTION, + .ref_tok = T_FUNCTION_REF, .data = ALGcreate(OBJ_FUNCTION)}; + func_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); - f = ALGcreate(OBJ_FUNCTION); - f->symbol = *func_id; - DICTdefine(scope->symbol_table, func_id->name, f, func_id, OBJ_FUNCTION); + e = (Symbol) {.name = "item1", .type = OBJ_TAG, + .ref_tok = T_RULE_LABEL_REF}; + tag_id = HASHsearch(scope->symbol_table, e, HASH_INSERT); g = TYPEcreate(generic_); - t = TYPEcreate_nostab(tag_id, f, OBJ_TAG); + t = TYPEcreate_nostab(tag_id, func_id->data, OBJ_TAG); - chk = TYPEcreate_user_defined_tag(g, f, tag_id); + chk = TYPEcreate_user_defined_tag(g, func_id->data, tag_id); assert(chk == t); diff --git a/src/express/token_type.h b/src/express/token_type.h index 03cd99ab5..a71e13119 100644 --- a/src/express/token_type.h +++ b/src/express/token_type.h @@ -52,31 +52,39 @@ struct qualifier { }; /** simple (single-valued) node types */ -typedef union YYSTYPE { - Binary binary; - Case_Item case_item; - Expression expression; - Integer iVal; - Linked_List list; - Logical logical; - Op_Code op_code; - Qualified_Attr * qualified_attr; - Real rVal; - Statement statement; - Symbol * symbol; - char * string; - Type type; - TypeBody typebody; - Variable variable; - Where where; - struct type_either type_either; - struct type_flags type_flags; - struct entity_body entity_body; - struct subsuper_decl subsuper_decl; - struct subtypes subtypes; - struct upper_lower upper_lower; - struct qualifier qualifier; - unsigned int val; +typedef struct YYSTYPE { + int scope_idx; + + union { + Binary binary; + Case_Item case_item; + Expression expression; + Integer iVal; + Linked_List list; + Logical logical; + Op_Code op_code; + Qualified_Attr * qualified_attr; + Real rVal; + Statement statement; + Symbol * symbol; + char * string; + /* TODO: remove after parser rebuild / reconsider */ + char *cstr; + Type type; + TypeBody typebody; + Variable variable; + Where where; + + /* TODO: can probably have one integrated structure */ + struct type_either type_either; + struct type_flags type_flags; + struct entity_body entity_body; + struct subsuper_decl subsuper_decl; + struct subtypes subtypes; + struct upper_lower upper_lower; + struct qualifier qualifier; + unsigned int val; + }; } YYSTYPE; #endif diff --git a/src/express/type.c b/src/express/type.c index ffcba5915..565e72862 100644 --- a/src/express/type.c +++ b/src/express/type.c @@ -124,45 +124,31 @@ This module implements the type abstraction. It is #include +#include "sc_memmgr.h" +#include "express/hash.h" #include "express/type.h" Type TYPEcreate_user_defined_tag( Type base, Scope scope, struct Symbol_ *symbol ) { + Symbol *ep; Type t; extern int tag_count; - t = ( Type )DICTlookup( scope->symbol_table, symbol->name ); - if( t ) { - if( DICT_type == OBJ_TAG ) { - return( t ); + ep = HASHsearch( scope->symbol_table, (Symbol) { .name = symbol->name }, HASH_FIND ); + if (ep) { + t = (Type) ep->data; + if( ep->type == OBJ_TAG ) { + return t; } else { - /* easiest to just generate the error this way! - * following call WILL fail intentionally - */ - DICTdefine( scope->symbol_table, symbol->name, 0, symbol, OBJ_TAG ); - return( 0 ); + /* TODO: print error message (duplicate parameter) */ + return NULL; } } - /* tag is undefined - * if we are outside a formal parameter list (hack, hack) - * then we can only refer to existing tags, so produce an error - */ - if( tag_count < 0 ) { - ERRORreport_with_symbol( UNDEFINED_TAG, symbol, - symbol->name ); - return( 0 ); - } - - /* otherwise, we're in a formal parameter list, - * so it's ok to define it - */ + /* otherwise, define it */ t = TYPEcreate_nostab( symbol, scope, OBJ_TAG ); t->u.type->head = base; - /* count unique type tags inside PROC and FUNC headers */ - tag_count++; - - return( t ); + return t; } /** diff --git a/src/express/variable.c b/src/express/variable.c index b3ec9f88a..d511a293f 100644 --- a/src/express/variable.c +++ b/src/express/variable.c @@ -97,7 +97,7 @@ void VARinitialize() { * returns simple name of variable * for example, if var is named SELF\xxx.yyy, return yyy */ -extern char * VARget_simple_name( Variable v ) { +extern const char * VARget_simple_name( Variable v ) { Expression e = VARget_name( v ); while( TYPEis_expression( EXPget_type( e ) ) ) {