gstreamer/gst/parse/parse.l
Benjamin Otte 3a897e2f30 rewritten pipeline parsing lands. Have fun breaking it.
Original commit message from CVS:
rewritten pipeline parsing lands. Have fun breaking it.
regressions:
- No support for filtered links. If anybody needs this, please contact me and I'll add it as fast as possible.

improvements:
- The pipeline building actually works as expected.
- syntax compatible nearly everywhere but more flexible
- better property parsing (you can now set enums by name or nick)
- uses locked_state to allow for delayed pads
- can connect video pipelines without the need for queues
- allows properties on bins
- does not return a bin, but an element.

You may want to read docs/random/company/gstparse to learn how it works.
2003-04-08 21:59:44 +00:00

101 lines
2.1 KiB
Text

%{
#include <math.h>
#include <ctype.h>
#include <string.h>
#include "types.h"
#include "../gstinfo.h"
#include "grammar.tab.h"
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifdef G_HAVE_ISO_VARARGS
# ifdef GST_DEBUG_ENABLED
# define PRINT(...) GST_DEBUG (GST_CAT_PIPELINE, "flex: "__VA_ARGS__)
# endif
#elif defined(G_HAVE_GNUC_VARARGS)
# ifdef GST_DEBUG_ENABLED
# define PRINT(...) GST_DEBUG (GST_CAT_PIPELINE, "flex: "##args)
# endif
#else
# ifdef GST_DEBUG_ENABLED
# define PRINT(a...) GST_DEBUG (GST_CAT_PIPELINE, "flex: "##a)
# endif
#endif // G_HAVE_ISO_VARARGS
#define YY_DECL int _gst_parse_yylex (YYSTYPE *lvalp)
#define YY_NO_UNPUT
%}
_operators [(){}.:!,=]
_identifier [[:alpha:]][[:alnum:]\-_%]*
_char ("\\".)|([^[:space:]])
_string {_char}+|("\""([^\"]|"\\\"")*"\"")
_comma [[:space:]]*","[[:space:]]*
_assign [[:space:]]*"="[[:space:]]*
/* we must do this here, because nearly everything matches a {_string} */
_assignment {_identifier}{_assign}{_string}
/* get pad/element references and stuff with dots right */
_padref "."{_identifier}
_ref {_identifier}"."{_identifier}?
_binref {_identifier}[[:space:]]*"."[[:space:]]*"("
%x value
%option noyywrap
%%
{_assignment} {
/* "=" */
PRINT ("ASSIGNMENT: %s\n", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return ASSIGNMENT;
}
{_padref} {
yytext++;
PRINT ("PADREF: %s\n", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return PADREF;
}
{_ref} {
PRINT ("REF: %s\n", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return REF;
}
{_binref} {
gchar *pos = yytext;
while (!g_ascii_isspace (*pos) && (*pos != '.')) pos++;
*pos = '\0';
PRINT ("BINREF: %s\n", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return BINREF;
}
{_identifier} {
PRINT ("IDENTIFIER: %s\n", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return IDENTIFIER;
}
{_operators} { PRINT ("OPERATOR: [%s]\n", yytext); return *yytext; }
[[:space:]]+ { PRINT ("SPACE: [%s]\n", yytext); }
. {
printf ("???: %s\n", yytext);
return *yytext;
}
%%