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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? plsqlgrammar.g

?? 一個(gè)實(shí)現(xiàn)PLSQL語(yǔ)法分析的語(yǔ)法分析軟件。
?? G
?? 第 1 頁(yè) / 共 4 頁(yè)
字號(hào):
	|column_spec
	|boolean_literal
	;
	
plsql_exp_list:
	plsql_expression (COMMA plsql_expression)*
	;
	
char_expression:
	char_term ("||" char_term)*
	;
	
char_term:
	(char_literal
	|variable_name
	|host_variable
	|(function (OPEN_PAREN plsql_exp_list CLOSE_PAREN)?)
	|(OPEN_PAREN! char_expression CLOSE_PAREN!)
	|"null")
	;
	
char_literal:
	QUOTED_STRING
	;
	
date_expression : 
      ( date_literal 
      | variable_name 
      | host_variable 
      | ( function (OPEN_PAREN plsql_exp_list CLOSE_PAREN)? ) 
      | ( OPEN_PAREN! date_expression CLOSE_PAREN! ) 
      | "null" ) 
      ;
      
date_literal:
	QUOTED_STRING
	;
     
commit_statement: 
	"commit"      
	;
      
//Added the greedy funda on 21st of August
if_statement:
	"if"^ plsql_condition "then" seq_of_statements
	("elsif" plsql_condition "then" seq_of_statements)*
	("else" seq_of_statements )?
	"end""if" 
	;      
	
//Removed the (SEMI)? after the sql_command as sql_statement already comes under statement
sql_statement: 
	sql_command 
	{ #sql_statement = #([SQL_STATEMENT, "sql_statement"], #sql_statement); }
	;
    
sql_command:
	to_modify_data 
	| to_control_data
        ;    
    
to_modify_data:
        select_command 
        | insert_command 
        | update_command
//      | delete_command
        | set_transaction_command
	;    

to_control_data:
	close_statement
	| commit_statement
	| fetch_statement
	| lock_table_statement
	| open_statement
	| rollback_statement
	| savepoint_statement
	;
	
select_command:
        select_statement ( "union" select_statement )*
        { #select_command = #([SELECT_COMMAND, "select_command"], #select_command); }
	;

select_statement:
        ( OPEN_PAREN! select_command CLOSE_PAREN! ) => OPEN_PAREN! select_command CLOSE_PAREN!
        | select_expression 
        ;

select_expression:
	"select"^ ( "all"! | "distinct"! )? select_list
	("into" column_name)?
	//"from" table_reference_list
	table_reference_list_from
	//( "where" where_condition )?
	(where_condition_whole)?
	( connect_clause )?
	( group_clause )?
	( ( set_clause ) => set_clause )?
	( ( order_clause ) => order_clause )?
	( ( update_clause ) => update_clause )?
        { #select_expression = #([SELECT_EXPRESSION,"select_expression"], #select_expression); }
	;

select_list:
	( ( displayed_column ) => displayed_column ( COMMA displayed_column )*
        | ASTERISK )  
        { #select_list = #([SELECT_LIST, "select_list"], #select_list); }
	;
	
table_reference_list_from:
        "from" selected_table ( COMMA! selected_table )*
        { #table_reference_list_from = #([TABLE_REFERENCE_LIST, "table_reference_list_from"], #table_reference_list_from); }
    	;

table_reference_list:
        selected_table ( COMMA selected_table )*
	{ #table_reference_list = #([TABLE_REFERENCE_LIST, "table_reference_list"], #table_reference_list); }
    	;
    	
where_condition_whole:
       "where" condition
       ;

where_condition:
        condition
	{ #where_condition = #([WHERE_CONDITION, "where_condition"], #where_condition); }
  	  ;

displayed_column :
      ( (schema_name DOT)? (variable)? table_name DOT ASTERISK ) => ( ( schema_name DOT )? table_name DOT ASTERISK )
      | ( exp_simple ( alias )? )
	;

schema_name:
	identifier
	;

table_name: 
	identifier 
	;

exp_simple:
	expression 
	;

expression:
	term ( ( PLUS | MINUS ) term )*
	| boolean_literal
	;

alias:
	( "as" )? identifier
	;

term:
	factor ( ( multiply | DIVIDE ) factor )*
	;

multiply:
        ASTERISK
	{ #multiply = #([MULTIPLY, "multiply"], #multiply); }
	;

factor:
	factor2 ( VERTBAR VERTBAR factor2 )*
	;

factor2:
	( sql_literal ) => sql_literal
	| ( ( PLUS | MINUS ) expression ) => ( PLUS | MINUS ) expression
	| ( function ( OPEN_PAREN! expression ( COMMA expression )* CLOSE_PAREN ) ) => function ( OPEN_PAREN expression ( COMMA expression )* CLOSE_PAREN )
	//Commented by Qazi on 28th of August
	//{ #factor2 = #([FUNCTION, "function"], #factor2); }
	| ( group_function OPEN_PAREN ( ASTERISK | "all" | "distinct" )? (expression)? CLOSE_PAREN ) => group_function OPEN_PAREN ( ASTERISK | "all" | "distinct" )? (expression)? CLOSE_PAREN
	//{ #factor2 = #([GROUP_FUNCTION, "group_function"], #factor2); }
	| ( user_defined_function ( OPEN_PAREN expression ( COMMA expression )* CLOSE_PAREN ) ) => user_defined_function ( OPEN_PAREN expression ( COMMA expression )* CLOSE_PAREN )
	//{ #factor2 = #([USER_FUNCTION, "user_function"], #factor2); }
	| ( OPEN_PAREN! expression CLOSE_PAREN! ) => OPEN_PAREN! expression CLOSE_PAREN!
	| ( variable ) => variable
	| expression_list
	;

expression_list:
	OPEN_PAREN! expression ( COMMA expression )+ CLOSE_PAREN!
	;

sql_literal:
        ( NUMBER | QUOTED_STRING | "null" )
      	{ #sql_literal = #([SQL_LITERAL, "sql_literal"], #sql_literal); }
	;

variable:
	( column_spec ( OPEN_PAREN! PLUS CLOSE_PAREN! ) ) => column_spec ( OPEN_PAREN! PLUS CLOSE_PAREN! )
        | column_spec
	;

column_spec:
	( ( schema_name DOT )? table_name DOT )? column_name
	;

user_defined_function:
	( ( schema_name DOT )? package_name DOT )? identifier
	;

column_name: 
	identifier 
	;

function:
	number_function 
	| char_function 
	| group_function 
	| conversion_function 
	| other_function 
	;

number_function:
	"abs" | "ceil" | "floor" | "mod" | "power" | "round" 
	| "sign" | "sqrt" | "trunc" 
	;


char_function:
	"chr" | "initcap" | "lower" | "lpad" | "ltrim" | "replace" 
	| "rpad" | "rtrim" | "soundex" | "substr" | "translate" | "upper" 
	| "ascii" | "instr" | "length" 
	| "concat"
    	;

group_function:
	"avg" | "count" | "max" | "min" | "stddev" | "sum" 
	| "variance" 
	;

conversion_function:
	"chartorowid" | "convert" | "hextoraw" | "rawtohex" | "rowidtochar" 
	| "to_char" | "to_date" | "to_number" 
	;

other_function 
	:
	"decode" | "dump" | "greatest" | "least" | "nvl" 
	| "uid" | "userenv" | "vsize" 
	;

pseudo_column:
	"user" | "sysdate"
	;

selected_table:
	( table_spec | subquery ) ( alias )?
	;

table_spec:
	( schema_name DOT )? table_name ( AT_SIGN link_name )?
	;

table_alias:
	( schema_name DOT )? table_name ( AT_SIGN link_name )? ( alias )?
	;

link_name:
	identifier
	;

condition:
	logical_term ( "or" logical_term )* 
	;

logical_term:
	logical_factor ( "and" logical_factor )*
	;

logical_factor:
	( ( "prior" ) ? exp_simple relational_op ( "prior" )? exp_simple ) => ( ( "prior" ) ? exp_simple relational_op ( "prior" )? exp_simple ) 
	| ( exp_simple ( "not" )? "in" ) => exp_simple ("not")? "in" exp_set
	| ( exp_simple ( "not" )? "like" ) => exp_simple ( "not" )? "like" expression ( "escape" QUOTED_STRING )?
	| ( exp_simple ( "not" )? "between" ) => exp_simple ( "not" )? "between" exp_simple "and" exp_simple
	| ( exp_simple "is" ( "not" )? "null" ) => exp_simple "is" ( "not" )? "null"
	| ( quantified_factor ) => quantified_factor 
	| ( "not" condition ) => "not" condition
	| ( OPEN_PAREN! condition CLOSE_PAREN! ) 
	;


quantified_factor:
	( exp_simple relational_op ( "all" | "any" )? subquery ) => exp_simple relational_op ( "all" | "any" )? subquery
	| ( ( "not" )? "exists" subquery ) => ( "not" )? "exists" subquery
	| subquery
	;

relational_op: 
	EQ | LT | GT | NOT_EQ | LE | GE 
	;


exp_set:
	( exp_simple ) => exp_simple
	| subquery
	;

subquery:
	OPEN_PAREN! select_command CLOSE_PAREN! 
	{ #subquery = #([SUBQUERY, "subquery"], #subquery); }
	;

connect_clause:
	( "start" "with" condition )? // the start can be before the connect by
	"connect" "by" 
// 	This appears to allow multiple comparisons, so just use the updated
// 	condition rule.
        ( ( "prior" exp_simple relational_op exp_simple ) 
        | ( exp_simple relational_op exp_simple "prior" ) )
        ( ( ( "prior" )? condition ) => ("prior")? condition
//	Qazi made a change here replace ? with *
        | exp_simple relational_op ( "prior" )? exp_simple ( "and" condition )?
        )
        condition
	( "start" "with" condition )?
	;

group_clause:
	"group" "by" expression ( COMMA expression )* ( "having" condition )?
	;

// Would this really do what is necessary?  The following does not look
// right, but not that familiar with what is being refered to here.

set_clause:
	( ( "union" "all" ) | "intersect" | "minus" ) select_command 
	;

order_clause:
	"order" "by" sorted_def ( COMMA sorted_def )*
	;

sorted_def:
	(( expression ) => expression | ( NUMBER ) => NUMBER ) ( "asc" | "desc" )? 
	;

update_clause:
	"for" "update" ( "of" column_name ( COMMA column_name )* )? ( "nowait" )?
	;

//In the Insert statement insted of plsql_exp_list, modified it to variable_name,
//and character literals.

insert_command: 
	"insert" "into" table_reference_list 
	( OPEN_PAREN! column_spec CLOSE_PAREN! )?
	( ( "values" OPEN_PAREN! (variable_name) (COMMA variable_name)* CLOSE_PAREN! ) 
	| select_statement ) 
	;

update_command:
	( subquery_update ) => subquery_update 
        | simple_update
	;

simple_update:
	"update" table_alias
	"set" column_spec EQ ( ( expression ) => expression | subquery ) 
	( COMMA column_spec EQ ( ( expression ) => expression | subquery ) )*
	"where" condition 
	;

subquery_update:
	"update" table_alias
	"set" OPEN_PAREN! column_spec ( COMMA column_spec )* CLOSE_PAREN! EQ subquery 
	"where" condition 
	;
   
set_transaction_command: 
	"set" "transaction" "read" "only" 
	;
	      
close_statement : 
      "close" cursor_name 
      ;
      
      
fetch_statement: 
	"fetch" cursor_name "into" 
	( ( variable_name (COMMA variable_name )* ) 
	| record_name ) 
	;
      
lock_table_statement: 
	"lock" "table" table_reference_list 
	"in" lock_mode "mode" ( "nowait" )?
	;
      
lock_mode:
	"row" "share"
	|"row" "exclusive"
	|"share" "update"
	|"share"
	|"share""row""exclusive"
	|"exclusive"
	;

open_statement: 
	"open" cursor_name (OPEN_PAREN! plsql_exp_list! CLOSE_PAREN!)?
	;
      
rollback_statement: 
	"rollback" ( "work" )?
	( "to" ( "savepoint" )? savepoint_name )?
	( "comment" quoted_string )?
	;
      
savepoint_statement: 
	"savepoint" savepoint_name 
	;
      
      
savepoint_name:
	identifier 
	;

// Direct mappings to lexer.

identifier:
        ( IDENTIFIER | QUOTED_STRING | keyword )
   	;

quoted_string : QUOTED_STRING ;

match_string : QUOTED_STRING ;

//
// These are non reserve words that can be used as identifiers.  If it is
// a reserved word in Oracle but not ANSI, that is noted and commented out
// (can not be used). If it is a reserve word in ANSI and not in Oracle,
// that is noted but it is not commented out (can be used).
//

keyword
    :
        "abs"
        | "ascii"
        | "ceil"
        | "chartorowid"
        | "chr"
        | "concat"
        | "convert"
        | "count"
        | "decode"
        | "dump"
        | "floor"
        | "greatest"
        | "hextoraw"
        | "initcap"
        | "instr"
        | "intersect"
        | "least"
        | "length"
        | "lower"
        | "lpad"
        | "ltrim"
     // | "max" // oracle
     // | "min" // oracle
     // | "minus" // oracle
     // | "mod" // oracle
     // | "not" // oracle
     // | "nowait" // oracle
        | "nvl"
        | "power"
     // | "prior" // oracle
        | "rawtohex"
        | "replace"
        | "round"
        | "rowidtochar"
        | "rpad"
        | "rtrim"
        | "sign"
        | "soundex"
        | "sqrt"
     // | "stddev" // oracle
        | "substr"
     // | "sum" // oracle
        | "sysdate"
        | "to_char"
        | "to_date"
        | "to_number"
        | "translate"
        | "trunc"
     // | "uid" // oracle
        | "upper"
        | "user" // ansi
        | "userenv"
     // | "variance" // oracle
        | "vsize"
    ;

//Below code deals with TreeWalker part that extends TreeParser

class PLSqlTreeWalker extends TreeParser;

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

start_rule: 
	(create_package)* EOF
	;

create_package: 
	"create" ( "or" "replace" )?
	(package_spec | package_body)?
	;
	
package_spec:
	"package" package_name ("is" | "as") 
	package_obj_spec ( package_obj_spec )*
	"end" (package_name)? SEMI!
	;
	
package_body: 
	"package" ("body")? package_name ("is" | "as")
	package_obj_body ( package_obj_body )*
	("begin")? (seq_of_statements)?  
	"end" (package_name )? SEMI!

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品久久只有精品| 日本sm残虐另类| 亚洲国产精品久久久久婷婷884| 夜夜操天天操亚洲| 日本欧美在线观看| 成人一级片在线观看| 色狠狠色噜噜噜综合网| 欧美一区二区二区| 国产精品美女久久福利网站| 一区二区三区中文在线观看| 日韩电影免费在线观看网站| 国产99久久久国产精品潘金| 欧美在线free| 国产日韩欧美高清| 亚洲成人精品影院| 国产亚洲午夜高清国产拍精品| 亚洲丝袜美腿综合| 久久99国产精品成人| 99久久夜色精品国产网站| 正在播放亚洲一区| 国产精品欧美一区喷水| 五月婷婷综合激情| 成人免费毛片aaaaa**| 欧美精品第1页| 国产欧美日韩中文久久| 全国精品久久少妇| 91浏览器入口在线观看| 精品国产污污免费网站入口| 亚洲码国产岛国毛片在线| 久久www免费人成看片高清| 91亚洲精品乱码久久久久久蜜桃 | 国产精品素人一区二区| 午夜精品一区在线观看| 成人国产免费视频| 日韩欧美国产午夜精品| 亚洲精品免费视频| 国产福利精品导航| 91精品国产色综合久久不卡电影| 国产精品久久三区| 国内成人免费视频| 欧美夫妻性生活| 亚洲黄色av一区| 国产91精品在线观看| 日韩一区二区麻豆国产| 亚洲一卡二卡三卡四卡无卡久久| 国产精品18久久久久久vr| 91精品国产综合久久久久久久| 亚洲视频一二三| 国产乱码精品一区二区三区av| 欧美日韩国产不卡| 亚洲另类在线制服丝袜| 成人小视频在线观看| 久久色中文字幕| 久久成人综合网| 欧美一区二区私人影院日本| 亚洲永久免费视频| 91老司机福利 在线| 国产欧美精品一区| 国产一区二区美女诱惑| 日韩欧美在线影院| 亚洲.国产.中文慕字在线| 在线欧美日韩精品| 亚洲黄色免费电影| 在线观看亚洲成人| 亚洲综合免费观看高清完整版| bt欧美亚洲午夜电影天堂| 国产人久久人人人人爽| 国产精品自在在线| 久久久久九九视频| 国产原创一区二区| 久久久影视传媒| 国模无码大尺度一区二区三区| 日韩一区和二区| 日韩欧美亚洲另类制服综合在线| 偷拍与自拍一区| 欧美高清hd18日本| 久久精品国产久精国产| 日韩欧美一级精品久久| 久久精品免费观看| 2欧美一区二区三区在线观看视频| 韩国在线一区二区| 国产欧美一区二区精品性色| 国产69精品久久777的优势| 国产亚洲精品7777| 成人高清视频免费观看| 成人欧美一区二区三区黑人麻豆| 99免费精品在线| 一区二区视频在线| 欧美日韩不卡一区二区| 偷窥国产亚洲免费视频| 日韩免费看的电影| 国产一区二区三区免费播放| 国产农村妇女精品| 91色视频在线| 亚洲一区二区高清| 欧美成人精品高清在线播放| 国产精品资源在线观看| 国产精品国产自产拍高清av| 色婷婷av一区二区三区软件| 亚洲成人午夜影院| 精品国产乱码久久久久久牛牛| 国产露脸91国语对白| 亚洲欧美色综合| 69堂成人精品免费视频| 黑人精品欧美一区二区蜜桃 | 懂色av一区二区三区免费看| 亚洲免费资源在线播放| 欧美久久久久久久久中文字幕| 毛片av中文字幕一区二区| 国产三级精品三级在线专区| yourporn久久国产精品| 亚洲高清在线视频| 精品电影一区二区| 99视频一区二区| 热久久国产精品| 国产精品区一区二区三区| 欧美性视频一区二区三区| 极品少妇xxxx偷拍精品少妇| 国产精品卡一卡二卡三| 3d动漫精品啪啪一区二区竹菊| 国产精品自拍在线| 亚洲成在人线在线播放| 精品成人佐山爱一区二区| 99re8在线精品视频免费播放| 性做久久久久久免费观看欧美| 日韩精品一区二区三区老鸭窝| 成人免费高清视频在线观看| 丝袜亚洲精品中文字幕一区| 国产亚洲精品资源在线26u| 欧美日韩一区不卡| 国产精品88av| 视频在线观看国产精品| 中文字幕不卡在线播放| 在线综合+亚洲+欧美中文字幕| 丰满放荡岳乱妇91ww| 青青草国产精品97视觉盛宴 | 欧美在线观看视频在线| 国产伦精品一区二区三区免费迷| 亚洲精品菠萝久久久久久久| 日韩精品一区二区三区swag| 在线观看欧美精品| 成人免费看的视频| 卡一卡二国产精品| 亚瑟在线精品视频| 亚洲精选一二三| 久久精品日韩一区二区三区| 亚洲高清视频的网址| 国产精品女主播av| 精品国产一区a| 欧美日韩精品电影| 色欧美乱欧美15图片| 懂色av中文字幕一区二区三区| 美女在线一区二区| 调教+趴+乳夹+国产+精品| 亚洲精品你懂的| 亚洲人成网站影音先锋播放| 国产欧美一区二区三区鸳鸯浴| 91精品久久久久久久久99蜜臂| 色国产精品一区在线观看| www.在线成人| 国产成人综合网站| 精品一区二区综合| 欧美aa在线视频| 亚洲成年人网站在线观看| 亚洲欧美日韩在线不卡| 欧美国产在线观看| 中文字幕欧美日本乱码一线二线| 亚洲精品一区在线观看| 91麻豆精品国产91久久久久久久久| 在线亚洲人成电影网站色www| 成人18视频在线播放| 福利91精品一区二区三区| 久久电影国产免费久久电影| 喷水一区二区三区| 日本不卡在线视频| 日本三级韩国三级欧美三级| 天堂成人免费av电影一区| 亚洲国产精品一区二区尤物区| 亚洲美腿欧美偷拍| 亚洲欧美日韩国产手机在线| 最新热久久免费视频| 中文字幕一区二区三区四区| 国产精品国产自产拍高清av王其| 亚洲国产精品精华液2区45| 国产女人18水真多18精品一级做| 欧美经典一区二区| 亚洲国产精品黑人久久久| 欧美韩日一区二区三区| 中文字幕亚洲成人| 亚洲人妖av一区二区| 亚洲视频精选在线| 亚洲精品中文字幕在线观看| 亚洲综合激情网| 午夜免费久久看| 美女网站一区二区| 精品一区二区三区免费毛片爱| 国模娜娜一区二区三区| 懂色av噜噜一区二区三区av| 国产精品国产精品国产专区不片| 久久精品人人做人人综合|