1
1

Add default hostfile parameter plus --default-hostfile command line option.

Fix error message when job setup failed

This commit was SVN r17724.
Этот коммит содержится в:
Ralph Castain 2008-03-05 04:54:57 +00:00
родитель 022fc1f382
Коммит edb8e32a7a
15 изменённых файлов: 377 добавлений и 317 удалений

Просмотреть файл

@ -398,7 +398,7 @@ cleanup:
/* check for failed launch - if so, force terminate */ /* check for failed launch - if so, force terminate */
if (failed_launch) { if (failed_launch) {
orte_plm_base_launch_failed(active_job, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START); orte_plm_base_launch_failed(jdata->jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START);
} }
return rc; return rc;

Просмотреть файл

@ -566,7 +566,7 @@ cleanup:
/* check for failed launch - if so, force terminate */ /* check for failed launch - if so, force terminate */
if (failed_launch) { if (failed_launch) {
orte_plm_base_launch_failed(active_job, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START); orte_plm_base_launch_failed(jdata->jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START);
} }
return rc; return rc;

Просмотреть файл

@ -167,7 +167,7 @@ static int plm_lsf_launch_job(orte_job_t *jdata)
} }
/* save the active jobid */ /* save the active jobid */
active_job = jobid; active_job = jdata->jobid;
/* Get the map for this job */ /* Get the map for this job */
if (NULL == (map = orte_rmaps.get_job_map(active_job))) { if (NULL == (map = orte_rmaps.get_job_map(active_job))) {
@ -347,7 +347,7 @@ cleanup:
/* check for failed launch - if so, force terminate */ /* check for failed launch - if so, force terminate */
if (failed_launch) { if (failed_launch) {
if (ORTE_SUCCESS != if (ORTE_SUCCESS !=
orte_plm_base_launch_failed(jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START); orte_plm_base_launch_failed(jdata->jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START);
} }
return rc; return rc;

Просмотреть файл

@ -861,7 +861,7 @@ launch_apps:
/* check for failed launch - if so, force terminate */ /* check for failed launch - if so, force terminate */
if( failed_launch ) { if( failed_launch ) {
orte_plm_base_launch_failed(active_job, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START); orte_plm_base_launch_failed(jdata->jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START);
} }
return rc; return rc;

Просмотреть файл

@ -806,7 +806,7 @@ launch_apps:
/* check for failed launch - if so, force terminate */ /* check for failed launch - if so, force terminate */
if (failed_launch) { if (failed_launch) {
orte_plm_base_launch_failed(active_job, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START); orte_plm_base_launch_failed(jdata->jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START);
} }
return rc; return rc;

Просмотреть файл

@ -400,7 +400,7 @@ cleanup:
/* check for failed launch - if so, force terminate */ /* check for failed launch - if so, force terminate */
if (failed_launch) { if (failed_launch) {
orte_plm_base_launch_failed(active_job, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START); orte_plm_base_launch_failed(jdata->jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START);
} }
return rc; return rc;

Просмотреть файл

@ -942,7 +942,7 @@ launch_apps:
/* check for failed launch - if so, force terminate */ /* check for failed launch - if so, force terminate */
if (failed_launch) { if (failed_launch) {
orte_plm_base_launch_failed(active_job, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START); orte_plm_base_launch_failed(jdata->jobid, false, -1, 0, ORTE_JOB_STATE_FAILED_TO_START);
} }
return rc; return rc;

Просмотреть файл

@ -115,7 +115,42 @@ int orte_ras_base_allocate(orte_job_t *jdata)
/* nothing was found, or no active module was alive. Our next /* nothing was found, or no active module was alive. Our next
* option is to look for a hostfile and assign our global * option is to look for a hostfile and assign our global
* pool from there. Hostfile names, if given, are included * pool from there. First, we check for a default hostfile
* as set by an mca param
*/
if (NULL != orte_default_hostfile) {
OPAL_OUTPUT_VERBOSE((5, orte_ras_base.ras_output,
"%s ras:base:allocate parsing default hostfile %s",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME),
orte_default_hostfile));
/* a default hostfile was provided - parse it */
if (ORTE_SUCCESS != (rc = orte_util_add_hostfile_nodes(&nodes,
&override_oversubscribed,
orte_default_hostfile))) {
ORTE_ERROR_LOG(rc);
OBJ_DESTRUCT(&nodes);
return rc;
}
}
/* if something was found in the default hostfile, we use that as our global
* pool - set it and we are done
*/
if (!opal_list_is_empty(&nodes)) {
/* store the results in the global resource pool - this removes the
* list items
*/
if (ORTE_SUCCESS != (rc = orte_ras_base_node_insert(&nodes, jdata))) {
ORTE_ERROR_LOG(rc);
}
/* update the jdata object with override_oversubscribed flag */
jdata->oversubscribe_override = override_oversubscribed;
/* cleanup */
OBJ_DESTRUCT(&nodes);
return rc;
}
/* Individual hostfile names, if given, are included
* in the app_contexts for this job. We therefore need to * in the app_contexts for this job. We therefore need to
* retrieve the app_contexts for the job, and then cycle * retrieve the app_contexts for the job, and then cycle
* through them to see if anything is there. The parser will * through them to see if anything is there. The parser will

Просмотреть файл

@ -75,6 +75,26 @@ int orte_rmaps_base_get_target_nodes(opal_list_t *allocated_nodes, orte_std_cntr
return ORTE_ERR_SILENT; return ORTE_ERR_SILENT;
} }
/* is there a default hostfile? */
if (NULL != orte_default_hostfile) {
/* yes - filter the node list through the file, removing
* any nodes not in the file -or- excluded via ^
*/
if (ORTE_SUCCESS != (rc = orte_util_filter_hostfile_nodes(allocated_nodes,
orte_default_hostfile))) {
ORTE_ERROR_LOG(rc);
return rc;
}
}
/** check that anything is here */
if (0 == opal_list_get_size(allocated_nodes)) {
opal_show_help("help-orte-rmaps-base.txt",
"orte-rmaps-base:no-available-resources",
true);
return ORTE_ERR_SILENT;
}
/* did the app_context contain a hostfile? */ /* did the app_context contain a hostfile? */
if (NULL != app->hostfile) { if (NULL != app->hostfile) {
/* yes - filter the node list through the file, removing /* yes - filter the node list through the file, removing

Просмотреть файл

@ -57,6 +57,7 @@ bool orte_wakeup_ordered = false;
bool orte_abort_in_progress = false; bool orte_abort_in_progress = false;
int orte_timeout_usec_per_proc; int orte_timeout_usec_per_proc;
float orte_max_timeout; float orte_max_timeout;
char *orte_default_hostfile;
orte_process_name_t orte_globals_name_wildcard = {ORTE_JOBID_WILDCARD, ORTE_VPID_WILDCARD}; orte_process_name_t orte_globals_name_wildcard = {ORTE_JOBID_WILDCARD, ORTE_VPID_WILDCARD};
orte_process_name_t orte_globals_name_invalid = {ORTE_JOBID_INVALID, ORTE_VPID_INVALID}; orte_process_name_t orte_globals_name_invalid = {ORTE_JOBID_INVALID, ORTE_VPID_INVALID};
@ -149,6 +150,11 @@ int orte_register_params(void)
"Time to wait [in usecs/proc] before aborting an ORTE operation (default: 10 usec/proc)", "Time to wait [in usecs/proc] before aborting an ORTE operation (default: 10 usec/proc)",
false, false, 10, &orte_timeout_usec_per_proc); false, false, 10, &orte_timeout_usec_per_proc);
/* default hostfile */
mca_base_param_reg_string_name("default", "hostfile",
"Name of the default hostfile (relative or absolute path)",
false, false, NULL, &orte_default_hostfile);
/* All done */ /* All done */
params_set = true; params_set = true;

Просмотреть файл

@ -329,6 +329,8 @@ ORTE_DECLSPEC extern bool orte_wakeup_ordered;
ORTE_DECLSPEC extern int orte_timeout_usec_per_proc; ORTE_DECLSPEC extern int orte_timeout_usec_per_proc;
ORTE_DECLSPEC extern float orte_max_timeout; ORTE_DECLSPEC extern float orte_max_timeout;
ORTE_DECLSPEC extern char *orte_default_hostfile;
/* global arrays for data storage */ /* global arrays for data storage */
ORTE_DECLSPEC extern opal_pointer_array_t *orte_job_data; ORTE_DECLSPEC extern opal_pointer_array_t *orte_job_data;
ORTE_DECLSPEC extern opal_pointer_array_t *orte_node_pool; ORTE_DECLSPEC extern opal_pointer_array_t *orte_node_pool;

Просмотреть файл

@ -170,6 +170,9 @@ opal_cmd_line_init_t cmd_line_init[] = {
{ NULL, NULL, NULL, '\0', "machinefile", "machinefile", 1, { NULL, NULL, NULL, '\0', "machinefile", "machinefile", 1,
NULL, OPAL_CMD_LINE_TYPE_STRING, NULL, OPAL_CMD_LINE_TYPE_STRING,
"Provide a hostfile" }, "Provide a hostfile" },
{ "default", "hostfile", NULL, '\0', "default-hostfile", "default-hostfile", 1,
NULL, OPAL_CMD_LINE_TYPE_STRING,
"Provide a default hostfile" },
/* uri of Open MPI server, or at least where to get it */ /* uri of Open MPI server, or at least where to get it */
{ NULL, NULL, NULL, '\0', "ompi-server", "ompi-server", 1, { NULL, NULL, NULL, '\0', "ompi-server", "ompi-server", 1,

Просмотреть файл

@ -40,6 +40,7 @@
#include "opal/mca/installdirs/installdirs.h" #include "opal/mca/installdirs/installdirs.h"
#include "orte/util/sys_info.h" #include "orte/util/sys_info.h"
#include "orte/util/name_fns.h"
#include "orte/mca/errmgr/errmgr.h" #include "orte/mca/errmgr/errmgr.h"
#include "orte/mca/ras/ras_types.h" #include "orte/mca/ras/ras_types.h"
#include "orte/runtime/orte_globals.h" #include "orte/runtime/orte_globals.h"
@ -110,27 +111,6 @@ static char *hostfile_parse_string(void)
return strdup(orte_util_hostfile_value.sval); return strdup(orte_util_hostfile_value.sval);
} }
static char *hostfile_parse_string_or_int(void)
{
int rc;
char tmp_str[64];
if (ORTE_HOSTFILE_EQUAL != orte_util_hostfile_lex()){
return NULL;
}
rc = orte_util_hostfile_lex();
switch (rc) {
case ORTE_HOSTFILE_STRING:
return strdup(orte_util_hostfile_value.sval);
case ORTE_HOSTFILE_INT:
sprintf(tmp_str,"%d",orte_util_hostfile_value.ival);
return strdup(tmp_str);
default:
return NULL;
}
}
static orte_node_t* hostfile_lookup(opal_list_t* nodes, const char* name) static orte_node_t* hostfile_lookup(opal_list_t* nodes, const char* name)
{ {
opal_list_item_t* item; opal_list_item_t* item;
@ -146,38 +126,11 @@ static orte_node_t* hostfile_lookup(opal_list_t* nodes, const char* name)
return NULL; return NULL;
} }
static int validate_slot_list (char *cpu_list) static int hostfile_parse_line(int token, opal_list_t* updates, opal_list_t* exclude)
{
int i,list_len = strlen(cpu_list);
for(i=0; i < list_len; i++){
if ('0' <= cpu_list[i] && '9' >= cpu_list[i]) {
continue;
}
else if (':' == cpu_list[i]) {
continue;
}
else if (',' == cpu_list[i]) {
continue;
}
else if ('*' == cpu_list[i]) {
continue;
}
else if ('-' == cpu_list[i]) {
continue;
}
return ORTE_ERROR;
}
return ORTE_SUCCESS;
}
static int hostfile_parse_line(int token, opal_list_t* updates, opal_list_t* procs)
{ {
char buff[64]; char buff[64];
char *tmp;
int rc; int rc;
orte_node_t* node; orte_node_t* node;
orte_ras_proc_t* proc;
bool update = false; bool update = false;
bool got_count = false; bool got_count = false;
bool got_max = false; bool got_max = false;
@ -213,6 +166,38 @@ static int hostfile_parse_line(int token, opal_list_t* updates, opal_list_t* pro
} }
opal_argv_free (argv); opal_argv_free (argv);
/* if the first letter of the name is '^', then this is a node
* to be excluded. Remove the ^ character so the nodename is
* usable, and put it on the exclude list
*/
if ('^' == node_name[0]) {
int i, len;
len = strlen(node_name);
for (i=1; i < len; i++) {
node_name[i-1] = node_name[i];
}
node_name[len-1] = '\0'; /* truncate */
/* convert this into something globally unique */
if (strcmp(node_name, "localhost") == 0 || opal_ifislocal(node_name)) {
/* Nodename has been allocated, that is for sure */
free (node_name);
node_name = strdup(orte_system_info.nodename);
}
/* Do we need to make a new node object? First check to see
if it's already in the exclude list */
if (NULL == (node = hostfile_lookup(exclude, node_name))) {
node = OBJ_NEW(orte_node_t);
node->name = node_name;
}
/* Note that we need to add this back to the exclude list.
If it was found, we just removed it (in hostfile_lookup()),
so this puts it back. If it was not found, then we have to
add it to the exclude list anyway. */
opal_list_append(exclude, &node->super);
return ORTE_SUCCESS;
}
/* convert this into something globally unique */ /* convert this into something globally unique */
if (strcmp(node_name, "localhost") == 0 || opal_ifislocal(node_name)) { if (strcmp(node_name, "localhost") == 0 || opal_ifislocal(node_name)) {
/* Nodename has been allocated, that is for sure */ /* Nodename has been allocated, that is for sure */
@ -225,9 +210,6 @@ static int hostfile_parse_line(int token, opal_list_t* updates, opal_list_t* pro
if (NULL == (node = hostfile_lookup(updates, node_name))) { if (NULL == (node = hostfile_lookup(updates, node_name))) {
node = OBJ_NEW(orte_node_t); node = OBJ_NEW(orte_node_t);
node->name = node_name; node->name = node_name;
node->username = username;
node->slots = 0;
/* Note that we need to set update to true regardless of /* Note that we need to set update to true regardless of
whether the node was found on the updates list or not. whether the node was found on the updates list or not.
If it was found, we just removed it (in hostfile_lookup()), If it was found, we just removed it (in hostfile_lookup()),
@ -278,48 +260,6 @@ static int hostfile_parse_line(int token, opal_list_t* updates, opal_list_t* pro
} }
break; break;
case ORTE_HOSTFILE_SLOT:
tmp = hostfile_parse_string_or_int();
proc = OBJ_NEW(orte_ras_proc_t);
proc->node_name = strdup(node_name);
argv = opal_argv_split (tmp, '@');
cnt = opal_argv_count (argv);
switch (cnt) {
case 1:
proc->cpu_list = strdup(argv[0]);
if (ORTE_SUCCESS != (rc = validate_slot_list(proc->cpu_list))) {
OBJ_RELEASE(proc);
OBJ_RELEASE(node);
opal_argv_free (argv);
ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
hostfile_parse_error(token);
return ORTE_ERROR;
}
break;
case 2:
proc->rank = strtol(argv[0],(char **)NULL,0);
proc->cpu_list = strdup(argv[1]);
if (ORTE_SUCCESS != (rc = validate_slot_list(proc->cpu_list))) {
OBJ_RELEASE(proc);
OBJ_RELEASE(node);
opal_argv_free (argv);
ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
hostfile_parse_error(token);
return ORTE_ERROR;
}
break;
default:
OBJ_RELEASE(proc);
OBJ_RELEASE(node);
opal_argv_free (argv);
ORTE_ERROR_LOG(ORTE_ERR_BAD_PARAM);
hostfile_parse_error(token);
return ORTE_ERROR;
}
opal_argv_free (argv);
opal_list_append(procs, &proc->super);
number_of_slots++;
break;
case ORTE_HOSTFILE_SLOTS_MAX: case ORTE_HOSTFILE_SLOTS_MAX:
rc = hostfile_parse_int(); rc = hostfile_parse_int();
if (rc < 0) { if (rc < 0) {
@ -379,7 +319,7 @@ done:
* Parse the specified file into a node list. * Parse the specified file into a node list.
*/ */
static int hostfile_parse(const char *hostfile, opal_list_t* updates, opal_list_t* procs) static int hostfile_parse(const char *hostfile, opal_list_t* updates, opal_list_t* exclude)
{ {
int token; int token;
int rc = ORTE_SUCCESS; int rc = ORTE_SUCCESS;
@ -418,7 +358,7 @@ static int hostfile_parse(const char *hostfile, opal_list_t* updates, opal_list_
case ORTE_HOSTFILE_HOSTNAME: case ORTE_HOSTFILE_HOSTNAME:
case ORTE_HOSTFILE_IPV4: case ORTE_HOSTFILE_IPV4:
case ORTE_HOSTFILE_IPV6: case ORTE_HOSTFILE_IPV6:
rc = hostfile_parse_line(token, updates, procs); rc = hostfile_parse_line(token, updates, exclude);
if (ORTE_SUCCESS != rc) { if (ORTE_SUCCESS != rc) {
goto unlock; goto unlock;
} }
@ -448,17 +388,40 @@ int orte_util_add_hostfile_nodes(opal_list_t *nodes,
bool *override_oversubscribed, bool *override_oversubscribed,
char *hostfile) char *hostfile)
{ {
opal_list_t procs; opal_list_t exclude;
opal_list_item_t *item; opal_list_item_t *item, *itm;
int rc; int rc;
OBJ_CONSTRUCT(&procs, opal_list_t);
OPAL_OUTPUT_VERBOSE((1, orte_debug_output,
"%s hostfile: checking hostfile %s for nodes",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), hostfile));
OBJ_CONSTRUCT(&exclude, opal_list_t);
/* parse the hostfile and add the contents to the list */ /* parse the hostfile and add the contents to the list */
if (ORTE_SUCCESS != (rc = hostfile_parse(hostfile, nodes, &procs))) { if (ORTE_SUCCESS != (rc = hostfile_parse(hostfile, nodes, &exclude))) {
goto cleanup; goto cleanup;
} }
/* remove from the list of nodes those that are in the exclude list */
while(NULL != (item = opal_list_remove_first(&exclude))) {
orte_node_t *exnode = (orte_node_t*)item;
/* check for matches on nodes */
for (itm = opal_list_get_first(nodes);
itm != opal_list_get_end(nodes);
itm = opal_list_get_next(itm)) {
orte_node_t *node=(orte_node_t*)itm;
if (0 == strcmp(exnode->name, node->name)) {
/* match - remove it */
opal_list_remove_item(nodes, itm);
OBJ_RELEASE(itm);
break;
}
}
OBJ_RELEASE(item);
}
/* indicate that ORTE should override any oversubscribed conditions /* indicate that ORTE should override any oversubscribed conditions
* based on local hardware limits since the user (a) might not have * based on local hardware limits since the user (a) might not have
* provided us any info on the #slots for a node, and (b) the user * provided us any info on the #slots for a node, and (b) the user
@ -469,11 +432,7 @@ int orte_util_add_hostfile_nodes(opal_list_t *nodes,
*override_oversubscribed = true; *override_oversubscribed = true;
cleanup: cleanup:
while(NULL != (item = opal_list_remove_first(&procs))) { OBJ_DESTRUCT(&exclude);
OBJ_RELEASE(item);
}
OBJ_DESTRUCT(&procs);
return rc; return rc;
} }
@ -485,19 +444,42 @@ cleanup:
int orte_util_filter_hostfile_nodes(opal_list_t *nodes, int orte_util_filter_hostfile_nodes(opal_list_t *nodes,
char *hostfile) char *hostfile)
{ {
opal_list_t newnodes; opal_list_t newnodes, exclude;
opal_list_item_t *item1, *item2; opal_list_item_t *item1, *item2;
orte_node_t *node_from_list, *node_from_file; orte_node_t *node_from_list, *node_from_file;
bool node_found; bool node_found;
int rc; int rc;
OPAL_OUTPUT_VERBOSE((1, orte_debug_output,
"%s hostfile: filtering nodes through hostfile %s",
ORTE_NAME_PRINT(ORTE_PROC_MY_NAME), hostfile));
/* parse the hostfile and create local list of findings */ /* parse the hostfile and create local list of findings */
OBJ_CONSTRUCT(&newnodes, opal_list_t); OBJ_CONSTRUCT(&newnodes, opal_list_t);
if (ORTE_SUCCESS != (rc = hostfile_parse(hostfile, &newnodes, NULL))) { OBJ_CONSTRUCT(&exclude, opal_list_t);
if (ORTE_SUCCESS != (rc = hostfile_parse(hostfile, &newnodes, &exclude))) {
OBJ_DESTRUCT(&newnodes); OBJ_DESTRUCT(&newnodes);
return rc; return rc;
} }
/* remove from the list of newnodes those that are in the exclude list */
while(NULL != (item1 = opal_list_remove_first(&exclude))) {
node_from_file = (orte_node_t*)item1;
/* check for matches on nodes */
for (item2 = opal_list_get_first(&newnodes);
item2 != opal_list_get_end(&newnodes);
item2 = opal_list_get_next(item2)) {
orte_node_t *node=(orte_node_t*)item2;
if (0 == strcmp(node_from_file->name, node->name)) {
/* match - remove it */
opal_list_remove_item(&newnodes, item2);
OBJ_RELEASE(item2);
break;
}
}
OBJ_RELEASE(item1);
}
/* now check our nodes and remove any that don't match. We can /* now check our nodes and remove any that don't match. We can
* destruct our hostfile list as we go since this won't be needed * destruct our hostfile list as we go since this won't be needed
*/ */

Просмотреть файл

@ -363,8 +363,8 @@ static void yy_fatal_error (yyconst char msg[] );
*yy_cp = '\0'; \ *yy_cp = '\0'; \
(yy_c_buf_p) = yy_cp; (yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 37 #define YY_NUM_RULES 36
#define YY_END_OF_BUFFER 38 #define YY_END_OF_BUFFER 37
/* This struct is not used in this scanner, /* This struct is not used in this scanner,
but its presence is necessary. */ but its presence is necessary. */
struct yy_trans_info struct yy_trans_info
@ -372,27 +372,28 @@ struct yy_trans_info
flex_int32_t yy_verify; flex_int32_t yy_verify;
flex_int32_t yy_nxt; flex_int32_t yy_nxt;
}; };
static yyconst flex_int16_t yy_accept[180] = static yyconst flex_int16_t yy_accept[184] =
{ 0, { 0,
32, 32, 5, 5, 38, 36, 10, 1, 36, 36, 31, 31, 5, 5, 37, 35, 10, 1, 35, 35,
32, 36, 31, 32, 11, 32, 32, 32, 32, 32, 31, 35, 30, 31, 11, 31, 31, 31, 31, 31,
32, 5, 7, 6, 10, 1, 0, 9, 0, 2, 31, 31, 5, 7, 6, 10, 1, 0, 9, 0,
32, 4, 0, 32, 0, 31, 32, 32, 32, 0, 2, 31, 4, 0, 31, 0, 30, 31, 31, 31,
32, 32, 32, 35, 32, 32, 32, 32, 32, 32, 0, 31, 31, 31, 34, 31, 31, 31, 31, 31,
5, 6, 6, 8, 0, 3, 0, 31, 32, 32, 31, 31, 5, 6, 6, 8, 0, 3, 0, 30,
32, 32, 0, 0, 32, 32, 32, 32, 32, 12, 31, 31, 31, 31, 0, 0, 31, 31, 31, 31,
32, 32, 32, 0, 0, 31, 32, 32, 32, 32, 31, 31, 31, 12, 31, 31, 31, 0, 0, 30,
32, 0, 0, 34, 32, 32, 32, 32, 32, 32, 31, 31, 31, 31, 31, 0, 0, 33, 31, 31,
32, 32, 15, 32, 0, 0, 31, 32, 32, 32, 31, 31, 31, 31, 31, 31, 31, 31, 0, 0,
0, 34, 32, 32, 13, 32, 32, 32, 32, 32, 30, 31, 31, 31, 0, 33, 31, 31, 13, 31,
32, 14, 32, 32, 32, 0, 0, 32, 32, 0, 31, 31, 31, 31, 31, 14, 31, 31, 31, 0,
34, 32, 32, 32, 32, 32, 32, 32, 32, 32, 0, 31, 31, 0, 33, 31, 31, 31, 31, 31,
32, 32, 32, 32, 32, 32, 32, 33, 0, 34, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
32, 32, 20, 21, 32, 22, 32, 32, 23, 32, 31, 32, 0, 33, 31, 31, 19, 20, 31, 21,
32, 32, 32, 32, 32, 33, 32, 32, 32, 32, 31, 31, 22, 31, 31, 31, 31, 31, 31, 32,
32, 32, 32, 32, 32, 32, 28, 33, 24, 25, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31,
26, 18, 27, 19, 16, 17, 29, 30, 0 27, 32, 23, 24, 25, 17, 26, 18, 15, 16,
28, 29, 0
} ; } ;
static yyconst flex_int32_t yy_ec[256] = static yyconst flex_int32_t yy_ec[256] =
@ -406,10 +407,10 @@ static yyconst flex_int32_t yy_ec[256] =
13, 1, 1, 14, 15, 15, 15, 15, 15, 15, 13, 1, 1, 14, 15, 15, 15, 15, 15, 15,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
7, 7, 7, 7, 17, 7, 18, 15, 19, 15, 7, 7, 7, 17, 18, 7, 19, 15, 20, 15,
20, 15, 16, 16, 16, 16, 16, 21, 22, 23, 21, 15, 16, 16, 16, 16, 16, 22, 23, 24,
24, 25, 16, 26, 27, 28, 29, 16, 16, 30, 25, 26, 16, 27, 28, 29, 30, 16, 16, 31,
16, 16, 1, 1, 1, 1, 1, 1, 1, 1, 16, 16, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@ -427,177 +428,196 @@ static yyconst flex_int32_t yy_ec[256] =
1, 1, 1, 1, 1 1, 1, 1, 1, 1
} ; } ;
static yyconst flex_int32_t yy_meta[31] = static yyconst flex_int32_t yy_meta[32] =
{ 0, { 0,
1, 1, 2, 3, 1, 4, 5, 6, 7, 1, 1, 1, 2, 3, 1, 4, 5, 6, 7, 1,
8, 9, 1, 5, 8, 6, 6, 8, 8, 8, 8, 9, 1, 5, 8, 6, 5, 6, 8, 8,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6 8, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6
} ; } ;
static yyconst flex_int16_t yy_base[196] = static yyconst flex_int16_t yy_base[202] =
{ 0, { 0,
0, 0, 28, 29, 454, 455, 34, 455, 449, 449, 0, 0, 29, 30, 386, 528, 35, 528, 381, 381,
0, 32, 37, 64, 455, 79, 99, 15, 433, 429, 0, 33, 38, 66, 528, 82, 103, 119, 15, 360,
422, 0, 455, 63, 68, 455, 444, 455, 444, 455, 356, 349, 0, 528, 65, 70, 528, 371, 528, 371,
0, 455, 443, 111, 434, 121, 0, 136, 63, 29, 528, 0, 528, 370, 129, 357, 140, 0, 156, 65,
156, 166, 0, 0, 176, 415, 414, 400, 405, 408, 30, 177, 188, 0, 0, 199, 215, 337, 336, 333,
0, 71, 106, 455, 424, 455, 69, 186, 104, 198, 338, 341, 0, 73, 74, 528, 354, 528, 108, 222,
213, 233, 406, 121, 243, 0, 253, 263, 394, 120, 119, 235, 251, 272, 344, 117, 283, 0, 294, 305,
161, 388, 389, 386, 161, 123, 378, 273, 171, 0, 321, 328, 331, 74, 124, 324, 325, 340, 134, 123,
283, 376, 134, 372, 293, 303, 338, 321, 325, 324, 334, 339, 143, 0, 350, 333, 135, 332, 361, 372,
171, 173, 318, 185, 203, 331, 328, 313, 328, 323, 330, 312, 314, 313, 137, 138, 306, 182, 182, 323,
324, 323, 318, 333, 171, 311, 309, 222, 305, 225, 320, 383, 321, 394, 317, 311, 310, 405, 138, 302,
304, 248, 297, 296, 299, 305, 246, 303, 298, 297, 300, 169, 296, 176, 295, 197, 288, 287, 291, 297,
295, 294, 283, 278, 269, 267, 267, 266, 266, 260, 202, 295, 294, 289, 288, 287, 274, 273, 264, 259,
258, 262, 263, 258, 261, 259, 254, 264, 261, 257, 259, 258, 261, 255, 234, 236, 230, 229, 232, 230,
249, 248, 0, 0, 237, 0, 231, 203, 0, 195, 225, 234, 231, 227, 219, 217, 0, 0, 211, 0,
197, 193, 181, 177, 169, 172, 143, 119, 117, 100, 205, 207, 0, 201, 209, 207, 202, 201, 202, 206,
96, 94, 62, 59, 30, 27, 0, 455, 0, 0, 185, 181, 175, 141, 124, 92, 85, 64, 30, 27,
0, 0, 0, 0, 0, 0, 0, 0, 455, 353, 0, 528, 0, 0, 0, 0, 0, 0, 0, 0,
362, 371, 377, 386, 395, 404, 411, 415, 416, 423, 0, 0, 528, 426, 435, 444, 450, 456, 465, 474,
425, 427, 429, 431, 433 483, 490, 494, 499, 501, 508, 510, 512, 514, 516,
518
} ; } ;
static yyconst flex_int16_t yy_def[196] = static yyconst flex_int16_t yy_def[202] =
{ 0, { 0,
179, 1, 180, 180, 179, 179, 179, 179, 181, 182, 183, 1, 184, 184, 183, 183, 183, 183, 185, 186,
183, 179, 179, 183, 179, 179, 16, 16, 17, 17, 187, 183, 183, 187, 183, 183, 16, 188, 16, 17,
17, 184, 179, 185, 179, 179, 181, 179, 182, 179, 17, 17, 189, 183, 190, 183, 183, 185, 183, 186,
183, 179, 186, 13, 179, 13, 14, 179, 36, 187, 183, 187, 183, 191, 13, 183, 13, 14, 183, 37,
183, 14, 17, 188, 16, 17, 17, 17, 17, 17, 192, 187, 14, 17, 193, 16, 194, 17, 17, 17,
184, 185, 185, 179, 186, 179, 179, 36, 58, 183, 17, 17, 189, 190, 190, 183, 191, 183, 183, 37,
179, 61, 189, 190, 41, 42, 41, 16, 17, 17, 60, 187, 183, 63, 195, 196, 42, 43, 42, 16,
17, 17, 17, 179, 179, 34, 34, 60, 78, 62, 194, 39, 17, 17, 17, 17, 17, 183, 183, 35,
61, 191, 190, 192, 41, 41, 17, 17, 17, 17, 35, 62, 82, 64, 63, 197, 196, 198, 42, 42,
17, 17, 17, 17, 179, 179, 34, 78, 98, 61, 17, 17, 17, 17, 17, 17, 17, 17, 183, 183,
193, 194, 183, 41, 17, 17, 17, 17, 17, 17, 35, 82, 102, 63, 199, 200, 187, 42, 17, 17,
17, 17, 17, 17, 17, 179, 179, 183, 62, 179, 17, 17, 17, 17, 17, 17, 17, 17, 17, 183,
195, 183, 17, 17, 17, 17, 17, 17, 17, 17, 183, 187, 64, 183, 201, 187, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 179, 179, 179,
17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 179, 17, 17, 17, 17, 17, 183, 183, 183, 17, 17, 17, 17, 17, 17,
17, 17, 17, 17, 17, 17, 17, 179, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17, 183,
17, 17, 17, 17, 17, 17, 17, 17, 0, 179, 17, 17, 17, 17, 17, 17, 17, 17, 17, 17,
179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 17, 183, 17, 17, 17, 17, 17, 17, 17, 17,
179, 179, 179, 179, 179 17, 17, 0, 183, 183, 183, 183, 183, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
183
} ; } ;
static yyconst flex_int16_t yy_nxt[486] = static yyconst flex_int16_t yy_nxt[560] =
{ 0, { 0,
6, 7, 8, 9, 10, 11, 11, 11, 6, 12, 6, 7, 8, 9, 10, 11, 11, 11, 6, 12,
13, 14, 15, 11, 16, 17, 11, 16, 18, 16, 13, 14, 15, 11, 16, 17, 18, 11, 16, 19,
17, 19, 17, 17, 17, 17, 20, 17, 21, 17, 16, 17, 20, 17, 17, 17, 17, 21, 17, 22,
23, 23, 40, 24, 24, 25, 26, 32, 46, 47, 17, 24, 24, 41, 25, 25, 26, 27, 33, 48,
64, 33, 31, 31, 34, 35, 178, 36, 37, 177, 49, 66, 34, 32, 32, 35, 36, 182, 37, 38,
38, 39, 34, 34, 39, 39, 39, 34, 34, 34, 181, 39, 40, 35, 32, 35, 40, 40, 40, 35,
34, 34, 34, 34, 34, 34, 34, 40, 53, 25, 35, 35, 35, 35, 35, 35, 35, 35, 35, 41,
26, 179, 54, 59, 41, 42, 179, 74, 41, 75, 55, 26, 27, 183, 56, 61, 42, 43, 183, 55,
179, 41, 41, 41, 31, 31, 43, 44, 176, 45, 42, 93, 183, 56, 42, 42, 42, 32, 32, 44,
37, 175, 38, 45, 43, 43, 45, 45, 45, 43, 45, 94, 46, 38, 180, 39, 46, 44, 32, 44,
43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 46, 46, 46, 44, 44, 44, 44, 44, 44, 44,
31, 53, 179, 43, 77, 54, 43, 43, 43, 179, 44, 44, 44, 44, 32, 179, 78, 44, 79, 178,
174, 34, 31, 173, 40, 34, 172, 89, 34, 34, 41, 44, 44, 44, 32, 32, 32, 183, 66, 81,
34, 58, 64, 97, 37, 59, 90, 179, 59, 59, 32, 95, 32, 101, 38, 32, 32, 183, 183, 35,
59, 31, 31, 31, 171, 83, 60, 37, 170, 31, 32, 96, 78, 35, 100, 127, 87, 35, 35, 35,
61, 62, 31, 61, 61, 61, 62, 62, 62, 62, 60, 183, 177, 103, 61, 128, 112, 114, 61, 61,
62, 62, 62, 62, 62, 62, 65, 66, 91, 74, 61, 32, 32, 32, 113, 115, 62, 38, 176, 32,
65, 96, 169, 65, 65, 65, 67, 92, 123, 179, 63, 64, 32, 32, 63, 63, 63, 64, 64, 64,
67, 99, 168, 67, 67, 67, 68, 124, 167, 108, 64, 64, 64, 64, 64, 64, 64, 67, 68, 117,
68, 110, 113, 68, 68, 68, 76, 109, 166, 111, 120, 67, 121, 131, 132, 67, 67, 67, 69, 118,
77, 114, 165, 77, 77, 77, 35, 115, 78, 37, 134, 135, 69, 175, 137, 119, 69, 69, 69, 70,
164, 116, 79, 117, 163, 79, 79, 79, 31, 31, 120, 174, 143, 70, 138, 173, 172, 70, 70, 70,
80, 44, 162, 81, 37, 161, 31, 81, 80, 80, 32, 32, 171, 170, 169, 168, 32, 167, 72, 166,
81, 81, 81, 80, 80, 80, 80, 80, 80, 80, 165, 32, 80, 164, 163, 162, 81, 161, 87, 120,
80, 80, 80, 80, 31, 127, 128, 80, 130, 131, 81, 81, 81, 36, 160, 82, 38, 159, 158, 83,
80, 80, 80, 85, 116, 133, 139, 85, 160, 159, 157, 156, 155, 83, 83, 83, 32, 32, 84, 45,
85, 85, 85, 86, 134, 158, 157, 86, 83, 116, 154, 85, 38, 153, 32, 85, 84, 32, 84, 85,
86, 86, 86, 87, 156, 155, 154, 87, 153, 152, 85, 85, 84, 84, 84, 84, 84, 84, 84, 84,
87, 87, 87, 98, 151, 150, 149, 99, 148, 147, 84, 84, 84, 32, 152, 151, 84, 150, 149, 148,
99, 99, 99, 100, 146, 145, 144, 100, 143, 142, 84, 84, 84, 89, 147, 146, 145, 89, 68, 87,
100, 100, 100, 103, 141, 66, 83, 103, 83, 37, 87, 89, 89, 89, 90, 38, 38, 142, 90, 141,
103, 103, 103, 104, 37, 138, 137, 104, 136, 135, 140, 139, 90, 90, 90, 91, 136, 133, 130, 91,
104, 104, 104, 118, 132, 129, 126, 118, 125, 66, 129, 68, 87, 91, 91, 91, 32, 32, 87, 183,
118, 118, 118, 119, 83, 83, 179, 119, 97, 74, 101, 78, 32, 116, 72, 111, 110, 32, 32, 32,
119, 119, 119, 122, 112, 107, 106, 122, 105, 37, 109, 38, 64, 87, 87, 38, 64, 64, 64, 102,
122, 122, 122, 22, 22, 22, 22, 22, 22, 22, 99, 98, 97, 103, 92, 87, 58, 103, 103, 103,
22, 22, 27, 27, 27, 27, 27, 27, 27, 27, 104, 77, 76, 75, 104, 74, 73, 59, 104, 104,
27, 29, 29, 29, 29, 29, 29, 29, 29, 29, 104, 107, 58, 31, 29, 107, 52, 51, 50, 107,
31, 31, 31, 83, 31, 31, 51, 83, 51, 37, 107, 107, 108, 31, 29, 183, 108, 183, 183, 183,
51, 51, 51, 51, 51, 52, 95, 52, 52, 52, 108, 108, 108, 122, 183, 183, 183, 122, 183, 183,
52, 52, 52, 52, 55, 55, 55, 55, 55, 55, 183, 122, 122, 122, 123, 183, 183, 183, 123, 183,
55, 55, 55, 63, 94, 93, 88, 83, 63, 63, 183, 183, 123, 123, 123, 126, 183, 183, 183, 126,
44, 44, 44, 82, 82, 84, 56, 73, 72, 71, 183, 183, 183, 126, 126, 126, 23, 23, 23, 23,
84, 84, 101, 101, 102, 102, 120, 120, 121, 121, 23, 23, 23, 23, 23, 28, 28, 28, 28, 28,
140, 140, 70, 69, 57, 56, 30, 28, 50, 49, 28, 28, 28, 28, 30, 30, 30, 30, 30, 30,
48, 30, 28, 179, 5, 179, 179, 179, 179, 179, 30, 30, 30, 32, 32, 32, 183, 32, 32, 47,
179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 47, 47, 183, 47, 47, 53, 183, 53, 183, 53,
179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 53, 53, 53, 53, 54, 183, 54, 54, 54, 54,
179, 179, 179, 179, 179 54, 54, 54, 57, 57, 57, 57, 57, 57, 57,
57, 57, 65, 183, 183, 183, 183, 65, 65, 45,
45, 45, 71, 71, 71, 183, 71, 71, 86, 86,
88, 183, 183, 183, 183, 88, 88, 105, 105, 106,
106, 124, 124, 125, 125, 144, 144, 5, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183
} ; } ;
static yyconst flex_int16_t yy_chk[486] = static yyconst flex_int16_t yy_chk[560] =
{ 0, { 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
3, 4, 40, 3, 4, 7, 7, 12, 18, 18, 1, 3, 4, 41, 3, 4, 7, 7, 12, 19,
40, 12, 13, 13, 13, 13, 166, 13, 13, 165, 19, 41, 12, 13, 13, 13, 13, 170, 13, 13,
13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 169, 13, 13, 13, 13, 13, 13, 13, 13, 13,
13, 13, 13, 13, 13, 13, 13, 14, 24, 25, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14,
25, 39, 24, 39, 14, 14, 52, 57, 14, 57, 25, 26, 26, 40, 25, 40, 14, 14, 54, 55,
52, 14, 14, 14, 16, 16, 16, 16, 164, 16, 14, 74, 54, 55, 14, 14, 14, 16, 16, 16,
16, 163, 16, 16, 16, 16, 16, 16, 16, 16, 16, 74, 16, 16, 168, 16, 16, 16, 16, 16,
16, 16, 16, 16, 16, 16, 16, 16, 16, 17, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
17, 53, 59, 17, 59, 53, 17, 17, 17, 34, 16, 16, 16, 17, 17, 167, 59, 17, 59, 166,
162, 34, 34, 161, 64, 34, 160, 70, 34, 34, 66, 17, 17, 17, 18, 18, 18, 61, 66, 61,
34, 36, 64, 76, 76, 36, 70, 83, 36, 36, 18, 75, 18, 80, 80, 18, 18, 35, 87, 35,
36, 38, 38, 38, 159, 83, 38, 38, 158, 38, 35, 75, 79, 35, 79, 109, 87, 35, 35, 35,
38, 38, 38, 38, 38, 38, 38, 38, 38, 38, 37, 83, 165, 83, 37, 109, 95, 96, 37, 37,
38, 38, 38, 38, 38, 38, 41, 41, 71, 75, 37, 39, 39, 39, 95, 96, 39, 39, 164, 39,
41, 75, 157, 41, 41, 41, 42, 71, 105, 79, 39, 39, 39, 39, 39, 39, 39, 39, 39, 39,
42, 79, 156, 42, 42, 42, 45, 105, 155, 91, 39, 39, 39, 39, 39, 39, 39, 42, 42, 98,
45, 92, 94, 45, 45, 45, 58, 91, 154, 92, 99, 42, 99, 112, 112, 42, 42, 42, 43, 98,
58, 94, 153, 58, 58, 58, 60, 94, 60, 60, 114, 114, 43, 163, 116, 98, 43, 43, 43, 46,
152, 95, 60, 95, 151, 60, 60, 60, 61, 61, 121, 162, 121, 46, 116, 161, 160, 46, 46, 46,
61, 61, 150, 61, 61, 148, 61, 61, 61, 61, 47, 47, 159, 158, 157, 156, 47, 155, 47, 154,
61, 61, 61, 61, 61, 61, 61, 61, 61, 61, 152, 47, 60, 151, 149, 146, 60, 145, 144, 143,
61, 61, 61, 62, 62, 108, 108, 62, 110, 110, 60, 60, 60, 62, 142, 62, 62, 141, 140, 62,
62, 62, 62, 65, 117, 112, 117, 65, 147, 145, 139, 138, 137, 62, 62, 62, 63, 63, 63, 63,
65, 65, 65, 67, 112, 142, 141, 67, 140, 139, 136, 63, 63, 135, 63, 63, 63, 63, 63, 63,
67, 67, 67, 68, 138, 137, 136, 68, 135, 134, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63,
68, 68, 68, 78, 133, 132, 131, 78, 130, 129, 63, 63, 64, 64, 134, 133, 64, 132, 131, 130,
78, 78, 78, 81, 128, 127, 126, 81, 125, 124, 64, 64, 64, 67, 129, 128, 127, 67, 126, 125,
81, 81, 81, 85, 123, 122, 121, 85, 120, 119, 124, 67, 67, 67, 69, 123, 122, 120, 69, 119,
85, 85, 85, 86, 118, 116, 115, 86, 114, 113, 118, 117, 69, 69, 69, 70, 115, 113, 111, 70,
86, 86, 86, 98, 111, 109, 107, 98, 106, 103, 110, 107, 106, 70, 70, 70, 71, 71, 105, 103,
98, 98, 98, 100, 102, 101, 99, 100, 97, 96, 101, 100, 71, 97, 71, 94, 93, 71, 72, 72,
100, 100, 100, 104, 93, 90, 89, 104, 88, 87, 92, 91, 72, 88, 86, 81, 72, 72, 72, 82,
104, 104, 104, 180, 180, 180, 180, 180, 180, 180, 78, 77, 76, 82, 73, 65, 57, 82, 82, 82,
180, 180, 181, 181, 181, 181, 181, 181, 181, 181, 85, 52, 51, 50, 85, 49, 48, 36, 85, 85,
181, 182, 182, 182, 182, 182, 182, 182, 182, 182, 85, 89, 34, 30, 28, 89, 22, 21, 20, 89,
183, 183, 183, 84, 183, 183, 184, 82, 184, 77, 89, 89, 90, 10, 9, 5, 90, 0, 0, 0,
184, 184, 184, 184, 184, 185, 74, 185, 185, 185, 90, 90, 90, 102, 0, 0, 0, 102, 0, 0,
0, 102, 102, 102, 104, 0, 0, 0, 104, 0,
0, 0, 104, 104, 104, 108, 0, 0, 0, 108,
0, 0, 0, 108, 108, 108, 184, 184, 184, 184,
184, 184, 184, 184, 184, 185, 185, 185, 185, 185,
185, 185, 185, 185, 186, 186, 186, 186, 186, 186, 185, 185, 185, 185, 186, 186, 186, 186, 186, 186,
186, 186, 186, 187, 73, 72, 69, 63, 187, 187, 186, 186, 186, 187, 187, 187, 0, 187, 187, 188,
188, 188, 188, 189, 189, 190, 55, 50, 49, 48, 188, 188, 0, 188, 188, 189, 0, 189, 0, 189,
190, 190, 191, 191, 192, 192, 193, 193, 194, 194, 189, 189, 189, 189, 190, 0, 190, 190, 190, 190,
195, 195, 47, 46, 35, 33, 29, 27, 21, 20, 190, 190, 190, 191, 191, 191, 191, 191, 191, 191,
19, 10, 9, 5, 179, 179, 179, 179, 179, 179, 191, 191, 192, 0, 0, 0, 0, 192, 192, 193,
179, 179, 179, 179, 179, 179, 179, 179, 179, 179,
179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 193, 193, 194, 194, 194, 0, 194, 194, 195, 195,
179, 179, 179, 179, 179 196, 0, 0, 0, 0, 196, 196, 197, 197, 198,
198, 199, 199, 200, 200, 201, 201, 183, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
183, 183, 183, 183, 183, 183, 183, 183, 183
} ; } ;
static yy_state_type yy_last_accepting_state; static yy_state_type yy_last_accepting_state;
@ -669,7 +689,7 @@ orte_hostfile_value_t orte_util_hostfile_value;
bool orte_util_hostfile_done = false; bool orte_util_hostfile_done = false;
#line 673 "util/hostfile/hostfile_lex.c" #line 693 "util/hostfile/hostfile_lex.c"
#define INITIAL 0 #define INITIAL 0
#define comment 1 #define comment 1
@ -826,7 +846,7 @@ YY_DECL
#line 60 "hostfile_lex.l" #line 60 "hostfile_lex.l"
#line 830 "util/hostfile/hostfile_lex.c" #line 850 "util/hostfile/hostfile_lex.c"
if ( !(yy_init) ) if ( !(yy_init) )
{ {
@ -879,13 +899,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 180 ) if ( yy_current_state >= 184 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
++yy_cp; ++yy_cp;
} }
while ( yy_base[yy_current_state] != 455 ); while ( yy_base[yy_current_state] != 528 );
yy_find_action: yy_find_action:
yy_act = yy_accept[yy_current_state]; yy_act = yy_accept[yy_current_state];
@ -998,7 +1018,7 @@ case 15:
YY_RULE_SETUP YY_RULE_SETUP
#line 91 "hostfile_lex.l" #line 91 "hostfile_lex.l"
{ orte_util_hostfile_value.sval = orte_util_hostfile_text; { orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_SLOT; } return ORTE_HOSTFILE_SLOTS_MAX; }
YY_BREAK YY_BREAK
case 16: case 16:
YY_RULE_SETUP YY_RULE_SETUP
@ -1068,9 +1088,9 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 27: case 27:
YY_RULE_SETUP YY_RULE_SETUP
#line 115 "hostfile_lex.l" #line 116 "hostfile_lex.l"
{ orte_util_hostfile_value.sval = orte_util_hostfile_text; { orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_SLOTS_MAX; } return ORTE_HOSTFILE_USERNAME; }
YY_BREAK YY_BREAK
case 28: case 28:
YY_RULE_SETUP YY_RULE_SETUP
@ -1086,13 +1106,7 @@ YY_RULE_SETUP
YY_BREAK YY_BREAK
case 30: case 30:
YY_RULE_SETUP YY_RULE_SETUP
#line 122 "hostfile_lex.l" #line 123 "hostfile_lex.l"
{ orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_USERNAME; }
YY_BREAK
case 31:
YY_RULE_SETUP
#line 125 "hostfile_lex.l"
{ orte_util_hostfile_value.ival = atol(orte_util_hostfile_text); { orte_util_hostfile_value.ival = atol(orte_util_hostfile_text);
return ORTE_HOSTFILE_INT; } return ORTE_HOSTFILE_INT; }
YY_BREAK YY_BREAK
@ -1101,45 +1115,45 @@ YY_RULE_SETUP
* followed by username@hostname or hostname * followed by username@hostname or hostname
*/ */
case 32: case 31:
YY_RULE_SETUP YY_RULE_SETUP
#line 133 "hostfile_lex.l" #line 131 "hostfile_lex.l"
{ orte_util_hostfile_value.sval = orte_util_hostfile_text; { orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_STRING; } return ORTE_HOSTFILE_STRING; }
YY_BREAK YY_BREAK
case 33: case 32:
YY_RULE_SETUP YY_RULE_SETUP
#line 136 "hostfile_lex.l" #line 134 "hostfile_lex.l"
{ {
orte_util_hostfile_value.sval = orte_util_hostfile_text; orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_IPV4; } return ORTE_HOSTFILE_IPV4; }
YY_BREAK YY_BREAK
case 34: case 33:
YY_RULE_SETUP YY_RULE_SETUP
#line 140 "hostfile_lex.l" #line 138 "hostfile_lex.l"
{ {
orte_util_hostfile_value.sval = orte_util_hostfile_text; orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_IPV6; } return ORTE_HOSTFILE_IPV6; }
YY_BREAK YY_BREAK
case 35: case 34:
YY_RULE_SETUP YY_RULE_SETUP
#line 144 "hostfile_lex.l" #line 142 "hostfile_lex.l"
{ {
orte_util_hostfile_value.sval = orte_util_hostfile_text; orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_HOSTNAME; } return ORTE_HOSTFILE_HOSTNAME; }
YY_BREAK YY_BREAK
case 36: case 35:
YY_RULE_SETUP YY_RULE_SETUP
#line 148 "hostfile_lex.l" #line 146 "hostfile_lex.l"
{ orte_util_hostfile_value.sval = orte_util_hostfile_text; { orte_util_hostfile_value.sval = orte_util_hostfile_text;
return ORTE_HOSTFILE_ERROR; } return ORTE_HOSTFILE_ERROR; }
YY_BREAK YY_BREAK
case 37: case 36:
YY_RULE_SETUP YY_RULE_SETUP
#line 151 "hostfile_lex.l" #line 149 "hostfile_lex.l"
ECHO; ECHO;
YY_BREAK YY_BREAK
#line 1143 "util/hostfile/hostfile_lex.c" #line 1157 "util/hostfile/hostfile_lex.c"
case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(comment): case YY_STATE_EOF(comment):
yyterminate(); yyterminate();
@ -1424,7 +1438,7 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 180 ) if ( yy_current_state >= 184 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@ -1452,11 +1466,11 @@ static int yy_get_next_buffer (void)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{ {
yy_current_state = (int) yy_def[yy_current_state]; yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 180 ) if ( yy_current_state >= 184 )
yy_c = yy_meta[(unsigned int) yy_c]; yy_c = yy_meta[(unsigned int) yy_c];
} }
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 179); yy_is_jam = (yy_current_state == 183);
return yy_is_jam ? 0 : yy_current_state; return yy_is_jam ? 0 : yy_current_state;
} }
@ -2126,7 +2140,7 @@ void orte_util_hostfile_free (void * ptr )
#define YYTABLES_NAME "yytables" #define YYTABLES_NAME "yytables"
#line 151 "hostfile_lex.l" #line 149 "hostfile_lex.l"

Просмотреть файл

@ -88,8 +88,6 @@ count { orte_util_hostfile_value.sval = yytext;
return ORTE_HOSTFILE_COUNT; } return ORTE_HOSTFILE_COUNT; }
slots { orte_util_hostfile_value.sval = yytext; slots { orte_util_hostfile_value.sval = yytext;
return ORTE_HOSTFILE_SLOTS; } return ORTE_HOSTFILE_SLOTS; }
slot { orte_util_hostfile_value.sval = yytext;
return ORTE_HOSTFILE_SLOT; }
"slots-max" { orte_util_hostfile_value.sval = yytext; "slots-max" { orte_util_hostfile_value.sval = yytext;
return ORTE_HOSTFILE_SLOTS_MAX; } return ORTE_HOSTFILE_SLOTS_MAX; }
slots_max { orte_util_hostfile_value.sval = yytext; slots_max { orte_util_hostfile_value.sval = yytext;
@ -141,7 +139,7 @@ username { orte_util_hostfile_value.sval = yytext;
orte_util_hostfile_value.sval = yytext; orte_util_hostfile_value.sval = yytext;
return ORTE_HOSTFILE_IPV6; } return ORTE_HOSTFILE_IPV6; }
([A-Za-z0-9][A-Za-z0-9_\-]*"@")?[A-Za-z][A-Za-z0-9_\-\.]* { (\^?[A-Za-z0-9][A-Za-z0-9_\-]*"@")?[A-Za-z][A-Za-z0-9_\-\.]* {
orte_util_hostfile_value.sval = yytext; orte_util_hostfile_value.sval = yytext;
return ORTE_HOSTFILE_HOSTNAME; } return ORTE_HOSTFILE_HOSTNAME; }