New directory tree, with preprocessor/ inside interpretor/.
[Faustine.git] / interpretor / preprocessor / faust-0.9.47mr3 / compiler / parser / faustlexer.l
diff --git a/interpretor/preprocessor/faust-0.9.47mr3/compiler/parser/faustlexer.l b/interpretor/preprocessor/faust-0.9.47mr3/compiler/parser/faustlexer.l
new file mode 100644 (file)
index 0000000..9286637
--- /dev/null
@@ -0,0 +1,213 @@
+/* -*- 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);
+<comment>[^*\x0a\x0d]*                 /* eat anything that's not a '*'                */
+<comment>"*"+[^*/\x0a\x0d]*            /* eat up '*'s not followed by '/'s     */
+<comment>\x0a\x0d                              /* no need to increment yylineno here   */
+<comment>\x0a                                  /* no need to increment yylineno here   */
+<comment>\x0d                                  /* no need to increment yylineno here   */
+<comment>"*"+"/"                               BEGIN(INITIAL);
+
+"<mdoc>"                                               { BEGIN(doc); return BDOC; }
+<doc>.                                                 return DOCCHAR; /* char by char, may be slow ?? */
+<doc>\n                                                        return DOCCHAR; /* keep newline chars */
+<doc>"<notice/>"                               return NOTICE;  /* autoclosing tag */
+<doc>"<notice />"                              return NOTICE;  /* autoclosing tag */
+<doc>"<listing"                                        { BEGIN(lst);           return BLST; } /* autoclosing tag */
+<doc>"<equation>"                              { BEGIN(INITIAL);       return BEQN; }
+"</equation>"                                  { BEGIN(doc);           return EEQN; }
+<doc>"<diagram>"                               { BEGIN(INITIAL);       return BDGM; }
+"</diagram>"                                   { BEGIN(doc);           return EDGM; }
+<doc>"<metadata>"                              { BEGIN(INITIAL);       return BMETADATA; }
+"</metadata>"                                  { BEGIN(doc);           return EMETADATA; }
+<doc>"</mdoc>"                                 { BEGIN(INITIAL);       return EDOC; }
+
+<lst>"true"                                            return LSTTRUE;
+<lst>"false"                                   return LSTFALSE;
+<lst>"dependencies"                            return LSTDEPENDENCIES;
+<lst>"mdoctags"                                        return LSTMDOCTAGS;
+<lst>"distributed"                             return LSTDISTRIBUTED;
+<lst>"="                                               return LSTEQ;
+<lst>"\""                                              return LSTQ;
+<lst>"/>"                                              { 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 */
+
+<<EOF>>                yyterminate();
+
+.           printf("extra text is : %s\n", yytext); return EXTRA;
+
+
+%%
+int yywrap() { return 1; }
+