/* -*- Mode: C++; tab-width: 4; c-basic-offset: 4 -*- */ /* Scanner for the Faust language */ %{ #include "tree.hh" #include "faustparser.hpp" #define YY_NO_UNISTD_H 1 extern int isatty (int ); %} DIGIT [0-9] ID [a-zA-Z][_a-zA-Z0-9]* LETTER [a-zA-Z] NUMBER ({DIGIT}+"."{DIGIT}*|"."{DIGIT}+|{DIGIT}+) WSPACE [ \t\n] TMACRO \\{ID}(\[(\ *({ID}|{NUMBER}),?\ *)\])?(\{(\ *({ID}|{NUMBER}),?\ *)*\})* %option yylineno %x comment %x doc %x lst %% "/*" BEGIN(comment); [^*\x0a\x0d]* /* eat anything that's not a '*' */ "*"+[^*/\x0a\x0d]* /* eat up '*'s not followed by '/'s */ \x0a\x0d /* no need to increment yylineno here */ \x0a /* no need to increment yylineno here */ \x0d /* no need to increment yylineno here */ "*"+"/" BEGIN(INITIAL); "" { BEGIN(doc); return BDOC; } . return DOCCHAR; /* char by char, may be slow ?? */ \n return DOCCHAR; /* keep newline chars */ "" return NOTICE; /* autoclosing tag */ "" return NOTICE; /* autoclosing tag */ """ { BEGIN(INITIAL); return BEQN; } "" { BEGIN(doc); return EEQN; } "" { BEGIN(INITIAL); return BDGM; } "" { BEGIN(doc); return EDGM; } "" { BEGIN(INITIAL); return BMETADATA; } "" { BEGIN(doc); return EMETADATA; } "" { BEGIN(INITIAL); return EDOC; } "true" return LSTTRUE; "false" return LSTFALSE; "dependencies" return LSTDEPENDENCIES; "mdoctags" return LSTMDOCTAGS; "distributed" return LSTDISTRIBUTED; "=" return LSTEQ; "\"" return LSTQ; "/>" { BEGIN(doc); return ELST; } {DIGIT}+ return INT; {DIGIT}+"."{DIGIT}* return FLOAT; {DIGIT}+"."{DIGIT}*e[-+]?{DIGIT}+ return FLOAT; {DIGIT}+e[-+]?{DIGIT}+ return FLOAT; "."{DIGIT}+ return FLOAT; "."{DIGIT}+e[-+]?{DIGIT}+ return FLOAT; ":" return SEQ; "," return PAR; "<:" return SPLIT; "+>" return MIX; ":>" return MIX; "~" return REC; "+" return ADD; "-" return SUB; "*" return MUL; "/" return DIV; "%" return MOD; "@" return FDELAY; "'" return DELAY1; "&" return AND; "|" return OR; "xor" return XOR; "<<" return LSH; ">>" return RSH; "<" return LT; "<=" return LE; ">" return GT; ">=" return GE; "==" return EQ; "!=" return NE; "_" return WIRE; "!" return CUT; ";" return ENDDEF; "=" return DEF; "(" return LPAR; ")" return RPAR; "{" return LBRAQ; "}" return RBRAQ; "[" return LCROC; "]" return RCROC; "\\" return LAMBDA; "." return DOT; "with" return WITH; "mem" return MEM; "prefix" return PREFIX; "int" return INTCAST; "float" return FLOATCAST; "rdtable" return RDTBL; "rwtable" return RWTBL; "select2" return SELECT2; "select3" return SELECT3; "ffunction" return FFUNCTION; "fconstant" return FCONSTANT; "fvariable" return FVARIABLE; "button" return BUTTON; "checkbox" return CHECKBOX; "vslider" return VSLIDER; "hslider" return HSLIDER; "nentry" return NENTRY; "vgroup" return VGROUP; "hgroup" return HGROUP; "tgroup" return TGROUP; "vbargraph" return VBARGRAPH; "hbargraph" return HBARGRAPH; "attach" return ATTACH; "acos" return ACOS; "asin" return ASIN; "atan" return ATAN; "atan2" return ATAN2; "cos" return COS; "sin" return SIN; "tan" return TAN; "exp" return EXP; "log" return LOG; "log10" return LOG10; "^" return POWOP; "pow" return POWFUN; "sqrt" return SQRT; "abs" return ABS; "min" return MIN; "max" return MAX; "fmod" return FMOD; "remainder" return REMAINDER; "floor" return FLOOR; "ceil" return CEIL; "rint" return RINT; "seq" return ISEQ; "par" return IPAR; "sum" return ISUM; "prod" return IPROD; "import" return IMPORT; "component" return COMPONENT; "library" return LIBRARY; "environment" return ENVIRONMENT; "declare" return DECLARE; "serialize" return SERIALIZE; "vectorize" return VECTORIZE; "#" return HASH; "rate" return RATE; "up" return UPSAMPLE; "down" return DOWNSAMPLE; "case" return CASE; "=>" return ARROW; _{ID} return IDENT; {ID} return IDENT; "\""[^\"]*"\"" return STRING; "<"{LETTER}*"."{LETTER}">" return FSTRING; "<"{LETTER}*">" return FSTRING; "//"[^\x0a\x0d]* /* eat up one-line comments */ [ \t\x0a\x0d]+ /* eat up whitespace */ <> yyterminate(); . printf("extra text is : %s\n", yytext); return EXTRA; %% int yywrap() { return 1; }