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

📄 first-asc.y

📁 sswf-1.7.4-src.zip 源码
💻 Y
📖 第 1 页 / 共 2 页
字号:
%{	/* asc.y -- written by Alexis WILKE for Made to Order Software, Ltd. (c) 2005-2006 */	/* grammar parser for SSWF Action Scripts *//*Copyright (c) 2005-2006 Made to Order Software, Ltd.Permission is hereby granted, free of charge, to anyperson obtaining a copy of this software andassociated documentation files (the "Software"), todeal in the Software without restriction, includingwithout limitation the rights to use, copy, modify,merge, publish, distribute, sublicense, and/or sellcopies of the Software, and to permit persons to whomthe Software is furnished to do so, subject to thefollowing conditions:The above copyright notice and this permission noticeshall be included in all copies or substantialportions of the Software.THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OFANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOTLIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESSFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NOEVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BELIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,ARISING FROM, OUT OF OR IN CONNECTION WITH THESOFTWARE OR THE USE OR OTHER DEALINGS IN THESOFTWARE.*/#include	"sswf.h"#define	YYPARSE_PARAM		resultstatic	void			yyerror(const char *msg);%}%union{	struct node_t		*node;	int			unused;};/* terminals */%token	<node>		ABSTRACT%token	<node>		AS%token	<node>		ASSIGNMENT_OPERATOR		// = := **= *= %/= %= += -= <<= >>= >>>= !<= !>= &= ^= |= &&= ^^= ||= <?= >?=%token	<node>		BREAK%token	<node>		CASE%token	<node>		CATCH%token	<node>		CLASS%token	<node>		CONTINUE%token	<node>		DECREMENT			// --%token	<node>		DEFAULT%token	<node>		DELETE%token	<node>		DO%token	<node>		DYNAMIC%token	<node>		ELIPSIS				// ...%token	<node>		ELSE%token	<node>		EQUAL				// ==%token	<node>		EXACTLY_EQUAL			// ===%token	<node>		EXACTLY_NOT_EQUAL		// !==%token	<node>		EXTENDS%token	<node>		FALSE%token	<node>		FINAL%token	<node>		FINALLY%token	<node>		FOR%token	<node>		FUNCTION%token	<node>		GET%token	<node>		GOTO%token	<node>		GREATER_EQUAL			// >=%token	<node>		IDENTIFIER%token	<node>		IF%token	<node>		IMPLEMENTS%token	<node>		IMPORT%token	<node>		IN%token	<node>		INCREMENT			// ++%token	<node>		INSTANCEOF%token	<node>		INTERFACE%token	<node>		INTRINSIC%token	<node>		INTRINSIC_TYPE%token	<node>		IS%token	<node>		LESS_EQUAL			// <=%token	<node>		LOGICAL_AND			// &&%token	<node>		LOGICAL_OR			// ||%token	<node>		LOGICAL_XOR			// ^^%token	<node>		MAX				// >?%token	<node>		MIN				// <?%token	<node>		NAMESPACE%token	<node>		NEW%token	<node>		NOT_EQUAL			// !=%token	<node>		NULL_LITERAL			// null%token	<node>		NUMERIC				// %[0-9]\.[0-9][eE][+-][0-9]%token	<node>		OVERRIDE%token	<node>		PACKAGE%token	<node>		POWER				// **%token	<node>		PRIVATE%token	<node>		PROTECTED%token	<node>		PUBLIC%token	<node>		RETURN%token	<node>		ROTATE_LEFT			// !<%token	<node>		ROTATE_RIGHT			// !>%token	<node>		SCOPE				// ::%token	<node>		SET%token	<node>		SHIFT_LEFT			// <<%token	<node>		SHIFT_RIGHT			// >>%token	<node>		SHIFT_RIGHT_UNSIGNED		// >>>%token	<node>		STATIC%token	<node>		STRING				// ".*" or '.*'%token	<node>		SUPER%token	<node>		SWITCH%token	<node>		THIS%token	<node>		THROW%token	<node>		TRY%token	<node>		TRUE%token	<node>		TYPEOF%token	<node>		UNDEFINED%token	<node>		USE%token	<node>		VAR%token	<node>		VIRTUAL%token	<node>		VOID%token	<node>		VOLATILE%token	<node>		WITH%token	<node>		WHILE/* all these yacc expressions are nodes */%type	<node>		variable_statement%%/**** START ****/start:	  program	  {	  }	| package	  {	  }	;package:	  PACKAGE package_name '{' program '}'	  {	  }	;package_name:	  STRING	  {	  }	| package_identifiers	  {	  }	;package_identifiers:	  IDENTIFIER	  {	  }	| package_identifiers '.' IDENTIFIER	  {	  }	;import_name_any:	  package_name	  {	  }	| package_identifiers '.' '*'	  {	  }	;import_name:	  import_name_any	  {	  }	| IDENTIFIER '=' import_name_any	  {	  }	;import_name_list:	  import_name	  {	  }	| import_name_list ',' import_name	  {	  }	;program:	  source_element_list	  {	  }	| import_list source_element_list	  {	  }	;import_list:	  import	  {	  }	| import_list import	  {	  }	;import:	  IMPORT import_name_list	  {	  }	| USE NAMESPACE import_name_list	  {	  }	;source_element_list:	  source_element	  {	  }	| source_element_list source_element	  {	  }	;source_element:	  statement	  {	  }	| function_declaration	  {	  }	| object_declaration	  {	  }	| pragma	  {	  }	;pragma:	  USE pragma_item_list	  {	  }	;pragma_item_list:	  pragma_item	  {	  }	| pragma_item_list ',' pragma_item	  {	  }	;pragma_item:	  pragma_expr	  {	  }	| pragma_expr '?'	  {	  }	;pragma_expr:	  IDENTIFIER	  {	  }	| IDENTIFIER '(' pragma_argument ')'	  {	  }	;pragma_argument:	  TRUE	  {	  }	| FALSE	  {	  }	| NUMERIC	  {	  }	| '-' NUMERIC	  {	  }	| STRING	  {	  }	;// a valid declaration includes a name; a valid expression doesn'tfunction_declaration:	  FUNCTION get_set_opt name_opt '(' variable_arguments ')' typed_opt '{' function_body '}'	  {	  }	| FUNCTION get_set_opt name_opt '(' ')' typed_opt '{' function_body '}'	  {	  }	;abstract_function_declaration:	  FUNCTION get_set_opt name_opt '(' variable_arguments ')' typed_opt	  {	  }	| FUNCTION get_set_opt name_opt '(' ')' typed_opt	  {	  }	;name_opt:	  /* EMPTY */	  {	  }	| IDENTIFIER	  {	  }	;// NOTE: the GET and SET must be viewed as IDENTIFIERs and not reserved// keywordsget_set_opt:	  /* EMPTY */	  {	  }	| GET	  {	  }	| SET	  {	  }	;typed_opt:	  /* EMPTY */	  {	  }	| ':' IDENTIFIER	  {	  }	| ':' INTRINSIC_TYPE /* such as int, char, long... */	  {	  }	;function_body:	  source_element_list	  {	  }	;object_declaration:	  qualifier_opt CLASS IDENTIFIER extends_opt implements_opt class_definition	  {	  }	| INTERFACE IDENTIFIER extends_opt class_definition	  {	  }	;qualifier_opt:	  /* EMPTY */	  {	  }	| DYNAMIC	  {	  }	| INTRINSIC	  {	  }	;extends_opt:	  /* EMPTY */	  {	  }	| EXTENDS IDENTIFIER	  {	  }	;implements_opt:	  /* EMPTY */	  {	  }	| IMPLEMENTS identifier_list	  {	  }	;identifier_list:	  IDENTIFIER	  {	  }	| identifier_list ',' IDENTIFIER	  {	  }	;class_definition:	  '{' '}'	  {	  }	| '{' qualified_class_element_list '}'	  {	  }	;qualified_class_element_list:	  qualified_class_element	  {	  }	| qualified_class_element_list qualified_class_element	  {	  }	;qualified_class_element:	  PRIVATE class_element	  {	  }	| PUBLIC class_element	  {	  }	| PROTECTED class_element	  {	  }	| FINAL class_element	  {	  }	| STATIC class_element	  {	  }	| VIRTUAL class_element	  {	  }	| VOLATILE class_element	  {	  }	| OVERRIDE class_element	  {	  }	| OVERRIDE '(' boolean_literal ')' class_element	  {	  }	| OVERRIDE '(' UNDEFINED ')' class_element	  {	  }	| class_element	  {	  }	;class_element:	  /* NOTE: function declarations not allowed in interfaces */	  function_declaration	  {	  }	| abstract_function_declaration	  {	  }	| ABSTRACT abstract_function_declaration	  {	  }	| object_declaration	  {	  }	| variable_statement	  {	  }	;statement:	  block	  {	  }	| variable_statement	  {	  }	| empty_statement	  {	  }	| expression_statement	  {	  }	| if_statement	  {	  }	| iteration_statement	  {	  }	| continue_statement	  {	  }	| break_statement	  {	  }	| return_statement	  {	  }	| with_statement	  {	  }	| labelled_statement	  {	  }	| goto_statement	  {	  }	| switch_statement	  {	  }	| case_clause_statement	  {	  }	| throw_statement	  {	  }	| try_statement	  {	  }	| catch_statement	  {	  }	| finally_statement	  {	  }	| super_statement	  {	  }	;block:	  '{' '}'	  {	  }	| '{' statement_list '}'	  {	  }	;statement_list:	  statement	  {	  }	| statement_list statement	  {	  }	;variable_statement:	  // TODO: see whether the ';' is mandatory for 'var'	  VAR variable_declaration_list ';'	;variable_arguments:	  var_statement_or_declaration_list	  {	  }	| var_statement_or_declaration_list ',' ELIPSIS	  {	  }	;var_statement_or_declaration_list:	  var_statement_or_declaration	  {	  }	| var_statement_or_declaration_list var_statement_or_declaration	  {	  }	;var_statement_or_declaration:	  VAR variable_declaration	  {	  }	| variable_declaration	  {	  }	;variable_declaration_list:	  variable_declaration	  {	  }	| variable_declaration_list ',' variable_declaration	  {	  }	;variable_declaration_list_no_in:	  variable_declaration_no_in	  {	  }	| variable_declaration_list_no_in ',' variable_declaration_no_in	  {	  }	;variable_declaration:	  IDENTIFIER typed_opt	  {	  }	| IDENTIFIER typed_opt initializer	  {	  }	;variable_declaration_no_in:	  IDENTIFIER typed_opt	  {	  }	| IDENTIFIER typed_opt initializer_no_in	  {	  }	;initializer:	  '=' assignment_expression	  {	  }	;initializer_no_in:	  '=' assignment_expression_no_in	  {	  }	;empty_statement:	  ';'	;expression_statement:	  // BUT NOT '{' or FUNCTION	  expression ';'	  {	  }	;if_statement:	  IF list_parenthesis_expression statement ELSE statement	  {	  }	| IF list_parenthesis_expression statement	  {	  }	;iteration_statement:	  DO statement WHILE list_parenthesis_expression ';'	  {	  }	| WHILE list_parenthesis_expression statement	  {	  }	| FOR '(' expression_no_in_opt ';' expression_no_in_opt ';' expression_no_in_opt ')' statement	  {	  }	| FOR '(' VAR variable_declaration_list_no_in ';' expression_no_in_opt ';' expression_no_in_opt ')' statement	  {	  }	| FOR '(' postfix_expression IN expression ')' statement	  {	  }	| FOR '(' VAR variable_declaration_list_no_in IN expression ')' statement	  {	  }	;continue_statement:	  CONTINUE	  {	  }	| CONTINUE /*no line terminator*/ IDENTIFIER	  {	  }	;break_statement:	  BREAK	  {	  }	| BREAK /*no line terminator*/ IDENTIFIER	  {	  }	;return_statement:	  RETURN	  {	  }	| RETURN /*no line terminator*/ expression	  {	  }	;with_statement:	  WITH list_parenthesis_expression statement	  {	  }	;switch_statement:	  SWITCH list_parenthesis_expression block	  {	  }	;case_clause_statement:	  CASE expression ':'	  {	  }	| DEFAULT ':'	  {	  }	;labelled_statement:	  IDENTIFIER ':'	  {	  }	;goto_statement:	  GOTO IDENTIFIER	  {	  }	;throw_statement:	  THROW /*no line terminator*/ expression	  {	  }	;try_statement:	  TRY block	  {	  }	;catch_statement:	  CATCH '(' IDENTIFIER typed_opt ')' block	  {	  }	;finally_statement:	  FINALLY block	  {	  }	;super_statement:	  SUPER arguments	  {	  }	;/* IDENTIFIER includes some special identifiers as follow:	[_]parent	[_]root	[_]quality	[_]global	[_]level	NaN	Infinity	pi	e

⌨️ 快捷键说明

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