/* $Id: t2mf.fl,v 1.3 1991/11/15 19:31:00 piet Rel $ */ %{ #include "t2mf.h" #ifdef NO_YYLENG_VAR int yylength; #define YY_USER_ACTION yylength = yyleng #endif int do_hex = 0; int eol_seen = 0; int lineno = 1; long yyval; long bankno(); %} Hex [0-9a-f] %x QUOTE %x HEX %% if (do_hex) { BEGIN(HEX); do_hex = 0; } eol_seen = 0; [ \t\r] /* skip whitespace */; "#".*\n /* skip comment */ lineno++; MFile return MTHD; MTrk return MTRK; TrkEnd return TRKEND; On return ON; Off return OFF; Po(ly)?Pr return POPR; Par(am)? return PAR; Pb return PB; Pr(og)?Ch return PRCH; Ch(an)?Pr return CHPR; SysEx return SYSEX; Meta return META; SeqSpec return SEQSPEC; Text return TEXT; Copyright return COPYRIGHT; TrkName|SeqName return SEQNAME; InstrName return INSTRNAME; Lyric return LYRIC; Marker return MARKER; Cue return CUE; SeqNr return SEQNR; KeySig return KEYSIG; Tempo return TEMPO; TimeSig return TIMESIG; SMPTE return SMPTE; Arb return ARB; [:/] return '/'; minor return MINOR; major return MAJOR; ch= return CH; n(ote)?= return NOTE; v([oa]l)?= return VAL; c(on)?= return CON; p(rog)?= return PROG; [-+]?[0-9]+ sscanf (yytext, "%ld", &yyval); return INT; 0x{Hex}+ sscanf (yytext+2, "%lx", &yyval); return INT; \$[A-H1-8]+ yyval = bankno (yytext+1, yyleng-1); return INT; {Hex}{Hex}? sscanf (yytext, "%lx", &yyval); return INT; [a-g][#b+-]?[0-9]+ return NOTEVAL; \" BEGIN (QUOTE); [^\\"\n]* yymore(); \" BEGIN (0); return STRING; \\(.|\n) yymore(); \n { error ("unterminated string"); lineno++; eol_seen++; BEGIN(0); return EOL; } <> error ("EOF in string"); return EOF; \\[ \t\r]*\n lineno++; \n lineno++; eol_seen++; BEGIN(0); return EOL; [g-z][a-z]+ BEGIN (0); return ERR; . BEGIN (0); return ERR; [a-z]+ return ERR; . return ERR; <> return EOF; %%