From 89f355e86d815404c2bd573b8835b9ad15167718 Mon Sep 17 00:00:00 2001 From: Svend Sorensen Date: Mon, 21 Mar 2005 21:55:00 +0000 Subject: [PATCH] Removed prefix flags from yacc and lex (to prepare for automake). --- lib/Makefile | 11 ++++--- lib/cue_parse.y | 9 +++--- lib/cue_parse_prefix.h | 44 ++++++++++++++++++++++++++ lib/cue_scan.l | 60 +++++++++++++++++++----------------- lib/toc_parse.y | 9 +++--- lib/toc_parse_prefix.h | 44 ++++++++++++++++++++++++++ lib/toc_scan.l | 70 ++++++++++++++++++++++-------------------- 7 files changed, 172 insertions(+), 75 deletions(-) create mode 100644 lib/cue_parse_prefix.h create mode 100644 lib/toc_parse_prefix.h diff --git a/lib/Makefile b/lib/Makefile index fa3f3b8..3584a91 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -10,10 +10,13 @@ TOC_OBJS= toc_parse.o toc_scan.o toc_print.o # so we need a prefix to aviod conflicts. # (NOTE: these lines require GNU Make) -toc_scan.c: LFLAGS+= -Ptoc_yy -cue_scan.c: LFLAGS+= -Pcue_yy -toc_parse.c: YFLAGS+= -p toc_yy -cue_parse.c: YFLAGS+= -p cue_yy +# these have been moved to the source files to prepare for automake +# for flex, used %option prefix="cue_yy" +#toc_scan.c: LFLAGS+= -Ptoc_yy +#cue_scan.c: LFLAGS+= -Pcue_yy +# for yacc, used cue_parse_prefix.h with defines +#toc_parse.c: YFLAGS+= -p toc_yy +#cue_parse.c: YFLAGS+= -p cue_yy all: $(TARGETS) diff --git a/lib/cue_parse.y b/lib/cue_parse.y index 8e3c988..62f43f5 100644 --- a/lib/cue_parse.y +++ b/lib/cue_parse.y @@ -11,10 +11,11 @@ #include #include "cd.h" #include "time.h" +#include "cue_parse_prefix.h" #define YYDEBUG 1 -extern int cue_yylex(); +extern int yylex(); void yyerror (char *s); static Cd *cd = NULL; @@ -259,7 +260,7 @@ time /* lexer interface */ extern int cue_lineno; -extern int cue_yydebug; +extern int yydebug; extern FILE *cue_yyin; void yyerror (char *s) @@ -270,9 +271,9 @@ void yyerror (char *s) Cd *cue_parse (FILE *fp) { cue_yyin = fp; - cue_yydebug = 0; + yydebug = 0; - if (0 == cue_yyparse()) + if (0 == yyparse()) return cd; return NULL; diff --git a/lib/cue_parse_prefix.h b/lib/cue_parse_prefix.h new file mode 100644 index 0000000..31b2d38 --- /dev/null +++ b/lib/cue_parse_prefix.h @@ -0,0 +1,44 @@ +/* Remap normal yacc names so we can have multiple parsers + * see http://www.gnu.org/software/automake/manual/html_node/Yacc-and-Lex.html + */ + +#define yymaxdepth cue_yymaxdepth +#define yyparse cue_yyparse +#define yylex cue_yylex +#define yyerror cue_yyerror +#define yylval cue_yylval +#define yychar cue_yychar +#define yydebug cue_yydebug +#define yypact cue_yypact +#define yyr1 cue_yyr1 +#define yyr2 cue_yyr2 +#define yydef cue_yydef +#define yychk cue_yychk +#define yypgo cue_yypgo +#define yyact cue_yyact +#define yyexca cue_yyexca +#define yyerrflag cue_yyerrflag +#define yynerrs cue_yynerrs +#define yyps cue_yyps +#define yypv cue_yypv +#define yys cue_yys +#define yy_yys cue_yy_yys +#define yystate cue_yystate +#define yytmp cue_yytmp +#define yyv cue_yyv +#define yy_yyv cue_yy_yyv +#define yyval cue_yyval +#define yylloc cue_yylloc +#define yyreds cue_yyreds +#define yytoks cue_yytoks +#define yylhs cue_yylhs +#define yylen cue_yylen +#define yydefred cue_yydefred +#define yydgoto cue_yydgoto +#define yysinde cue_yysindex +#define yyrindex cue_yyrindex +#define yygindex cue_yygindex +#define yytable cue_yytable +#define yycheck cue_yycheck +#define yyname cue_yyname +#define yyrule cue_yyrule diff --git a/lib/cue_scan.l b/lib/cue_scan.l index 146fdd4..7884830 100644 --- a/lib/cue_scan.l +++ b/lib/cue_scan.l @@ -9,6 +9,7 @@ #include #include #include "cd.h" +#include "cue_parse_prefix.h" #include "cue_parse.h" int cue_lineno = 1; @@ -18,6 +19,7 @@ ws [ \t\r] nonws [^ \t\r\n] %option noyywrap +%option prefix="cue_yy" %s NAME @@ -25,14 +27,14 @@ nonws [^ \t\r\n] \'([^\']|\\\')*\' | \"([^\"]|\\\")*\" { - cue_yylval.sval = strdup(yytext + 1); - cue_yylval.sval[strlen(cue_yylval.sval) - 1] = '\0'; + yylval.sval = strdup(yytext + 1); + yylval.sval[strlen(yylval.sval) - 1] = '\0'; BEGIN(INITIAL); return STRING; } {nonws}+ { - cue_yylval.sval = strdup(yytext); + yylval.sval = strdup(yytext); BEGIN(INITIAL); return STRING; } @@ -48,45 +50,45 @@ WAVE { return WAVE; } MP3 { return MP3; } TRACK { return TRACK; } -AUDIO { cue_yylval.ival = MODE_AUDIO; return AUDIO; } -MODE1\/2048 { cue_yylval.ival = MODE_MODE1; return MODE1_2048; } -MODE1\/2352 { cue_yylval.ival = MODE_MODE1_RAW; return MODE1_2352; } -MODE2\/2336 { cue_yylval.ival = MODE_MODE2; return MODE2_2336; } -MODE2\/2048 { cue_yylval.ival = MODE_MODE2_FORM1; return MODE2_2048; } -MODE2\/2342 { cue_yylval.ival = MODE_MODE2_FORM2; return MODE2_2342; } -MODE2\/2332 { cue_yylval.ival = MODE_MODE2_FORM_MIX; return MODE2_2332; } -MODE2\/2352 { cue_yylval.ival = MODE_MODE2_RAW; return MODE2_2352; } +AUDIO { yylval.ival = MODE_AUDIO; return AUDIO; } +MODE1\/2048 { yylval.ival = MODE_MODE1; return MODE1_2048; } +MODE1\/2352 { yylval.ival = MODE_MODE1_RAW; return MODE1_2352; } +MODE2\/2336 { yylval.ival = MODE_MODE2; return MODE2_2336; } +MODE2\/2048 { yylval.ival = MODE_MODE2_FORM1; return MODE2_2048; } +MODE2\/2342 { yylval.ival = MODE_MODE2_FORM2; return MODE2_2342; } +MODE2\/2332 { yylval.ival = MODE_MODE2_FORM_MIX; return MODE2_2332; } +MODE2\/2352 { yylval.ival = MODE_MODE2_RAW; return MODE2_2352; } FLAGS { return FLAGS; } -PRE { cue_yylval.ival = FLAG_PRE_EMPHASIS; return PRE; } -DCP { cue_yylval.ival = FLAG_COPY_PERMITTED; return DCP; } -4CH { cue_yylval.ival = FLAG_FOUR_CHANNEL; return FOUR_CH; } -SCMS { cue_yylval.ival = FLAG_SCMS; return SCMS; } +PRE { yylval.ival = FLAG_PRE_EMPHASIS; return PRE; } +DCP { yylval.ival = FLAG_COPY_PERMITTED; return DCP; } +4CH { yylval.ival = FLAG_FOUR_CHANNEL; return FOUR_CH; } +SCMS { yylval.ival = FLAG_SCMS; return SCMS; } PREGAP { return PREGAP; } INDEX { return INDEX; } POSTGAP { return POSTGAP; } -TITLE { BEGIN(NAME); cue_yylval.ival = PTI_TITLE; return TITLE; } -PERFORMER { BEGIN(NAME); cue_yylval.ival = PTI_PERFORMER; return PERFORMER; } -SONGWRITER { BEGIN(NAME); cue_yylval.ival = PTI_SONGWRITER; return SONGWRITER; } -COMPOSER { BEGIN(NAME); cue_yylval.ival = PTI_COMPOSER; return COMPOSER; } -ARRANGER { BEGIN(NAME); cue_yylval.ival = PTI_ARRANGER; return ARRANGER; } -MESSAGE { BEGIN(NAME); cue_yylval.ival = PTI_MESSAGE; return MESSAGE; } -DISC_ID { BEGIN(NAME); cue_yylval.ival = PTI_DISC_ID; return DISC_ID; } -GENRE { BEGIN(NAME); cue_yylval.ival = PTI_GENRE; return GENRE; } -TOC_INFO1 { BEGIN(NAME); cue_yylval.ival = PTI_TOC_INFO1; return TOC_INFO1; } -TOC_INFO2 { BEGIN(NAME); cue_yylval.ival = PTI_TOC_INFO2; return TOC_INFO2; } -UPC_EAN { BEGIN(NAME); cue_yylval.ival = PTI_UPC_ISRC; return UPC_EAN; } -ISRC/{ws}+\" { BEGIN(NAME); cue_yylval.ival = PTI_UPC_ISRC; return ISRC; } -SIZE_INFO { BEGIN(NAME); cue_yylval.ival = PTI_SIZE_INFO; return SIZE_INFO; } +TITLE { BEGIN(NAME); yylval.ival = PTI_TITLE; return TITLE; } +PERFORMER { BEGIN(NAME); yylval.ival = PTI_PERFORMER; return PERFORMER; } +SONGWRITER { BEGIN(NAME); yylval.ival = PTI_SONGWRITER; return SONGWRITER; } +COMPOSER { BEGIN(NAME); yylval.ival = PTI_COMPOSER; return COMPOSER; } +ARRANGER { BEGIN(NAME); yylval.ival = PTI_ARRANGER; return ARRANGER; } +MESSAGE { BEGIN(NAME); yylval.ival = PTI_MESSAGE; return MESSAGE; } +DISC_ID { BEGIN(NAME); yylval.ival = PTI_DISC_ID; return DISC_ID; } +GENRE { BEGIN(NAME); yylval.ival = PTI_GENRE; return GENRE; } +TOC_INFO1 { BEGIN(NAME); yylval.ival = PTI_TOC_INFO1; return TOC_INFO1; } +TOC_INFO2 { BEGIN(NAME); yylval.ival = PTI_TOC_INFO2; return TOC_INFO2; } +UPC_EAN { BEGIN(NAME); yylval.ival = PTI_UPC_ISRC; return UPC_EAN; } +ISRC/{ws}+\" { BEGIN(NAME); yylval.ival = PTI_UPC_ISRC; return ISRC; } +SIZE_INFO { BEGIN(NAME); yylval.ival = PTI_SIZE_INFO; return SIZE_INFO; } ISRC { BEGIN(NAME); return TRACK_ISRC; } ^{ws}*REM.*\n { cue_lineno++; /* ignore comments */ } {ws}+ { /* ignore whitespace */ } -[[:digit:]]+ { cue_yylval.ival = atoi(yytext); return NUMBER; } +[[:digit:]]+ { yylval.ival = atoi(yytext); return NUMBER; } : { return yytext[0]; } ^{ws}*\n { cue_lineno++; /* blank line */ } diff --git a/lib/toc_parse.y b/lib/toc_parse.y index 9bd5fc4..a2d932b 100644 --- a/lib/toc_parse.y +++ b/lib/toc_parse.y @@ -11,10 +11,11 @@ #include #include "cd.h" #include "time.h" +#include "toc_parse_prefix.h" #define YYDEBUG 1 -extern int toc_yylex(); +extern int yylex(); void yyerror (char *s); static Cd *cd = NULL; @@ -325,7 +326,7 @@ opt_nl /* lexer interface */ extern int toc_lineno; -extern int toc_yydebug; +extern int yydebug; extern FILE *toc_yyin; void yyerror (char *s) @@ -336,9 +337,9 @@ void yyerror (char *s) Cd *toc_parse (FILE *fp) { toc_yyin = fp; - toc_yydebug = 0; + yydebug = 0; - if (0 == toc_yyparse()) + if (0 == yyparse()) return cd; return NULL; diff --git a/lib/toc_parse_prefix.h b/lib/toc_parse_prefix.h new file mode 100644 index 0000000..02aa31e --- /dev/null +++ b/lib/toc_parse_prefix.h @@ -0,0 +1,44 @@ +/* Remap normal yacc names so we can have multiple parsers + * see http://www.gnu.org/software/automake/manual/html_node/Yacc-and-Lex.html + */ + +#define yymaxdepth toc_yymaxdepth +#define yyparse toc_yyparse +#define yylex toc_yylex +#define yyerror toc_yyerror +#define yylval toc_yylval +#define yychar toc_ychar +#define yydebug toc_yydebug +#define yypact toc_yypact +#define yyr1 toc_yyr1 +#define yyr2 toc_yyr2 +#define yydef toc_yydef +#define yychk toc_yychk +#define yypgo toc_yypgo +#define yyact toc_yyact +#define yyexca toc_yyexca +#define yyerrflag toc_yyerrflag +#define yynerrs toc_yynerrs +#define yyps toc_yyps +#define yypv toc_yypv +#define yys toc_yys +#define yy_yys toc_yy_yys +#define yystate toc_yystate +#define yytmp toc_yytmp +#define yyv toc_yyv +#define yy_yyv toc_yy_yyv +#define yyval toc_yyval +#define yylloc toc_yylloc +#define yyreds toc_yyreds +#define yytoks toc_yytoks +#define yylhs toc_yylhs +#define yylen toc_yylen +#define yydefred toc_yydefred +#define yydgoto toc_yydgoto +#define yysinde toc_yysindex +#define yyrindex toc_yyrindex +#define yygindex toc_yygindex +#define yytable toc_yytable +#define yycheck toc_yycheck +#define yyname toc_yyname +#define yyrule toc_yyrule diff --git a/lib/toc_scan.l b/lib/toc_scan.l index c0967a6..30a477e 100644 --- a/lib/toc_scan.l +++ b/lib/toc_scan.l @@ -9,6 +9,7 @@ #include #include #include "cd.h" +#include "toc_parse_prefix.h" #include "toc_parse.h" int toc_lineno = 1; @@ -18,6 +19,7 @@ ws [ \t\r] nonws [^ \t\r\n] %option noyywrap +%option prefix="toc_yy" %s NAME @@ -25,41 +27,41 @@ nonws [^ \t\r\n] \'([^\']|\\\')*\' | \"([^\"]|\\\")*\" { - toc_yylval.sval = strdup(yytext + 1); - toc_yylval.sval[strlen(toc_yylval.sval) - 1] = '\0'; + yylval.sval = strdup(yytext + 1); + yylval.sval[strlen(yylval.sval) - 1] = '\0'; BEGIN(INITIAL); return STRING; } {nonws}+ { - toc_yylval.sval = strdup(yytext); + yylval.sval = strdup(yytext); BEGIN(INITIAL); return STRING; } CATALOG { BEGIN(NAME); return CATALOG; } -CD_DA { toc_yylval.ival = MODE_CD_DA; return CD_DA; } -CD_ROM { toc_yylval.ival = MODE_CD_ROM; return CD_ROM; } -CD_ROM_XA { toc_yylval.ival = MODE_CD_ROM_XA; return CD_ROM_XA; } +CD_DA { yylval.ival = MODE_CD_DA; return CD_DA; } +CD_ROM { yylval.ival = MODE_CD_ROM; return CD_ROM; } +CD_ROM_XA { yylval.ival = MODE_CD_ROM_XA; return CD_ROM_XA; } TRACK { return TRACK; } -AUDIO { toc_yylval.ival = MODE_AUDIO; return AUDIO; } -MODE1 { toc_yylval.ival = MODE_MODE1; return MODE1; } -MODE1_RAW { toc_yylval.ival = MODE_MODE1_RAW; return MODE1_RAW; } -MODE2 { toc_yylval.ival = MODE_MODE2; return MODE2; } -MODE2_FORM1 { toc_yylval.ival = MODE_MODE2_FORM1; return MODE2_FORM1; } -MODE2_FORM2 { toc_yylval.ival = MODE_MODE2_FORM2; return MODE2_FORM2; } -MODE2_FORM_MIX { toc_yylval.ival = MODE_MODE2_FORM_MIX; return MODE2_FORM_MIX; } -MODE2_RAW { toc_yylval.ival = MODE_MODE2_RAW; return MODE2_RAW; } -RW { toc_yylval.ival = SUB_MODE_RW; return RW; } -RW_RAW { toc_yylval.ival = SUB_MODE_RW_RAW; return RW_RAW; } +AUDIO { yylval.ival = MODE_AUDIO; return AUDIO; } +MODE1 { yylval.ival = MODE_MODE1; return MODE1; } +MODE1_RAW { yylval.ival = MODE_MODE1_RAW; return MODE1_RAW; } +MODE2 { yylval.ival = MODE_MODE2; return MODE2; } +MODE2_FORM1 { yylval.ival = MODE_MODE2_FORM1; return MODE2_FORM1; } +MODE2_FORM2 { yylval.ival = MODE_MODE2_FORM2; return MODE2_FORM2; } +MODE2_FORM_MIX { yylval.ival = MODE_MODE2_FORM_MIX; return MODE2_FORM_MIX; } +MODE2_RAW { yylval.ival = MODE_MODE2_RAW; return MODE2_RAW; } +RW { yylval.ival = SUB_MODE_RW; return RW; } +RW_RAW { yylval.ival = SUB_MODE_RW_RAW; return RW_RAW; } NO { return NO; } -COPY { toc_yylval.ival = FLAG_PRE_EMPHASIS; return COPY; } -PRE_EMPHASIS { toc_yylval.ival = FLAG_COPY_PERMITTED; return PRE_EMPHASIS; } -FOUR_CHANNEL_AUDIO { toc_yylval.ival = FLAG_FOUR_CHANNEL; return FOUR_CHANNEL_AUDIO; } -TWO_CHANNEL_AUDIO { toc_yylval.ival = FLAG_FOUR_CHANNEL; return TWO_CHANNEL_AUDIO; } +COPY { yylval.ival = FLAG_PRE_EMPHASIS; return COPY; } +PRE_EMPHASIS { yylval.ival = FLAG_COPY_PERMITTED; return PRE_EMPHASIS; } +FOUR_CHANNEL_AUDIO { yylval.ival = FLAG_FOUR_CHANNEL; return FOUR_CHANNEL_AUDIO; } +TWO_CHANNEL_AUDIO { yylval.ival = FLAG_FOUR_CHANNEL; return TWO_CHANNEL_AUDIO; } /* ISRC is with CD-TEXT items */ @@ -76,24 +78,24 @@ CD_TEXT { return CD_TEXT; } LANGUAGE_MAP { return LANGUAGE_MAP; } LANGUAGE { return LANGUAGE; } -TITLE { BEGIN(NAME); toc_yylval.ival = PTI_TITLE; return TITLE; } -PERFORMER { BEGIN(NAME); toc_yylval.ival = PTI_PERFORMER; return PERFORMER; } -SONGWRITER { BEGIN(NAME); toc_yylval.ival = PTI_SONGWRITER; return SONGWRITER; } -COMPOSER { BEGIN(NAME); toc_yylval.ival = PTI_COMPOSER; return COMPOSER; } -ARRANGER { BEGIN(NAME); toc_yylval.ival = PTI_ARRANGER; return ARRANGER; } -MESSAGE { BEGIN(NAME); toc_yylval.ival = PTI_MESSAGE; return MESSAGE; } -DISC_ID { BEGIN(NAME); toc_yylval.ival = PTI_DISC_ID; return DISC_ID; } -GENRE { BEGIN(NAME); toc_yylval.ival = PTI_GENRE; return GENRE; } -TOC_INFO1 { BEGIN(NAME); toc_yylval.ival = PTI_TOC_INFO1; return TOC_INFO1; } -TOC_INFO2 { BEGIN(NAME); toc_yylval.ival = PTI_TOC_INFO2; return TOC_INFO2; } -UPC_EAN { BEGIN(NAME); toc_yylval.ival = PTI_UPC_ISRC; return UPC_EAN; } -ISRC { BEGIN(NAME); toc_yylval.ival = PTI_UPC_ISRC; return ISRC; } -SIZE_INFO { BEGIN(NAME); toc_yylval.ival = PTI_SIZE_INFO; return SIZE_INFO; } +TITLE { BEGIN(NAME); yylval.ival = PTI_TITLE; return TITLE; } +PERFORMER { BEGIN(NAME); yylval.ival = PTI_PERFORMER; return PERFORMER; } +SONGWRITER { BEGIN(NAME); yylval.ival = PTI_SONGWRITER; return SONGWRITER; } +COMPOSER { BEGIN(NAME); yylval.ival = PTI_COMPOSER; return COMPOSER; } +ARRANGER { BEGIN(NAME); yylval.ival = PTI_ARRANGER; return ARRANGER; } +MESSAGE { BEGIN(NAME); yylval.ival = PTI_MESSAGE; return MESSAGE; } +DISC_ID { BEGIN(NAME); yylval.ival = PTI_DISC_ID; return DISC_ID; } +GENRE { BEGIN(NAME); yylval.ival = PTI_GENRE; return GENRE; } +TOC_INFO1 { BEGIN(NAME); yylval.ival = PTI_TOC_INFO1; return TOC_INFO1; } +TOC_INFO2 { BEGIN(NAME); yylval.ival = PTI_TOC_INFO2; return TOC_INFO2; } +UPC_EAN { BEGIN(NAME); yylval.ival = PTI_UPC_ISRC; return UPC_EAN; } +ISRC { BEGIN(NAME); yylval.ival = PTI_UPC_ISRC; return ISRC; } +SIZE_INFO { BEGIN(NAME); yylval.ival = PTI_SIZE_INFO; return SIZE_INFO; } "//".*\n { toc_lineno++; /* ignore comments */ } {ws}+ { /* ignore whitespace */ } -[[:digit:]]+ { toc_yylval.ival = atoi(yytext); return NUMBER; } +[[:digit:]]+ { yylval.ival = atoi(yytext); return NUMBER; } :|,|\{|\} { return yytext[0]; } ^{ws}*\n { toc_lineno++; /* blank line */ }