/* * --- GSMP-COPYRIGHT-NOTE-BEGIN --- * * This copyright note is auto-generated by ./scripts/Create-CopyPatch. * Please add additional copyright information _after_ the line containing * the GSMP-COPYRIGHT-NOTE-END tag. Otherwise it might get removed by * the ./scripts/Create-CopyPatch script. Do not edit this copyright text! * * GSMP: dam/utility/regtester/TestScanner.lex * General Sound Manipulation Program is Copyright (C) 2000 - 2004 * Valentin Ziegler and René Rebe * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; version 2. A copy of the GNU General * Public License can be found in the file LICENSE. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANT- * ABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General * Public License for more details. * * --- GSMP-COPYRIGHT-NOTE-END --- */ /* * */ %{ #include "TestParserActions.h" #include "TestParser.tab.h" #include "Utils.h" #include int line_num = 1; int bool_val; int int_val; char* id; extern char* filename; void C_BlockInit () { char line_directive[strlen(filename) + 32]; TextReset (); sprintf (line_directive, "#__LINE__ %d \"%s\"\n", line_num, filename ); TextAdd (line_directive); }; %} DIGIT [0-9] ALPHA [a-zA-Z_] ALNUM {DIGIT}|{ALPHA} %x comment %x c_block %% "/*" { BEGIN(comment); } [^*\n]* { /* eat anything that's not a '*' */ } "*"+[^*/\n]* { /* eat up '*'s not followed by '/'s */ } \n { ++line_num; } "*"+"/" { BEGIN(INITIAL); } "{%" { BEGIN(c_block); C_BlockInit (); } [^%\n]* { TextAdd (yytext); } "%"+[^}\n]* { TextAdd (yytext); } \n { ++line_num; TextAdd (yytext); } "%"+"}" { BEGIN(INITIAL); return C_BLOCK; } " "|"\t" { /* whitespace */} "\n" { ++line_num; } "prelude" { return PRELUDE; } "global" { return GLOBAL; } "multiple" { return MULTIPLE; } "startup" { return STARTUP; } "action" { return ACTION; } "==" { return EQ; } "<=" { return LEQ; } ">=" { return GEQ; } "!=" { return NEQ; } "{"|"}"|"("|")" { return *yytext; } "+"|"-"|"*"|"/"|"%" { return *yytext; } "&"|"|"|"!"|"^" { return *yytext; } "<"|">" { return *yytext; } ","|"."|"#"|"$" { return *yytext; } "true"|"false" { bool_val = (strcmp(yytext,"true") == 0); return BOOL_CONST; } {DIGIT}+ { int_val = atoi (yytext); return INT_CONST; } {ALPHA}{ALNUM}* { id = strdup (yytext); return ID; } . { TextReset (); TextAdd ("Illegal token : "); TextAdd (yytext); yyerror (TextGet ()); }