diff -r 0e623bbdee95 -r 85af9521bf63 stage1_2/iec.y --- a/stage1_2/iec.y Sun Oct 28 22:03:27 2007 +0100 +++ b/stage1_2/iec.y Sun Oct 28 22:44:20 2007 +0100 @@ -210,8 +210,9 @@ * after all includes have already been processed. * * Flex automatically returns the token with value 0 - * at the end of the file. We therefore specify - * a token with that exact same value here. + * at the end of the file. We therefore specify here + * a token with that exact same value here, so we can use it + * to detect the very end of the input files. */ %token END_OF_INPUT 0 @@ -912,6 +913,11 @@ %type task_configuration %type task_name %type task_initialization +// 3 helper symbols for task_initialization +%type task_initialization_single +%type task_initialization_interval +%type task_initialization_priority + %type data_source %type program_configuration // helper symbol for program_configuration @@ -4140,17 +4146,54 @@ */ task_name: any_identifier; + task_initialization: // '(' [SINGLE ASSIGN data_source ','] [INTERVAL ASSIGN data_source ','] PRIORITY ASSIGN integer ')' // - '(' PRIORITY ASSIGN integer ')' - {$$ = new task_initialization_c(NULL, NULL, $4, locloc(@$));} -| '(' SINGLE ASSIGN data_source ',' PRIORITY ASSIGN integer ')' - {$$ = new task_initialization_c($4, NULL, $8, locloc(@$));} -| '(' INTERVAL ASSIGN data_source ',' PRIORITY ASSIGN integer ')' - {$$ = new task_initialization_c(NULL, $4, $8, locloc(@$));} -| '(' SINGLE ASSIGN data_source ',' INTERVAL ASSIGN data_source ',' PRIORITY ASSIGN integer ')' - {$$ = new task_initialization_c($4, $8, $12, locloc(@$));} -; + '(' task_initialization_single task_initialization_interval task_initialization_priority ')' + {$$ = new task_initialization_c($2, $3, $4, locloc(@$));} +; + + +task_initialization_single: +// [SINGLE ASSIGN data_source ','] + /* empty */ + {$$ = NULL;} +| {cmd_goto_task_init_state();} SINGLE ASSIGN {cmd_pop_state();} data_source ',' + {$$ = $5;} +; + + +task_initialization_interval: +// [INTERVAL ASSIGN data_source ','] + /* empty */ + {$$ = NULL;} +| {cmd_goto_task_init_state();} INTERVAL ASSIGN {cmd_pop_state();} data_source ',' + {$$ = $5;} +; + + +task_initialization_priority: +// PRIORITY ASSIGN integer +{cmd_goto_task_init_state();} PRIORITY ASSIGN {cmd_pop_state();} integer + {$$ = $5;} +; + + +/* +task_initialization: +// '(' [SINGLE ASSIGN data_source ','] [INTERVAL ASSIGN data_source ','] PRIORITY ASSIGN integer ')' // + '(' {cmd_goto_task_init_state();} PRIORITY ASSIGN {cmd_pop_state();} integer ')' + {$$ = new task_initialization_c(NULL, NULL, $6, locloc(@$));} +| '(' {cmd_goto_task_init_state();} SINGLE ASSIGN {cmd_pop_state();} data_source ',' + PRIORITY ASSIGN integer ')' + {$$ = new task_initialization_c($6, NULL, $10, locloc(@$));} +| '(' {cmd_goto_task_init_state();} INTERVAL ASSIGN {cmd_pop_state();} data_source ',' PRIORITY ASSIGN integer ')' + {$$ = new task_initialization_c(NULL, $6, $10, locloc(@$));} +| '(' {cmd_goto_task_init_state();} SINGLE ASSIGN {cmd_pop_state();} data_source ',' INTERVAL ASSIGN data_source ',' PRIORITY ASSIGN integer ')' + {$$ = new task_initialization_c($6, $10, $14, locloc(@$));} +; +*/ + data_source: constant