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