亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? plsqlgrammar.g

?? 一個實現PLSQL語法分析的語法分析軟件。
?? G
?? 第 1 頁 / 共 4 頁
字號:
/*%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

PROJECT:        PL/SQL Grammer
FILE:           PLSQLGrammar.g

AUTHOR: Qazi Firdous Ahmed (qazif_ahmed@infosys.com) 
		Krupa Benhur (krupa_bg@infosys.com)
		Manojaba Banerjee (manojaba_banerjee@infosys.com)
		Infosys Technologies Ltd., Bangalore, India

DATED:		Sept 18, 2002

DESCRIPTION:    This grammar is for PL/SQL.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%*/


header
{
package MyParser;
}

class PLSqlParser extends Parser;

options {
    exportVocab = PLSql;
    k = 4;
    buildAST = true;
}


tokens {
    START_RULE;
    CREATE_PACKAGE;
    PACKAGE_SPEC;
    PACKAGE_BODY;
    SELECT_EXPRESSION<AST=SELECT_EXPRESSIONNode>;
    PLSQL_BLOCK;
    CURSOR_DECLARATION;
    PARAMETER_SPEC;
    SQL_STATEMENT;
    SELECT_COMMAND;
    SELECT_LIST;
    TABLE_REFERENCE_LIST;
    WHERE_CONDITION;
    SUBQUERY;
    SQL_IDENTIFIER;
    SQL_LITERAL;
    FUNCTION;
    GROUP_FUNCTION;
    USER_FUNCTION;
    MULTIPLY;
    ARGUMENT;
}

start_rule: (create_package)* EOF
	    { #start_rule = #([START_RULE, "start_rule"], #start_rule); }
	  ;

create_package: 
	"create" ( "or" "replace" )?
	(package_spec | package_body)?
	{ #create_package = #([CREATE_PACKAGE, "create_package"], #create_package); }
	;
	
package_spec:
	"package" package_name ("is" | "as") 
	package_obj_spec ( package_obj_spec )*
	"end" (package_name)? SEMI!
	{ #package_spec = #([PACKAGE_SPEC, "package_spec"], #package_spec); }
	;
	
package_body: 
	"package" ("body")? package_name ("is" | "as")
	package_obj_body ( package_obj_body )*
	("begin")? (seq_of_statements)?  
	"end" (package_name )? SEMI!
	{ #package_body = #([PACKAGE_BODY, "package_body"], #package_body); }
	;
		
	
package_name:
	(schema_name DOT)? identifier 
	;
		

package_obj_spec:
	variable_declaration 
	| subtype_declaration 
	| cursor_declaration 
	| cursor_spec 
	| exception_declaration 
	| record_declaration 
	| plsql_table_declaration 
	| procedure_spec 
	| function_spec 
	;
	
variable_declaration: 
	variable_name ("constant")?
	type_spec ("not" "null")? 
	((ASSIGNMENT_EQ|"default") plsql_expression)? SEMI!
      	;	
      	
subtype_declaration 
      	:
      	"subtype" type_name "is" type_spec SEMI!
      	;      	
      	
cursor_declaration:
	"cursor" cursor_name
      	(OPEN_PAREN! parameter_spec! (COMMA! parameter_spec!)* CLOSE_PAREN! )?
      	"is"! select_command SEMI! 
      	{ #cursor_declaration = #([CURSOR_DECLARATION, "cursor_declaration"], #cursor_declaration); }
      	;

package_obj_body: 
	variable_declaration 
	| subtype_declaration 
	| cursor_declaration 
	| exception_declaration 
	| record_declaration 
	| plsql_table_declaration 
	| procedure_body 
	| function_body 
	;

seq_of_statements: 
	statement SEMI!
	(statement SEMI!)*
	;  
	
statement:
	 assignment_statement
	| exit_statement
	| goto_statement
	| if_statement 
	| loop_statement 
	| null_statement
	| raise_statement
	| return_statement
	| sql_statement
//	| plsql_block
	| begin_block
	| function_call
	;
		
plsql_block:
	( START_LABEL label_name END_LABEL )?
	(("declare")? (declare_spec)+)? 
	("begin")?
     	seq_of_statements
     	("exception" exception_handler (exception_handler)*)? 
     	("end" (label_name)? SEMI!)?
     	{ #plsql_block = #([PLSQL_BLOCK, "plsql_block"], #plsql_block); }
     	;
      	
declare_spec:
	variable_declaration 
	| subtype_declaration 
	| cursor_declaration 
	| exception_declaration 
	| exception_pragma 
	| record_declaration 
	| plsql_table_declaration 
	| procedure_declaration 
	| function_declaration
	;

assignment_statement: 
	(object ASSIGNMENT_EQ function_call) => (object ASSIGNMENT_EQ function_call)
	|(object ASSIGNMENT_EQ plsql_expression)  => (object ASSIGNMENT_EQ plsql_expression)
	|function_call
	;

object: 
	variable_name
	| ( record_name DOT field_name ) 
	| ( plsql_table_name OPEN_PAREN! subscript CLOSE_PAREN! ) 
	| ( COLON host_variable ) 
	;

field_name:
	identifier
	;
	
subscript:
	plsql_expression 
	;
	
host_variable:
	identifier
	;
	
goto_statement:
	"goto" label_name
	;
	
label_name:
	identifier
	;	

exit_statement:
	"exit" (label_name)? ("when" plsql_condition)?
	;
	
datatype:
	"binary_integer" 
      	| "natural" 
      	| "positive" 
      	| ("number"(OPEN_PAREN! NUMBER (COMMA NUMBER)? CLOSE_PAREN! )? ) 
      	| ( "char" (OPEN_PAREN! NUMBER CLOSE_PAREN! )? ) 
      	| ("long" ("raw")?)
      	| "raw"
      	| "boolean"  
      	| "date"
      	| "smallint"
      	| "real"
      	| "numeric"
      	| "int"
      	| "integer"
      	| "double precesion"
      	| "decimal"
      	| "dec"
      	| ( "varchar2" ( OPEN_PAREN! NUMBER CLOSE_PAREN! )? )
      	| ( "varchar" ( OPEN_PAREN! NUMBER CLOSE_PAREN! )? )
      	| ( "character" ( OPEN_PAREN! NUMBER CLOSE_PAREN! )? )
      	| "mlslabel"
      	;      
      	
//Added package_name.variable_name
type_spec 
      	:
      	datatype 
      	| ( variable_name PERCENTAGE "type" ) 
      	| ( table_name DOT column_name PERCENTAGE "type" ) 
//     	| ( package_name DOT variable_name) 
      	| ( table_name PERCENTAGE"rowtype" ) 
      	| type_name
      	;

//Changed the type name to handle variable declaration      	      	
type_name:
	identifier (DOT identifier)*
	;
     	
parameter_spec :
      	parameter_name (type_spec)?
      	{ #parameter_spec = #([PARAMETER_SPEC, "parameter_spec"], #parameter_spec); }
      	;	
      	
parameter_name :
      	identifier
      	;
      	
cursor_spec: 
	"cursor" cursor_name 
	(OPEN_PAREN! parameter_spec (COMMA parameter_spec)* CLOSE_PAREN!)?
	"return" return_type SEMI! 
	;

procedure_spec: 
	"procedure" procedure_name 
	( OPEN_PAREN! argument ( COMMA argument )* CLOSE_PAREN! )? SEMI! 
	;
	
function_spec: 
	"function" function_name 
	OPEN_PAREN! argument ( COMMA argument)* CLOSE_PAREN! 
	"return" return_type SEMI! 
	;
   	   
exception_declaration :
      	exception_name "exception" SEMI!
      	;      	   

exception_name:
	(exception_package_name DOT)? identifier 
	;

exception_package_name:
	identifier
	;

exception_pragma :
	"pragma""exception_init" OPEN_PAREN! exception_name COMMA oracle_err_number CLOSE_PAREN! SEMI!
	;
	
oracle_err_number:
	NUMBER
	;
	
record_declaration :
      	record_type_dec 
      	| record_var_dec
      	;
      	
record_type_dec :
      	"type" type_name "is" "record" 
      	OPEN_PAREN! field_spec ( COMMA field_spec )* CLOSE_PAREN! SEMI!
      	;
      	
record_var_dec :
      	record_name type_name PERCENTAGE "rowtype" SEMI!
      	;	
	
field_spec:
        column_spec
    	;
    	
plsql_table_declaration :
      	table_type_dec | table_var_dec
      	;
      	
table_type_dec :
      	"type" type_name "is" "table" 
      	"of" field_spec 
      	"indexed" "by" "binary_integer" SEMI!
      	;
      	
table_var_dec :
      	plsql_table_name type_name SEMI!
      	;
      	
plsql_table_name :
      	identifier
      	;    	
      	
procedure_declaration :
      	procedure_body
      	;
      	
procedure_body :
      	(proc_fun_start)? "procedure" procedure_name 
      	( OPEN_PAREN! argument ( COMMA argument )* CLOSE_PAREN! )? 
      	( "return" return_type)?
	( "is" | "as" )
      	( ("declare")? ( declare_spec )* )?
      	("begin" )?
      	(seq_of_statements )?
     	( "exception" ( exception_handler )* )?
      	"end" ( procedure_name )? SEMI!
      	;
      	
begin_block:
	"begin"
	(seq_of_statements )?
	( "exception" ( exception_handler )+ )?
      	"end" 
      	;
      	
//Exception handler needs to be defined      	
exception_handler :
	"when" exception_name ("or" exception_name)* "then"
	seq_of_statements
	;       	

proc_fun_start :
	"create" ( "or replace" )?
	;
	
function_body :
      	(proc_fun_start)? "function" function_name 
      	( OPEN_PAREN! argument (COMMA argument)* CLOSE_PAREN!)? 
	"return" return_type ( "is" | "as" )
      	( "declare" ( declare_spec )* )?
       	("begin" )?
      	(seq_of_statements)?
     	( "exception" ( exception_handler )+ )?
      	"end" ( function_name )? SEMI!
	;
	
function_name :
      	( schema_name DOT )? identifier
      	;
     	
procedure_name :
      	( schema_name DOT )? identifier
      	;
      	
argument :
      	argument_name ( "in" | "out" | ( "inout" ) )? (argument_type )?
      	( ASSIGNMENT_EQ "default" value )?
	;
	
argument_name :
      	identifier
      	;
      	
argument_type :
      	type_spec
      	;
      	
value :
      	( ( PLUS | MINUS )? NUMBER ) | quoted_string
      	;
      	
return_type :
      	type_spec
      	;
      	
function_declaration :
      	function_body
      	;

function_call :
	 user_defined_function ( OPEN_PAREN! expression ( COMMA expression )* CLOSE_PAREN! ) 
	;
	
variable_name  : 
	identifier
	;

null_statement:
	"null" 
	;
	
raise_statement :
	"raise" ( exception_name )?
	;
		
return_statement :
	"return" ( plsql_expression )?
	;
	
loop_statement :
	(label_name)?
	(("while"^ plsql_condition) |("for"^ (cursor_loop_param | numeric_loop_param)))?
	"loop"^
	seq_of_statements
	"end""loop" (label_name)?
	;
	
plsql_condition :
	boolean_exp
	;

boolean_exp :
	("not")? boolean_term ("or" boolean_term)*
	;
	
boolean_term :
	boolean_factor ("and" boolean_factor)*
	;
		
boolean_factor : 
      boolean_literal 
      | variable_name 
      | ( function (OPEN_PAREN plsql_exp_list CLOSE_PAREN)? ) ( relational_op plsql_expression )?
      | ( OPEN_PAREN boolean_exp CLOSE_PAREN ) 
      | ( plsql_expression 
      ( ( relational_op plsql_expression ) 
      | ( "is" ("not")? "null" ) 
      | ( ("not")? "like" match_string ) 
      | ( ("not")? "between" plsql_expression 
      "and" plsql_expression ) 
      | ( ("not")? "in" OPEN_PAREN plsql_exp_list CLOSE_PAREN ) 
      | ( ( cursor_name | subquery )( PERCENTAGE "notfound" | PERCENTAGE "found" | PERCENTAGE "isopen" ) ) ) )
      | ( cursor_name (PERCENTAGE "notfound" | PERCENTAGE "found" | PERCENTAGE "isopen" ))?
      ;
      
boolean_literal :
	"true" | "false" | "null" 
	;
	
numeric_loop_param :
	index_name "in" ("reverse")? integer_expr DOUBLEDOT integer_expr
	;
index_name :
	identifier
	;

//Added typespec to handle packagename.variablename for loop statement
integer_expr :
	num_expression
	|type_spec
	;

cursor_name :
	identifier
	;
	
cursor_loop_param :
	record_name "in"
	(( cursor_name
	(OPEN_PAREN! plsql_exp_list CLOSE_PAREN!)?)
	|(OPEN_PAREN! select_statement CLOSE_PAREN!))
	;
	
record_name:
	identifier
	;
	
plsql_expression:
	num_expression
	|char_expression
	|date_expression
	|boolean_expression
	;

num_expression:
	(PLUS | MINUS)? num_term ((PLUS|MINUS) num_term)*
	;
	
num_term:
	num_factor ((ASTERISK | DIVIDE) num_factor)*
	;

num_factor:
	(numeric_literal
	|variable_name
	|host_variable
	|(function (OPEN_PAREN plsql_exp_list CLOSE_PAREN)?)
	|(OPEN_PAREN! num_expression CLOSE_PAREN!)
	|"null"
	|((cursor_name | subquery) "%rowcount")
	|(cursor_name "%rowcount")
	) ("**" integer_expr)?
	;
	
numeric_literal:
	NUMBER
	;
	
boolean_expression:
	identifier

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线精品一区二区夜色 | 4438x亚洲最大成人网| 日韩亚洲欧美在线| 亚洲图片激情小说| 免费成人美女在线观看| 一本色道**综合亚洲精品蜜桃冫| 日韩欧美国产精品| 亚洲国产视频一区二区| 国产一区二区三区高清播放| 欧美日韩精品是欧美日韩精品| 国产亚洲欧美中文| 麻豆精品视频在线观看| 欧美日韩日日摸| 中文字幕亚洲一区二区va在线| 久久99国产乱子伦精品免费| 欧美日韩大陆一区二区| 亚洲情趣在线观看| 国产精品91xxx| 日韩视频在线一区二区| 亚洲国产精品久久久久婷婷884| 成人涩涩免费视频| 久久久久久久综合色一本| 日韩国产一区二| 欧美三级电影在线看| 亚洲精品成人悠悠色影视| 盗摄精品av一区二区三区| 日韩精品一区二区三区视频在线观看 | 国内精品国产三级国产a久久 | 色综合久久中文字幕综合网| 国产亚洲精品久| 国精产品一区一区三区mba桃花| 欧美一级高清大全免费观看| 亚洲成人动漫在线观看| 欧美无砖砖区免费| 亚洲激情六月丁香| 欧美性猛交xxxx黑人交| 亚洲国产欧美在线| 欧美日韩日日摸| 奇米影视一区二区三区小说| 欧美丰满少妇xxxbbb| 午夜精品福利在线| 制服视频三区第一页精品| 天使萌一区二区三区免费观看| 欧美丝袜自拍制服另类| 日韩国产在线一| 日韩欧美一区电影| 国产乱码一区二区三区| 欧美精彩视频一区二区三区| www.欧美精品一二区| 亚洲欧美日韩在线不卡| 欧美在线999| 奇米影视7777精品一区二区| 欧美成人三级在线| 国产成人免费在线观看不卡| 国产精品久线在线观看| 色妹子一区二区| 亚洲成av人片一区二区三区 | 欧美在线视频日韩| 婷婷综合五月天| 久久久噜噜噜久噜久久综合| 成人性视频网站| 亚洲韩国一区二区三区| 精品免费99久久| 99久久99久久综合| 午夜不卡av免费| 久久蜜臀精品av| 日本丶国产丶欧美色综合| 日韩av中文字幕一区二区三区| 欧美xingq一区二区| 99精品桃花视频在线观看| 日韩在线卡一卡二| 中文字幕第一区| 欧美欧美午夜aⅴ在线观看| 国产精品亚洲午夜一区二区三区| 最新热久久免费视频| 欧美精三区欧美精三区 | 男女激情视频一区| 欧美国产综合色视频| 欧美狂野另类xxxxoooo| 成人激情图片网| 蜜桃av一区二区在线观看| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 欧美午夜电影在线播放| 高清av一区二区| 日本中文一区二区三区| 一区二区三区不卡在线观看| 26uuu精品一区二区三区四区在线| 色综合天天性综合| 国产电影一区在线| 日本免费新一区视频| 日韩一区在线播放| 2021久久国产精品不只是精品| 欧美亚洲综合在线| 99视频一区二区| 国产二区国产一区在线观看| 免费成人结看片| 亚洲一区二区偷拍精品| 国产精品日产欧美久久久久| 久久综合狠狠综合| 日韩一区二区三区三四区视频在线观看| 99re热这里只有精品视频| 国产一区二区三区免费播放 | 亚洲自拍偷拍综合| 亚洲人成亚洲人成在线观看图片| 久久久久亚洲蜜桃| 2014亚洲片线观看视频免费| 日韩三级视频中文字幕| 欧美日韩夫妻久久| 欧美视频日韩视频在线观看| 色欲综合视频天天天| 91网上在线视频| a4yy欧美一区二区三区| 成人国产精品免费观看视频| 国产精品1区2区3区在线观看| 狠狠狠色丁香婷婷综合激情| 麻豆国产欧美日韩综合精品二区| 五月激情六月综合| 日韩二区三区四区| 日韩精品亚洲专区| 日本视频一区二区| 麻豆高清免费国产一区| 麻豆一区二区三| 狠狠色狠狠色综合| 国产一区二区三区免费观看| 国产传媒日韩欧美成人| 成人激情图片网| 色天使久久综合网天天| 欧美手机在线视频| 91.成人天堂一区| 日韩欧美精品在线| 久久久亚洲精华液精华液精华液| 国产色一区二区| 亚洲免费在线视频一区 二区| 亚洲精品国产a久久久久久| 亚洲国产精品久久久久婷婷884| 亚洲国产日产av| 蜜臀久久99精品久久久久宅男| 久久 天天综合| caoporm超碰国产精品| 91福利小视频| 日韩免费电影网站| 国产校园另类小说区| 亚洲老司机在线| 秋霞影院一区二区| 国产mv日韩mv欧美| 在线观看亚洲a| 精品国产91九色蝌蚪| 亚洲欧美日韩国产一区二区三区 | 国产在线国偷精品免费看| 成人美女视频在线观看18| 在线影视一区二区三区| 日韩一区二区精品葵司在线| 国产欧美精品一区二区色综合朱莉| 亚洲婷婷在线视频| 麻豆一区二区在线| 91女人视频在线观看| 欧美一级在线观看| 亚洲欧美另类图片小说| 蜜臀av性久久久久蜜臀aⅴ四虎 | 欧美亚洲另类激情小说| 精品国产亚洲在线| 亚洲蜜臀av乱码久久精品蜜桃| 免费av成人在线| 色噜噜狠狠成人网p站| 亚洲精品一区二区三区四区高清| 亚洲美女免费在线| 国产一区二区福利视频| 欧美日韩一区中文字幕| 国产精品蜜臀av| 国内外成人在线| 91精品国产综合久久久久久久 | 97精品电影院| 欧美一卡二卡三卡| 一区二区在线观看av| 国产毛片精品国产一区二区三区| 欧美性受xxxx黑人xyx性爽| 国产婷婷精品av在线| 日韩福利电影在线观看| 欧美色图免费看| 日韩码欧中文字| 成人sese在线| 久久天天做天天爱综合色| 免费精品视频在线| 欧美日本免费一区二区三区| 亚洲欧美日韩国产中文在线| 成人av资源在线| 国产日韩欧美在线一区| 精品一区二区三区不卡 | 在线视频一区二区三区| 1024亚洲合集| 99re这里只有精品6| 日本一区二区在线不卡| 国产精品一区二区三区99 | 欧美日韩一级二级| 一区二区三区成人| 欧美亚男人的天堂| 亚洲gay无套男同| 欧美日韩一区二区三区视频| 亚洲精品视频在线| 91福利国产精品|