Warning, /frameworks/kuserfeedback/src/common/surveytargetexpressionparser.y is written in an unsupported language. File is not indexed.
0001 %{ 0002 /* 0003 SPDX-FileCopyrightText: 2017 Volker Krause <vkrause@kde.org> 0004 0005 SPDX-License-Identifier: MIT 0006 */ 0007 0008 #include "surveytargetexpression.h" 0009 #include "surveytargetexpressionparser_p.h" 0010 #include "surveytargetexpressionscanner.h" 0011 0012 #include <stdio.h> 0013 0014 using namespace KUserFeedback; 0015 0016 void yyerror(KUserFeedback::SurveyTargetExpression **expression, yyscan_t scanner, char const* msg) 0017 { 0018 Q_UNUSED(expression); 0019 Q_UNUSED(scanner); 0020 printf("PARSER ERROR: %s\n", msg); 0021 } 0022 0023 %} 0024 0025 %code requires { 0026 0027 #ifndef YY_TYPEDEF_YY_SCANNER_T 0028 #define YY_TYPEDEF_YY_SCANNER_T 0029 typedef void* yyscan_t; 0030 #endif 0031 0032 } 0033 0034 %define api.pure 0035 %lex-param { yyscan_t scanner } 0036 %parse-param { KUserFeedback::SurveyTargetExpression **expression } 0037 %parse-param { yyscan_t scanner } 0038 0039 %union { 0040 int intVal; 0041 double doubleVal; 0042 bool boolVal; 0043 char *str; 0044 KUserFeedback::SurveyTargetExpression *expression; 0045 } 0046 0047 %left T_OP_OR 0048 %left T_OP_AND 0049 0050 %token T_OP_EQ 0051 %token T_OP_NEQ 0052 %token T_OP_GT 0053 %token T_OP_GE 0054 %token T_OP_LT 0055 %token T_OP_LE 0056 0057 %token T_DOT 0058 %token T_LPAREN 0059 %token T_RPAREN 0060 %token T_LBRACKET 0061 %token T_RBRACKET 0062 0063 %token <doubleVal> T_DOUBLE 0064 %token <intVal> T_INTEGER 0065 %token <boolVal> T_BOOLEAN 0066 %token <str> T_STRING 0067 %token <str> T_IDENTIFIER 0068 0069 %type <expression> Expr 0070 %type <expression> Term 0071 %type <expression> Value 0072 0073 %destructor { free($$); } <str> 0074 %destructor { delete $$; } <expression> 0075 0076 0077 %% 0078 0079 Input: Expr { *expression = $1; } 0080 ; 0081 0082 Expr: Term { printf("TERM "); $$ = $1; } 0083 | T_LPAREN Expr[E] T_RPAREN { $$ = $E; } 0084 | Expr[L] T_OP_AND Expr[R] %prec T_OP_AND { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpLogicAnd, $L, $R); } 0085 | Expr[L] T_OP_OR Expr[R] %prec T_OP_OR { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpLogicOr, $L, $R); } 0086 ; 0087 0088 Term: Value[L] T_OP_EQ Value[R] { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpEqual, $L, $R); } 0089 | Value[L] T_OP_NEQ Value[R] { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpNotEqual, $L, $R); } 0090 | Value[L] T_OP_GT Value[R] { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpGreater, $L, $R); } 0091 | Value[L] T_OP_GE Value[R] { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpGreaterEqual, $L, $R); } 0092 | Value[L] T_OP_LT Value[R] { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpLess, $L, $R); } 0093 | Value[L] T_OP_LE Value[R] { $$ = new SurveyTargetExpression(SurveyTargetExpression::OpLessEqual, $L, $R); } 0094 ; 0095 0096 Value: T_IDENTIFIER[S] T_DOT T_IDENTIFIER[E] { 0097 $$ = new SurveyTargetExpression(QString::fromUtf8($S), QVariant(), QString::fromUtf8($E)); 0098 free($S); 0099 free($E); 0100 } 0101 | T_IDENTIFIER[S] T_LBRACKET T_INTEGER[I] T_RBRACKET T_DOT T_IDENTIFIER[E] { 0102 $$ = new SurveyTargetExpression(QString::fromUtf8($S), $I, QString::fromUtf8($E)); 0103 free($S); 0104 free($E); 0105 } 0106 | T_IDENTIFIER[S] T_LBRACKET T_STRING[K] T_RBRACKET T_DOT T_IDENTIFIER[E] { 0107 $$ = new SurveyTargetExpression(QString::fromUtf8($S), QString::fromUtf8($K), QString::fromUtf8($E)); 0108 free($S); 0109 free($K); 0110 free($E); 0111 } 0112 | T_DOUBLE { $$ = new SurveyTargetExpression($1); } 0113 | T_INTEGER { $$ = new SurveyTargetExpression($1); } 0114 | T_BOOLEAN { $$ = new SurveyTargetExpression($1); } 0115 | T_STRING { $$ = new SurveyTargetExpression(QString::fromUtf8($1)); free($1); } 0116 ; 0117 0118 %%