Warning, /frameworks/solid/src/solid/devices/predicate_parser.y is written in an unsupported language. File is not indexed.

0001 %{
0002 #include <stdlib.h>
0003 #include <stdio.h>
0004 #include "predicate_parser.h"
0005 #include "predicateparse.h"
0006 
0007 #define YYLTYPE_IS_TRIVIAL 0
0008 #define YYENABLE_NLS 0
0009 void Soliderror(yyscan_t scanner, const char *s);
0010 int Solidlex( YYSTYPE *yylval, yyscan_t scanner );
0011 int Solidlex_init( yyscan_t *scanner );
0012 int Solidlex_destroy( yyscan_t *scanner );
0013 void PredicateParse_initLexer( const char *s, yyscan_t scanner );
0014 void PredicateParse_mainParse( const char *_code );
0015 
0016 %}
0017 
0018 %code requires{
0019 #ifndef YY_TYPEDEF_YY_SCANNER_T
0020 #define YY_TYPEDEF_YY_SCANNER_T
0021 typedef void *yyscan_t;
0022 #endif
0023 }
0024 
0025 %union
0026 {
0027      char valb;
0028      int vali;
0029      double vald;
0030      char *name;
0031      void *ptr;
0032 }
0033 
0034 %token EQ
0035 %token MASK
0036 
0037 %token AND
0038 %token OR
0039 %token IS
0040 
0041 %token <valb> VAL_BOOL
0042 %token <name> VAL_STRING
0043 %token <name> VAL_ID
0044 %token <vali> VAL_NUM
0045 %token <vald> VAL_FLOAT
0046 
0047 %type <ptr> predicate
0048 %type <ptr> predicate_atom
0049 %type <ptr> predicate_or
0050 %type <ptr> predicate_and
0051 %type <ptr> string_list
0052 %type <ptr> string_list_rec
0053 %type <ptr> value
0054 
0055 %destructor { PredicateParse_destroy( $$ ); } predicate
0056 %destructor { PredicateParse_destroy( $$ ); } predicate_atom
0057 %destructor { PredicateParse_destroy( $$ ); } predicate_or
0058 %destructor { PredicateParse_destroy( $$ ); } predicate_and
0059 
0060 %define api.pure
0061 
0062 %lex-param   { yyscan_t scanner }
0063 %parse-param { yyscan_t scanner }
0064 
0065 %%
0066 
0067 predicate: predicate_atom { PredicateParse_setResult( $<ptr>1 ); $$ = $<ptr>1; }
0068          | '[' predicate_or ']' { PredicateParse_setResult( $<ptr>2 ); $$ = $<ptr>2; }
0069          | '[' predicate_and ']' { PredicateParse_setResult( $<ptr>2 ); $$ = $<ptr>2; }
0070 
0071 predicate_atom: VAL_ID '.' VAL_ID EQ value { $$ = PredicateParse_newAtom( $<name>1, $<name>3, $<ptr>5 ); }
0072               | VAL_ID '.' VAL_ID MASK value { $$ = PredicateParse_newMaskAtom( $<name>1, $<name>3, $<ptr>5 ); }
0073               | IS VAL_ID { $$ = PredicateParse_newIsAtom( $<name>2 ); }
0074 
0075 predicate_or: predicate OR predicate { $$ = PredicateParse_newOr( $<ptr>1, $<ptr>3 ); }
0076 
0077 predicate_and: predicate AND predicate { $$ = PredicateParse_newAnd( $<ptr>1, $<ptr>3 ); }
0078 
0079 value: VAL_STRING { $$ = PredicateParse_newStringValue( $<name>1 ); }
0080      | VAL_BOOL { $$ = PredicateParse_newBoolValue( $<valb>1 ); }
0081      | VAL_NUM { $$ = PredicateParse_newNumValue( $<vali>1 ); }
0082      | VAL_FLOAT { $$ = PredicateParse_newDoubleValue( $<vald>1 ); }
0083      | string_list { $$ = $<ptr>1; }
0084 
0085 string_list: '{' string_list_rec '}' { $$ = $<ptr>1; }
0086 
0087 string_list_rec: /* empty */ { $$ = PredicateParse_newEmptyStringListValue(); }
0088                | VAL_STRING { $$ = PredicateParse_newStringListValue( $<ptr>1 ); }
0089                | VAL_STRING ',' string_list_rec { $$ = PredicateParse_appendStringListValue( $<name>1, $<ptr>3 ); }
0090 
0091 %%
0092 
0093 void Soliderror ( yyscan_t scanner, const char *s )  /* Called by Solidparse on error */
0094 {
0095     PredicateParse_errorDetected(s);
0096 }
0097 
0098 void PredicateParse_mainParse( const char *_code )
0099 {
0100     yyscan_t scanner;
0101     Solidlex_init( &scanner );
0102     PredicateParse_initLexer( _code, scanner );
0103     Solidparse( scanner );
0104     Solidlex_destroy( scanner );
0105 }
0106