⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsgram.y

📁 The Kannel Open Source WAP and SMS gateway works as both an SMS gateway, for implementing keyword b
💻 Y
📖 第 1 页 / 共 2 页
字号:
		        ws_list_append(pctx, $1, parm);		}	;/* Statements. */Statement:	  Block		{		    if ($1)		        $$ = ws_stmt_block(pctx, $1->first_line, $1->last_line,				           $1);		    else		        $$ = NULL;		}	| VariableStatement	| ';'			/* EmptyStatement */		{ $$ = ws_stmt_empty(pctx, @1.first_line); }	| Expression ';'	/* ExpressionStatement */		{ $$ = ws_stmt_expr(pctx, $1->line, $1); }	| IfStatement	| IterationStatement	| tCONTINUE ';'		/* ContinueStatement */		{ $$ = ws_stmt_continue(pctx, @1.first_line); }	| tBREAK ';'		/* BreakStatement */		{ $$ = ws_stmt_break(pctx, @1.first_line); }	| ReturnStatement	;Block:	'{' StatementListOpt '}'		{		    $$ = $2;		    if ($$) {		        $$->first_line = @1.first_line;		        $$->last_line = @3.first_line;		    }		}	| error		{		    ws_error_syntax(pctx, @1.first_line);		    $$ = NULL;		}	;StatementListOpt:	  /* empty */		{ $$ = ws_list_new(pctx); }	| StatementList	;StatementList:	  Statement		{		    $$ = ws_list_new(pctx);		    ws_list_append(pctx, $$, $1);		}	| StatementList Statement		{ ws_list_append(pctx, $1, $2); }	;VariableStatement:	  tVAR VariableDeclarationList ';'		{ $$ = ws_stmt_variable(pctx, @1.first_line, $2); }	| tVAR error		{ ws_error_syntax(pctx, @2.first_line); }	;VariableDeclarationList:	  VariableDeclaration		{		    $$ = ws_list_new(pctx);		    ws_list_append(pctx, $$, $1);		}	| VariableDeclarationList ',' VariableDeclaration		{ ws_list_append(pctx, $1, $3); }	;VariableDeclaration:	  tIDENTIFIER VariableInitializedOpt		{		    char *id = ws_f_strdup(((WsCompiler *) pctx)->pool_stree,					   $1);		    ws_lexer_free_block(pctx, $1);		    if (id == NULL) {		        ws_error_memory(pctx);		        $$ = NULL;		    } else		        $$ = ws_variable_declaration(pctx, id, $2);		}	;VariableInitializedOpt:	  /* empty */		{ $$ = NULL; }	| '=' ConditionalExpression		{ $$ = $2; }	;IfStatement:	  tIF '(' Expression ')' Statement tELSE Statement		{ $$ = ws_stmt_if(pctx, @1.first_line, $3, $5, $7); }	| tIF '(' Expression ')' Statement		{ $$ = ws_stmt_if(pctx, @1.first_line, $3, $5, NULL); }	;IterationStatement:	  tWHILE '(' Expression ')' Statement		{ $$ = ws_stmt_while(pctx, @1.first_line, $3, $5); }	| ForStatement	;ForStatement:	  tFOR '(' ExpressionOpt ';' ExpressionOpt ';' ExpressionOpt ')'			Statement	  	{ $$ = ws_stmt_for(pctx, @1.first_line, NULL, $3, $5, $7, $9); }	| tFOR '(' tVAR VariableDeclarationList ';' ExpressionOpt ';'	       		ExpressionOpt ')' Statement	  	{ $$ = ws_stmt_for(pctx, @1.first_line, $4, NULL, $6, $8, $10); }	;ReturnStatement:	  tRETURN ExpressionOpt ';'		{ $$ = ws_stmt_return(pctx, @1.first_line, $2); }	;/* Expressions. */ExpressionOpt:	  /* empty */	{ $$ = NULL; }	| Expression	;Expression:	  AssignmentExpression	| Expression ',' AssignmentExpression		{ $$ = ws_expr_comma(pctx, @2.first_line, $1, $3); }	;AssignmentExpression:	  ConditionalExpression	| tIDENTIFIER	'='		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, '=', $3); }	| tIDENTIFIER	tMULA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tMULA, $3); }	| tIDENTIFIER	tDIVA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tDIVA, $3); }	| tIDENTIFIER	tREMA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tREMA, $3); }	| tIDENTIFIER	tADDA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tADDA, $3); }	| tIDENTIFIER	tSUBA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tSUBA, $3); }	| tIDENTIFIER	tLSHIFTA	AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tLSHIFTA, $3); }	| tIDENTIFIER	tRSSHIFTA	AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tRSSHIFTA, $3); }	| tIDENTIFIER	tRSZSHIFTA	AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tRSZSHIFTA, $3); }	| tIDENTIFIER	tANDA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tANDA, $3); }	| tIDENTIFIER	tXORA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tXORA, $3); }	| tIDENTIFIER	tORA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tORA, $3); }	| tIDENTIFIER	tIDIVA		AssignmentExpression		{ $$ = ws_expr_assign(pctx, @1.first_line, $1, tIDIVA, $3); }	;ConditionalExpression:	  LogicalORExpression	| LogicalORExpression '?' AssignmentExpression ':' AssignmentExpression		{ $$ = ws_expr_conditional(pctx, @2.first_line, $1, $3, $5); }	;LogicalORExpression:	  LogicalANDExpression	| LogicalORExpression tOR LogicalANDExpression		{ $$ = ws_expr_logical(pctx, @2.first_line, WS_ASM_SCOR, $1, $3); }	;LogicalANDExpression:	  BitwiseORExpression	| LogicalANDExpression tAND BitwiseORExpression		{ $$ = ws_expr_logical(pctx, @2.first_line, WS_ASM_SCAND, $1, $3); }	;BitwiseORExpression:	  BitwiseXORExpression	| BitwiseORExpression '|' BitwiseXORExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_OR, $1, $3); }	;BitwiseXORExpression:	  BitwiseANDExpression	| BitwiseXORExpression '^' BitwiseANDExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_XOR, $1, $3); }	;BitwiseANDExpression:	  EqualityExpression	| BitwiseANDExpression '&' EqualityExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_AND, $1, $3); }	;EqualityExpression:	  RelationalExpression	| EqualityExpression tEQ RelationalExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_EQ, $1, $3); }	| EqualityExpression tNE RelationalExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_NE, $1, $3); }	;RelationalExpression:	  ShiftExpression	| RelationalExpression '<' ShiftExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_LT, $1, $3); }	| RelationalExpression '>' ShiftExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_GT, $1, $3); }	| RelationalExpression tLE ShiftExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_LE, $1, $3); }	| RelationalExpression tGE ShiftExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_GE, $1, $3); }	;ShiftExpression:	  AdditiveExpression	| ShiftExpression tLSHIFT AdditiveExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_LSHIFT, $1, $3); }	| ShiftExpression tRSSHIFT AdditiveExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_RSSHIFT, $1, $3); }	| ShiftExpression tRSZSHIFT AdditiveExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_B_RSZSHIFT, $1, $3); }	;AdditiveExpression:	  MultiplicativeExpression	| AdditiveExpression '+' MultiplicativeExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_ADD, $1, $3); }	| AdditiveExpression '-' MultiplicativeExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_SUB, $1, $3); }	;MultiplicativeExpression:	  UnaryExpression	| MultiplicativeExpression '*' UnaryExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_MUL, $1, $3); }	| MultiplicativeExpression '/' UnaryExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_DIV, $1, $3); }	| MultiplicativeExpression tIDIV UnaryExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_IDIV, $1, $3); }	| MultiplicativeExpression '%' UnaryExpression		{ $$ = ws_expr_binary(pctx, @2.first_line, WS_ASM_REM, $1, $3); }	;UnaryExpression:	  PostfixExpression	| tTYPEOF UnaryExpression		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_TYPEOF, $2); }	| tISVALID UnaryExpression		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_ISVALID, $2); }	| tPLUSPLUS tIDENTIFIER		{ $$ = ws_expr_unary_var(pctx, @1.first_line, WS_TRUE, $2); }	| tMINUSMINUS tIDENTIFIER		{ $$ = ws_expr_unary_var(pctx, @1.first_line, WS_FALSE, $2); }	| '+' UnaryExpression		{                    /* There is no direct way to compile unary `+'.                     * It doesn't do anything except require type conversion		     * (section 7.2, 7.3.2), and we do that by converting		     * it to a binary expression: `UnaryExpression - 0'.                     * Using `--UnaryExpression' would not be correct because                     * it might overflow if UnaryExpression is the smallest                     * possible integer value (see 6.2.7.1).                     * Using `UnaryExpression + 0' would not be correct                     * because binary `+' accepts strings, which makes the		     * type conversion different.                     */                    $$ = ws_expr_binary(pctx, @1.first_line, WS_ASM_SUB, $2,                              ws_expr_const_integer(pctx, @1.first_line, 0));		}	| '-' UnaryExpression		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_UMINUS, $2); }	| '~' UnaryExpression		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_B_NOT, $2); }	| '!' UnaryExpression		{ $$ = ws_expr_unary(pctx, @1.first_line, WS_ASM_NOT, $2); }	;PostfixExpression:	  CallExpression	| tIDENTIFIER tPLUSPLUS		{ $$ = ws_expr_postfix_var(pctx, @1.first_line, WS_TRUE, $1); }	| tIDENTIFIER tMINUSMINUS		{ $$ = ws_expr_postfix_var(pctx, @1.first_line, WS_FALSE, $1); }	;CallExpression:	  PrimaryExpression	| tIDENTIFIER Arguments                 /* LocalScriptFunctionCall */		{		    WsFunctionHash *f = ws_function_hash(pctx, $1);		    /* Add an usage count for the local script function. */		    if (f)		      f->usage_count++;		    $$ = ws_expr_call(pctx, @1.first_line, ' ', NULL, $1, $2);		}	| tIDENTIFIER '#' tIDENTIFIER Arguments /* ExternalScriptFunctionCall*/		{ $$ = ws_expr_call(pctx, @3.first_line, '#', $1, $3, $4); }	| tIDENTIFIER '.' tIDENTIFIER Arguments /* LibraryFunctionCall */		{ $$ = ws_expr_call(pctx, @3.first_line, '.', $1, $3, $4); }	;PrimaryExpression:	  tIDENTIFIER		{ $$ = ws_expr_symbol(pctx, @1.first_line, $1); }	| tINVALID		{ $$ = ws_expr_const_invalid(pctx, @1.first_line); }	| tTRUE		{ $$ = ws_expr_const_true(pctx, @1.first_line); }	| tFALSE		{ $$ = ws_expr_const_false(pctx, @1.first_line); }	| tINTEGER		{ $$ = ws_expr_const_integer(pctx, @1.first_line, $1); }	| tFLOAT		{ $$ = ws_expr_const_float(pctx, @1.first_line, $1); }	| tSTRING		{ $$ = ws_expr_const_string(pctx, @1.first_line, $1); }	| '(' Expression ')'		{ $$ = $2; }	;Arguments:	  '(' ')'		{ $$ = ws_list_new(pctx); }	| '(' ArgumentList ')'		{ $$ = $2; }	;ArgumentList:	  AssignmentExpression		{		    $$ = ws_list_new(pctx);		    ws_list_append(pctx, $$, $1);		}	| ArgumentList ',' AssignmentExpression		{ ws_list_append(pctx, $1, $3); }	;%%voidyyerror(char *msg){#if WS_DEBUG  fprintf(stderr, "*** %s:%d: wsc: %s - this msg will be removed ***\n",	  global_compiler->input_name, global_compiler->linenum, msg);#endif /* WS_DEBUG */}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -