/* lexical rules for bmw2tex version 1.00 by Walt Innes {walt@slac.stanford.edu) */ %{ #define MAXLEN 1000 #define YYSTYPE char* #include "y.tab.h" #include #include #include "tokens.h" /* _WIN32 definition added for use with MS VC++ compiler. */ #ifdef _WIN32 #include #include #include #endif char *addpit( char *, size_t, char * ); %} TSEP [ \n\t\r\f\v\b\032] SEP [ \n\r\f\v\b\032] THEME ["THEME"] LPITCH ([bcdefBCDEF]|([lhLH][gaGA])) NQUOTE [^\"] ANMB [0-9] %% [\t]{TSEP}* {unput(' '); return BEAT; } [\"]{ANMB}+[\"] {yylval = (char *) malloc(MAXLEN); strncpy(yylval,yytext+1,yyleng-2); strcpy(yylval+yyleng-2,""); return NUMBER; } [\"]{NQUOTE}*[\"] {yylval = (char *) malloc(MAXLEN); strncpy(yylval,yytext+1,yyleng-2); strcpy(yylval+yyleng-2,""); return TXT; } {TSEP}*[&]{TSEP}* {yylval=reprmorceau; unput(' '); return CLEFT; } {TSEP}+"^"[tT]{LPITCH}{TSEP}+[&]{TSEP}* { yylval=addpit(yytext, yyleng, itenu); unput(' '); return TIECLEFT; } [!]{TSEP}* {yylval=xbarre; unput(' '); return BAR; } {TSEP}+"I!''"{TSEP}* {yylval=leftrepeatsymbol; unput(' '); return BAR; } {TSEP}+"^"[tT]{LPITCH}{TSEP}+[!]{TSEP}* { yylval=addpit(yytext, yyleng, itenu); unput(' '); return TIEXBAR; } {TSEP}+"^"[tT]{LPITCH}{TSEP}+"I!''"{TSEP}* { yylval=addpit(yytext, yyleng, itenu); unput(' '); return TIELRBAR; } {TSEP}+"!"[tT]{TSEP}* {yylval=alaligne; return EOL; } {TSEP}+"!I"{TSEP}* {yylval=setdoublebar; return EOL; } {TSEP}+"^"[tT]{LPITCH}{TSEP}+"!t" {yylval=addpit(yytext, yyleng, itenu); return TIEALA; } {TSEP}+"^"[tT]{LPITCH}{TSEP}+"!I" {yylval=addpit(yytext, yyleng, itenu); return TIEDBL; } {TSEP}+"I!"{TSEP}* {yylval=doublebar; unput(' '); return BAR; } {TSEP}+"^"[tT]{LPITCH}{TSEP}+"I!"{TSEP}* { yylval=addpit(yytext, yyleng, itenu); unput(' '); return TIEDBAR; } {TSEP}+"''!I"{TSEP}* {yylval=setrightrepeat; unput(' '); return EOL; } {SEP}*[\t]{TSEP}*"^t"{LPITCH} {yylval = addpit(yytext, yyleng, itenu); return TIEBEAT; } {TSEP}*"^"[tT]{LPITCH}{SEP}*[\t]{TSEP}* { unput(' '); yylval = addpit(yytext, yyleng, itenu); return TIEBEAT; } {SEP}+"^"[tT]{LPITCH} {yylval = addpit(yytext, yyleng, itenu); return TIE; } {SEP}+"^3"{LPITCH} {yylval=triolet; return TRIPLET; } {SEP}+"\'"1 {yylval=first; return STARTFS; } {SEP}+"\'"2 {yylval=second; return STARTFS; } {SEP}+"\'"[12]{ANMB}+ {yylval=(char *) malloc(MAXLEN); strncpy(yylval,yytext+2,yyleng-1); return STARTFS; } {SEP}+"_'" { yylval=endfs; return ENDFS; } [0-9]+"_"[0-9]+ { yylval = (char *) malloc(MAXLEN); strncpy(yylval,yytext,yyleng+1); return METERFRAC; } {TSEP}+[Cc]{TSEP}+ {yylval=meterC; unput(' '); return METER; } {TSEP}+[Cc]_{TSEP}+ {yylval=allabreve; unput(' '); return METER; } "_1" {yylval=wh ; return TIME; } "_2" {yylval=hh ; return TIME; } "_4" {yylval=ql ; return TIME; } "_8" {yylval=c ; return TIME; } "_16" {yylval=s ; return TIME; } "_32" {yylval=t ; return TIME; } "_64" {yylval=sf ; return TIME; } [rR] {yylval=r ; return BEAM; } [lL] {yylval=l ; return BEAM; } {SEP}+[Ll][Gg] { yylval=N ; return THEME; } {SEP}+[Ll][Aa] { yylval=a ; return THEME; } {SEP}+[Bb] { yylval=b ; return THEME; } {SEP}+[Cc] { yylval=c ; return THEME; } {SEP}+[Dd] { yylval=d ; return THEME; } {SEP}+[Ee] { yylval=e ; return THEME; } {SEP}+[Ff] { yylval=f ; return THEME; } {SEP}+[Hh][Gg] { yylval=g ; return THEME; } {SEP}+[Hh][Aa] { yylval=hh ; return THEME; } {SEP}+[dD][gG] {yylval=grd; return EMB; } {SEP}+[eE][gG] {yylval=gre; return EMB; } {SEP}+[gG][gG] {yylval=grg; return EMB; } {SEP}+[tT][gG] {yylval=grh; return EMB; } {SEP}*"'"{LPITCH} { return DOT; } {SEP}*[\t]{TSEP}*"'"{LPITCH} {unput('\t'); return DOT; } {SEP}+"str"{LPITCH} {yylval=addpit(yytext,yyleng,gr); return EMBP; } {SEP}+"db"{LPITCH} {yylval=addpit(yytext,yyleng,dbl); return EMBP; } {SEP}+"tdb"{LPITCH} {yylval=addpit(yytext,yyleng,tdbl); return EMBP; } {SEP}+"hdb"{LPITCH} {yylval=addpit(yytext,yyleng,hdbl); return EMBP; } {SEP}+"hst"{LPITCH} {yylval=addpit(yytext,yyleng,hslur); return EMBP; } {SEP}+"lhst"{LPITCH} {yylval=addpit(yytext,yyleng,hshk); return EMBP; } {SEP}+"gst"{LPITCH} {yylval=addpit(yytext,yyleng,slur); return EMBP; } {SEP}+"lgst"{LPITCH} {yylval=addpit(yytext,yyleng,shk); return EMBP; } {SEP}+"tst"{LPITCH} {yylval=addpit(yytext,yyleng,tslur); return EMBP; } {SEP}+"ltst"{LPITCH} {yylval=addpit(yytext,yyleng,tshk); return EMBP; } {SEP}+"pel"{LPITCH} {yylval=addpit(yytext,yyleng,pel); return EMBP; } {SEP}+"lpel"{LPITCH} {yylval=addpit(yytext,yyleng,lpel); return EMBP; } {SEP}+"tpel"{LPITCH} {yylval=addpit(yytext,yyleng,tpel); return EMBP; } {SEP}+"ltpel"{LPITCH} {yylval=addpit(yytext,yyleng,ltpel); return EMBP; } {SEP}+"hpel"{LPITCH} {yylval=addpit(yytext,yyleng,hpel); return EMBP; } {SEP}+"hgrp"{LPITCH} {yylval=addpit(yytext,yyleng,catch); return EMBP; } {SEP}+"ggrp"{LPITCH} {yylval=addpit(yytext,yyleng,scatch); return EMBP; } {SEP}+"tgrp"{LPITCH} {yylval=addpit(yytext,yyleng,tcatch); return EMBP; } {SEP}+"thr"[dD] {yylval=thrwd; return EMB; } {SEP}+"hvthr"[dD] {yylval=gripthrwd; return EMB; } {SEP}+"brl" {yylval=wbirl; return EMB; } {SEP}+"abr" {yylval=birl; return EMB; } {SEP}+"gbr" {yylval=sbirl; return EMB; } {SEP}+"grp" {yylval=grip; return EMB; } {SEP}+"grp"[bB] {yylval=dgrip; return EMB; } {SEP}+"tar" {yylval=taor; return EMB; } {SEP}+"tar"[bB] {yylval=dtaor; return EMB; } {SEP}+"bubly" {yylval=darodo; return EMB; } {SEP}+"hbubly" {yylval=Ndarodo; return EMB; } {SEP}+"edre" {yylval=edre; return EMB; } {SEP}+"edre"[bB] {yylval=edreb; return EMB; } {SEP}+"edre"[cC] {yylval=edrec; return EMB; } {SEP}+"edre"[dD] {yylval=edred; return EMB; } {SEP}+"chedare" {yylval=dare; return EMB; } {SEP}+"dbst"[Ff] {yylval=dbstf; return EMB; } {SEP}+"dbst"[hH][gG] {yylval=dbsth; return EMB; } {SEP}+"st"{LPITCH} {yylval=addpit(yytext,yyleng,hslur); return EMBP; } {SEP}+"lst"{LPITCH} {yylval=addpit(yytext,yyleng,hshk); return EMBP; } {SEP}+"thr" {yylval=thrwd; return EMB; } {SEP}+"bub" {yylval=dgrip; return EMB; } {SEP}+"tad" {yylval=dtaor; return EMB; } {SEP}+"hub" {yylval=darodo; return EMB; } {SEP}+"lhub" {yylval=Ndarodo; return EMB; } {SEP}+"dstf" {yylval=dbstf; return EMB; } {SEP}+"dsthg" {yylval=dbsth; return EMB; } {SEP}+"bgrp" {yylval=hgrpb; return EMB; } {SEP}+"cgrp" {yylval=hgrpc; return EMB; } {SEP}+"gbgrp" {yylval=scatchb; return EMB; } {SEP}+"gcgrp" {yylval=scatchc; return EMB; } {SEP}+"tbgrp" {yylval=tcatchb; return EMB; } {SEP}+"tcgrp" {yylval=tcatchc; return EMB; } {TSEP}+"!!" {yylval=setdoublebar; return EOL; } [a-z] { ECHO; unput(' '); } {SEP}{SEP}+ {unput(' '); } {SEP}*[\n] { } {SEP} { } %% yywrap(){return 1;} char *addpit( char *yyt, size_t yyl, char *tok ) { char *retptr; retptr = (char *) malloc(MAXLEN); strcpy(retptr,tok); while( *(yyt+yyl-1) != 'b' && *(yyt+yyl-1) != 'c' && *(yyt+yyl-1) != 'd' && *(yyt+yyl-1) != 'e' && *(yyt+yyl-1) != 'f' && *(yyt+yyl-1) != 'g' && *(yyt+yyl-1) != 'a' && yyl > 1 ) yyl--; if ( *(yyt+yyl-1) == 'b' || *(yyt+yyl-1) == 'B' ) strcat(retptr,b); else if ( *(yyt+yyl-1) == 'c' || *(yyt+yyl-1) == 'C' ) strcat(retptr,c); else if ( *(yyt+yyl-1) == 'd' || *(yyt+yyl-1) == 'D' ) strcat(retptr,d); else if ( *(yyt+yyl-1) == 'e' || *(yyt+yyl-1) == 'E' ) strcat(retptr,e); else if ( *(yyt+yyl-1) == 'f' || *(yyt+yyl-1) == 'F' ) strcat(retptr,f); else if ( (*(yyt+yyl-1) == 'g' || *(yyt+yyl-1) == 'G') && (*(yyt+yyl-2) == 'h' || *(yyt+yyl-2) == 'H')) strcat(retptr,g); else if ( (*(yyt+yyl-1) == 'g' || *(yyt+yyl-1) == 'G') && (*(yyt+yyl-2) == 'l' || *(yyt+yyl-2) == 'L')) strcat(retptr,N); else if ( (*(yyt+yyl-1) == 'a' || *(yyt+yyl-1) == 'A') && (*(yyt+yyl-2) == 'l' || *(yyt+yyl-2) == 'L')) strcat(retptr,a); else if ( (*(yyt+yyl-1) == 'a' || *(yyt+yyl-1) == 'A') && (*(yyt+yyl-2) == 'h' || *(yyt+yyl-2) == 'H')) strcat(retptr,hh); return retptr; }