99 lines
1.9 KiB
Plaintext
99 lines
1.9 KiB
Plaintext
/* $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;
|
|
|
|
<INITIAL,HEX>[ \t\r] /* skip whitespace */;
|
|
<INITIAL,HEX>"#".*\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}{Hex}? sscanf (yytext, "%lx", &yyval); return INT;
|
|
|
|
[a-g][#b+-]?[0-9]+ return NOTEVAL;
|
|
|
|
<INITIAL,HEX>\" BEGIN (QUOTE);
|
|
<QUOTE>[^\\"\n]* yymore();
|
|
<QUOTE>\" BEGIN (0); return STRING;
|
|
<QUOTE>\\(.|\n) yymore();
|
|
<QUOTE>\n { error ("unterminated string");
|
|
lineno++; eol_seen++; BEGIN(0); return EOL;
|
|
}
|
|
<QUOTE><<EOF>> error ("EOF in string"); return EOF;
|
|
|
|
<INITIAL,HEX>\\[ \t\r]*\n lineno++;
|
|
<INITIAL,HEX>\n lineno++; eol_seen++; BEGIN(0); return EOL;
|
|
|
|
<HEX>[g-z][a-z]+ BEGIN (0); return ERR;
|
|
<HEX>. BEGIN (0); return ERR;
|
|
[a-z]+ return ERR;
|
|
. return ERR;
|
|
|
|
<<EOF>> return EOF;
|
|
|
|
%%
|