mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-18 07:47:17 +00:00
94 lines
4.1 KiB
Text
94 lines
4.1 KiB
Text
%{
|
|
|
|
#include <math.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include "goomsl.h"
|
|
#include "goomsl_private.h"
|
|
#include "goomsl_yacc.h"
|
|
void yyerror(char *);
|
|
void yyparse(void);
|
|
|
|
GoomSL *currentGoomSL;
|
|
static int string_size;
|
|
static char string[1024];
|
|
%}
|
|
|
|
DIGIT [0-9]
|
|
XDIGIT [0-9a-f]
|
|
ID [a-zA-Z_@&][a-zA-Z0-9_\.]*
|
|
|
|
%S C_COMMENT
|
|
%S LINE_COMMENT
|
|
%S STRING
|
|
|
|
%%
|
|
|
|
<LINE_COMMENT,C_COMMENT,INITIAL>^[ \t]*\n { ++currentGoomSL->num_lines; /* Ignore empty lines */ }
|
|
<LINE_COMMENT,C_COMMENT,INITIAL>^[ \t]*"//"[^\n]*\n { ++currentGoomSL->num_lines; /* Ignore empty lines */ }
|
|
|
|
<LINE_COMMENT>\n { ++currentGoomSL->num_lines; yylval.charValue=*yytext; BEGIN INITIAL; return '\n'; }
|
|
<INITIAL>\n { ++currentGoomSL->num_lines; yylval.charValue=*yytext; return '\n'; }
|
|
|
|
<C_COMMENT>"*/" { BEGIN INITIAL; }
|
|
<C_COMMENT>\n { ++currentGoomSL->num_lines; }
|
|
<C_COMMENT,LINE_COMMENT>. { /* eat up comment */ }
|
|
|
|
<INITIAL>"#RST_LINE#" { currentGoomSL->num_lines = 0; }
|
|
<INITIAL>"#FILE ".*"#" { currentGoomSL->num_lines = 0; /* printf("%s\n", yytext); */ }
|
|
<INITIAL>"#"[^\n]* { /* ignore preprocessor lines */ }
|
|
|
|
<INITIAL>"/*" { BEGIN C_COMMENT; }
|
|
<INITIAL>"//" { BEGIN LINE_COMMENT; }
|
|
<INITIAL>\" { BEGIN STRING; string_size=0; }
|
|
|
|
<STRING>"\\n" { string[string_size++] = '\n'; }
|
|
<STRING>"\\\"" { string[string_size++] = '\"'; }
|
|
<STRING>\" { /* fin de la chaine: on cree le pointeur qui va bien */
|
|
unsigned int tmp;
|
|
BEGIN INITIAL;
|
|
string[string_size]=0;
|
|
tmp = gsl_malloc(currentGoomSL, string_size+1);
|
|
strcpy((char*)currentGoomSL->ptrArray[tmp],string);
|
|
sprintf(yylval.strValue, "0x%08x", tmp);
|
|
return LTYPE_PTR;
|
|
}
|
|
<STRING>. { string[string_size++] = *yytext; }
|
|
|
|
<INITIAL>"float" { return FLOAT_TK; }
|
|
<INITIAL>"int" { return INT_TK; }
|
|
<INITIAL>"boolean" { return INT_TK; }
|
|
<INITIAL>"ptr" { return PTR_TK; }
|
|
<INITIAL>"string" { return PTR_TK; }
|
|
<INITIAL>"declare" { return DECLARE; }
|
|
<INITIAL>"external" { return EXTERNAL; }
|
|
<INITIAL>"struct" { return STRUCT; }
|
|
<INITIAL>"not" { return NOT; }
|
|
<INITIAL>"while" { return WHILE; }
|
|
<INITIAL>"do" { return DO; }
|
|
<INITIAL>"for" { return FOR; }
|
|
<INITIAL>"in" { return IN; }
|
|
<INITIAL>"true" { strncpy(yylval.strValue, "1", 2047); return LTYPE_INTEGER; }
|
|
<INITIAL>"false" { strncpy(yylval.strValue, "0", 2047); return LTYPE_INTEGER; }
|
|
<INITIAL>{ID} { strncpy(yylval.strValue, yytext, 2047); return LTYPE_VAR; }
|
|
<INITIAL>{DIGIT}+ { strncpy(yylval.strValue, yytext, 2047); return LTYPE_INTEGER; }
|
|
<INITIAL>\'.\' { sprintf(yylval.strValue, "%d", (int)yytext[1]); return LTYPE_INTEGER; }
|
|
<INITIAL>"0x"{XDIGIT}+ { strncpy(yylval.strValue, yytext, 2047); return LTYPE_INTEGER; }
|
|
<INITIAL>{DIGIT}+"."{DIGIT}* { strncpy(yylval.strValue, yytext, 2047); return LTYPE_FLOAT; }
|
|
<INITIAL>{DIGIT}+"%" { sprintf(yylval.strValue, "%3.2f", atof(yytext)/100.0f); return LTYPE_FLOAT; }
|
|
<INITIAL>"+=" { return PLUS_EQ; }
|
|
<INITIAL>"*=" { return MUL_EQ; }
|
|
<INITIAL>"-=" { return SUB_EQ; }
|
|
<INITIAL>"/=" { return DIV_EQ; }
|
|
<INITIAL>"<=" { return LOW_EQ; }
|
|
<INITIAL>">=" { return SUP_EQ; }
|
|
<INITIAL>"!=" { return NOT_EQ; }
|
|
<INITIAL>"<>" { return NOT_EQ; }
|
|
<INITIAL>[ \t]+ /* eat up whitespace */
|
|
<INITIAL>. { yylval.charValue = *yytext; return *yytext; }
|
|
|
|
%%
|
|
|
|
|
|
int yywrap(void) { return 1; yyunput(0,0); }
|
|
|