diff options
Diffstat (limited to 'src/intersim2/config.y')
| -rw-r--r-- | src/intersim2/config.y | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/src/intersim2/config.y b/src/intersim2/config.y new file mode 100644 index 0000000..377d467 --- /dev/null +++ b/src/intersim2/config.y @@ -0,0 +1,37 @@ +%{ + +int yylex(void); +void yyerror(char * msg); +void config_assign_string( char const * field, char const * value ); +void config_assign_int( char const * field, int value ); +void config_assign_float( char const * field, double value ); + +#ifdef _WIN32 +#pragma warning ( disable : 4102 ) +#pragma warning ( disable : 4244 ) +#endif + +%} + +%union { + char *name; + int num; + double fnum; +} + +%token <name> STR +%token <num> NUM +%token <fnum> FNUM + +%% + +commands : commands command + | command +; + +command : STR '=' STR ';' { config_assign_string( $1, $3 ); free( $1 ); free( $3 ); } + | STR '=' NUM ';' { config_assign_int( $1, $3 ); free( $1 ); } + | STR '=' FNUM ';' { config_assign_float( $1, $3 ); free( $1 ); } +; + +%% |
