Bladeren bron

Removed prefix flags from yacc and lex (to prepare for automake).

master
Svend Sorensen 19 jaren geleden
bovenliggende
commit
89f355e86d
7 gewijzigde bestanden met toevoegingen van 172 en 75 verwijderingen
  1. +7
    -4
      lib/Makefile
  2. +5
    -4
      lib/cue_parse.y
  3. +44
    -0
      lib/cue_parse_prefix.h
  4. +31
    -29
      lib/cue_scan.l
  5. +5
    -4
      lib/toc_parse.y
  6. +44
    -0
      lib/toc_parse_prefix.h
  7. +36
    -34
      lib/toc_scan.l

+ 7
- 4
lib/Makefile Bestand weergeven

@@ -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)



+ 5
- 4
lib/cue_parse.y Bestand weergeven

@@ -11,10 +11,11 @@
#include <string.h>
#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;


+ 44
- 0
lib/cue_parse_prefix.h Bestand weergeven

@@ -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

+ 31
- 29
lib/cue_scan.l Bestand weergeven

@@ -9,6 +9,7 @@
#include <stdlib.h>
#include <string.h>
#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;
}

<NAME>{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 */ }


+ 5
- 4
lib/toc_parse.y Bestand weergeven

@@ -11,10 +11,11 @@
#include <string.h>
#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;


+ 44
- 0
lib/toc_parse_prefix.h Bestand weergeven

@@ -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

+ 36
- 34
lib/toc_scan.l Bestand weergeven

@@ -9,6 +9,7 @@
#include <stdlib.h>
#include <string.h>
#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;
}

<NAME>{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 */ }


Laden…
Annuleren
Opslaan