summaryrefslogtreecommitdiffstats
path: root/tcllib/examples/page/sql.peg
diff options
context:
space:
mode:
authorWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:39:39 (GMT)
committerWilliam Joye <wjoye@cfa.harvard.edu>2016-10-27 19:39:39 (GMT)
commitea28451286d3ea4a772fa174483f9a7a66bb1ab3 (patch)
tree6ee9d8a7848333a7ceeee3b13d492e40225f8b86 /tcllib/examples/page/sql.peg
parentb5ca09bae0d6a1edce939eea03594dd56383f2c8 (diff)
parent7c621da28f07e449ad90c387344f07a453927569 (diff)
downloadblt-ea28451286d3ea4a772fa174483f9a7a66bb1ab3.zip
blt-ea28451286d3ea4a772fa174483f9a7a66bb1ab3.tar.gz
blt-ea28451286d3ea4a772fa174483f9a7a66bb1ab3.tar.bz2
Merge commit '7c621da28f07e449ad90c387344f07a453927569' as 'tcllib'
Diffstat (limited to 'tcllib/examples/page/sql.peg')
-rw-r--r--tcllib/examples/page/sql.peg643
1 files changed, 643 insertions, 0 deletions
diff --git a/tcllib/examples/page/sql.peg b/tcllib/examples/page/sql.peg
new file mode 100644
index 0000000..e5f11a5
--- /dev/null
+++ b/tcllib/examples/page/sql.peg
@@ -0,0 +1,643 @@
+# -*- text -*-
+## Parsing Expression Grammar 'sqlite3Parser'.
+## Layouted by the PG backend 'PEGwriter'.
+
+PEG sqlite3Parser (input)
+
+leaf: ABORT <- 'A' 'B' 'O' 'R' 'T' ;
+
+leaf: ADD <- 'A' 'D' 'D' ;
+
+ add_column_fullname <- fullname ;
+
+leaf: AFTER <- 'A' 'F' 'T' 'E' 'R' ;
+
+leaf: ALL <- 'A' 'L' 'L' ;
+
+leaf: ALTER <- 'A' 'L' 'T' 'E' 'R' ;
+
+leaf: AND <- 'A' 'N' 'D' ;
+
+leaf: AS <- 'A' 'S' ;
+
+ as <- ( AS nm
+ / ids)? ;
+
+leaf: ASC <- 'A' 'S' 'C' ;
+
+leaf: ATTACH <- 'A' 'T' 'T' 'A' 'C' 'H' ;
+
+ autoinc <- AUTOINCR? ;
+
+leaf: AUTOINCR <- 'A' 'U' 'T' 'O' 'I' 'N' 'C' 'R' ;
+
+leaf: BEFORE <- 'B' 'E' 'F' 'O' 'R' 'E' ;
+
+leaf: BEGIN <- 'B' 'E' 'G' 'I' 'N' ;
+
+leaf: BETWEEN <- 'B' 'E' 'T' 'W' 'E' 'E' 'N' ;
+
+ between_op <- BETWEEN
+ / NOT BETWEEN ;
+
+leaf: BITAND <- 'B' 'I' 'T' 'A' 'N' 'D' ;
+
+leaf: BITNOT <- 'B' 'I' 'T' 'N' 'O' 'T' ;
+
+leaf: BITOR <- 'B' 'I' 'T' 'O' 'R' ;
+
+leaf: BLOB <- 'B' 'L' 'O' 'B' ;
+
+leaf: BY <- 'B' 'Y' ;
+
+ carg <- CONSTRAINT nm ccons
+ / ccons
+ / DEFAULT term
+ / DEFAULT PLUS term
+ / DEFAULT MINUS term
+ / DEFAULT id ;
+
+ carglist <- (carglist carg)? ;
+
+leaf: CASCADE <- 'C' 'A' 'S' 'C' 'A' 'D' 'E' ;
+
+leaf: CASE <- 'C' 'A' 'S' 'E' ;
+
+ case_else <- (ELSE expr)? ;
+
+ case_exprlist <- case_exprlist WHEN expr THEN expr
+ / WHEN expr THEN expr ;
+
+ case_operand <- expr? ;
+
+ ccons <- NULL onconf
+ / NOT NULL onconf
+ / PRIMARY KEY sortorder onconf autoinc
+ / UNIQUE onconf
+ / CHECK LP expr RP onconf
+ / REFERENCES nm idxlist_opt refargs
+ / defer_subclause
+ / COLLATE id ;
+
+leaf: CDATE <- 'C' 'D' 'A' 'T' 'E' ;
+
+leaf: CHECK <- 'C' 'H' 'E' 'C' 'K' ;
+
+ cmd <- BEGIN transtype trans_opt
+ / COMMIT trans_opt
+ / END trans_opt
+ / ROLLBACK trans_opt
+ / create_table create_table_args
+ / DROP TABLE fullname
+ / CREATE temp VIEW nm dbnm AS select
+ / DROP VIEW fullname
+ / select
+ / DELETE FROM fullname where_opt
+ / UPDATE orconf fullname SET setlist where_opt
+ / insert_cmd INTO fullname inscollist_opt VALUES
+ LP itemlist RP
+ / insert_cmd INTO fullname inscollist_opt select
+ / CREATE uniqueflag INDEX nm dbnm ON nm LP idxlist
+ RP onconf
+ / DROP INDEX fullname
+ / VACUUM
+ / VACUUM nm
+ / PRAGMA nm dbnm EQ nm
+ / PRAGMA nm dbnm EQ ON
+ / PRAGMA nm dbnm EQ plus_num
+ / PRAGMA nm dbnm EQ minus_num
+ / PRAGMA nm dbnm LP nm RP
+ / PRAGMA nm dbnm
+ / CREATE trigger_decl BEGIN trigger_cmd_list END
+ / DROP TRIGGER fullname
+ / ATTACH database_kw_opt ids AS nm key_opt
+ / DETACH database_kw_opt nm
+ / REINDEX
+ / REINDEX nm dbnm
+ / ALTER TABLE fullname RENAME TO nm
+ / ALTER TABLE add_column_fullname ADD kwcolumn_opt
+ column ;
+
+ cmdlist <- cmdlist ecmd
+ / ecmd ;
+
+ cmdx <- cmd ;
+
+leaf: COLLATE <- 'C' 'O' 'L' 'L' 'A' 'T' 'E' ;
+
+ collate <- (COLLATE id)? ;
+
+ column <- columnid type carglist ;
+
+ columnid <- nm ;
+
+leaf: COLUMNKW <- 'C' 'O' 'L' 'U' 'M' 'N' 'K' 'W' ;
+
+ columnlist <- columnlist COMMA column
+ / column ;
+
+leaf: COMMA <- 'C' 'O' 'M' 'M' 'A' ;
+
+leaf: COMMIT <- 'C' 'O' 'M' 'M' 'I' 'T' ;
+
+leaf: CONCAT <- 'C' 'O' 'N' 'C' 'A' 'T' ;
+
+leaf: CONFLICT <- 'C' 'O' 'N' 'F' 'L' 'I' 'C' 'T' ;
+
+ conslist <- conslist COMMA tcons
+ / conslist tcons
+ / tcons ;
+
+ conslist_opt <- (COMMA conslist)? ;
+
+leaf: CONSTRAINT <- 'C' 'O' 'N' 'S' 'T' 'R' 'A' 'I' 'N' 'T' ;
+
+leaf: CREATE <- 'C' 'R' 'E' 'A' 'T' 'E' ;
+
+ create_table <- CREATE temp TABLE nm dbnm ;
+
+ create_table_args <- LP columnlist conslist_opt RP
+ / AS select ;
+
+leaf: CTIME <- 'C' 'T' 'I' 'M' 'E' ;
+
+leaf: CTIMESTAMP <- 'C' 'T' 'I' 'M' 'E' 'S' 'T' 'A' 'M' 'P' ;
+
+leaf: DATABASE <- 'D' 'A' 'T' 'A' 'B' 'A' 'S' 'E' ;
+
+ database_kw_opt <- DATABASE? ;
+
+ dbnm <- (DOT nm)? ;
+
+leaf: DEFAULT <- 'D' 'E' 'F' 'A' 'U' 'L' 'T' ;
+
+ defer_subclause <- NOT DEFERRABLE init_deferred_pred_opt
+ / DEFERRABLE init_deferred_pred_opt ;
+
+ defer_subclause_opt <- defer_subclause? ;
+
+leaf: DEFERRABLE <- 'D' 'E' 'F' 'E' 'R' 'R' 'A' 'B' 'L' 'E' ;
+
+leaf: DEFERRED <- 'D' 'E' 'F' 'E' 'R' 'R' 'E' 'D' ;
+
+leaf: DELETE <- 'D' 'E' 'L' 'E' 'T' 'E' ;
+
+leaf: DESC <- 'D' 'E' 'S' 'C' ;
+
+leaf: DETACH <- 'D' 'E' 'T' 'A' 'C' 'H' ;
+
+leaf: DISTINCT <- 'D' 'I' 'S' 'T' 'I' 'N' 'C' 'T' ;
+
+ distinct <- ( DISTINCT
+ / ALL)? ;
+
+leaf: DOT <- 'D' 'O' 'T' ;
+
+leaf: DROP <- 'D' 'R' 'O' 'P' ;
+
+leaf: EACH <- 'E' 'A' 'C' 'H' ;
+
+ ecmd <- SEMI
+ / explain cmdx SEMI ;
+
+leaf: ELSE <- 'E' 'L' 'S' 'E' ;
+
+leaf: END <- 'E' 'N' 'D' ;
+
+leaf: EQ <- 'E' 'Q' ;
+
+leaf: ESCAPE <- 'E' 'S' 'C' 'A' 'P' 'E' ;
+
+ escape <- (ESCAPE expr)? ;
+
+leaf: EXCEPT <- 'E' 'X' 'C' 'E' 'P' 'T' ;
+
+leaf: EXCLUSIVE <- 'E' 'X' 'C' 'L' 'U' 'S' 'I' 'V' 'E' ;
+
+leaf: EXISTS <- 'E' 'X' 'I' 'S' 'T' 'S' ;
+
+leaf: EXPLAIN <- 'E' 'X' 'P' 'L' 'A' 'I' 'N' ;
+
+ explain <- EXPLAIN? ;
+
+ expr <- term
+ / LP expr RP
+ / ID
+ / JOIN_KW
+ / nm DOT nm
+ / nm DOT nm DOT nm
+ / REGISTER
+ / VARIABLE
+ / ID LP exprlist RP
+ / ID LP STAR RP
+ / expr AND expr
+ / expr OR expr
+ / expr LT expr
+ / expr GT expr
+ / expr LE expr
+ / expr GE expr
+ / expr NE expr
+ / expr EQ expr
+ / expr BITAND expr
+ / expr BITOR expr
+ / expr LSHIFT expr
+ / expr RSHIFT expr
+ / expr PLUS expr
+ / expr MINUS expr
+ / expr STAR expr
+ / expr SLASH expr
+ / expr REM expr
+ / expr CONCAT expr
+ / expr likeop expr escape
+ / expr ISNULL
+ / expr IS NULL
+ / expr NOTNULL
+ / expr NOT NULL
+ / expr IS NOT NULL
+ / NOT expr
+ / BITNOT expr
+ / MINUS expr
+ / PLUS expr
+ / expr between_op expr AND expr
+ / expr in_op LP exprlist RP
+ / LP select RP
+ / expr in_op LP select RP
+ / expr in_op nm dbnm
+ / EXISTS LP select RP
+ / CASE case_operand case_exprlist case_else END
+ / RAISE LP IGNORE RP
+ / RAISE LP raisetype COMMA nm RP ;
+
+ expritem <- expr? ;
+
+ exprlist <- exprlist COMMA expritem
+ / expritem ;
+
+leaf: FAIL <- 'F' 'A' 'I' 'L' ;
+
+leaf: FLOAT <- 'F' 'L' 'O' 'A' 'T' ;
+
+leaf: FOR <- 'F' 'O' 'R' ;
+
+ foreach_clause <- ( FOR EACH ROW
+ / FOR EACH STATEMENT)? ;
+
+leaf: FOREIGN <- 'F' 'O' 'R' 'E' 'I' 'G' 'N' ;
+
+leaf: FROM <- 'F' 'R' 'O' 'M' ;
+
+ from <- (FROM seltablist)? ;
+
+ fullname <- nm dbnm ;
+
+leaf: GE <- 'G' 'E' ;
+
+leaf: GLOB <- 'G' 'L' 'O' 'B' ;
+
+leaf: GROUP <- 'G' 'R' 'O' 'U' 'P' ;
+
+ groupby_opt <- (GROUP BY exprlist)? ;
+
+leaf: GT <- 'G' 'T' ;
+
+leaf: HAVING <- 'H' 'A' 'V' 'I' 'N' 'G' ;
+
+ having_opt <- (HAVING expr)? ;
+
+leaf: ID <- 'I' 'D' ;
+
+ id <- ID ;
+
+ ids <- ID
+ / STRING ;
+
+ idxitem <- nm ;
+
+ idxlist <- idxlist COMMA idxitem collate sortorder
+ / idxitem collate sortorder ;
+
+ idxlist_opt <- (LP idxlist RP)? ;
+
+leaf: IGNORE <- 'I' 'G' 'N' 'O' 'R' 'E' ;
+
+leaf: IMMEDIATE <- 'I' 'M' 'M' 'E' 'D' 'I' 'A' 'T' 'E' ;
+
+leaf: IN <- 'I' 'N' ;
+
+ in_op <- IN
+ / NOT IN ;
+
+leaf: INDEX <- 'I' 'N' 'D' 'E' 'X' ;
+
+ init_deferred_pred_opt <- ( INITIALLY DEFERRED
+ / INITIALLY IMMEDIATE)? ;
+
+leaf: INITIALLY <- 'I' 'N' 'I' 'T' 'I' 'A' 'L' 'L' 'Y' ;
+
+ input <- cmdlist ;
+
+ inscollist <- inscollist COMMA nm
+ / nm ;
+
+ inscollist_opt <- (LP inscollist RP)? ;
+
+leaf: INSERT <- 'I' 'N' 'S' 'E' 'R' 'T' ;
+
+ insert_cmd <- INSERT orconf
+ / REPLACE ;
+
+leaf: INSTEAD <- 'I' 'N' 'S' 'T' 'E' 'A' 'D' ;
+
+leaf: INTEGER <- 'I' 'N' 'T' 'E' 'G' 'E' 'R' ;
+
+leaf: INTERSECT <- 'I' 'N' 'T' 'E' 'R' 'S' 'E' 'C' 'T' ;
+
+leaf: INTO <- 'I' 'N' 'T' 'O' ;
+
+leaf: IS <- 'I' 'S' ;
+
+leaf: ISNULL <- 'I' 'S' 'N' 'U' 'L' 'L' ;
+
+ itemlist <- itemlist COMMA expr
+ / expr ;
+
+leaf: JOIN <- 'J' 'O' 'I' 'N' ;
+
+leaf: JOIN_KW <- 'J' 'O' 'I' 'N' '_' 'K' 'W' ;
+
+ joinop <- COMMA
+ / JOIN
+ / JOIN_KW JOIN
+ / JOIN_KW nm JOIN
+ / JOIN_KW nm nm JOIN ;
+
+leaf: KEY <- 'K' 'E' 'Y' ;
+
+ key_opt <- ( KEY ids
+ / KEY BLOB)? ;
+
+ kwcolumn_opt <- COLUMNKW? ;
+
+leaf: LE <- 'L' 'E' ;
+
+leaf: LIKE <- 'L' 'I' 'K' 'E' ;
+
+ likeop <- LIKE
+ / GLOB
+ / NOT LIKE
+ / NOT GLOB ;
+
+leaf: LIMIT <- 'L' 'I' 'M' 'I' 'T' ;
+
+ limit_opt <- ( LIMIT expr
+ / LIMIT expr OFFSET expr
+ / LIMIT expr COMMA expr)? ;
+
+leaf: LP <- 'L' 'P' ;
+
+leaf: LSHIFT <- 'L' 'S' 'H' 'I' 'F' 'T' ;
+
+leaf: LT <- 'L' 'T' ;
+
+leaf: MATCH <- 'M' 'A' 'T' 'C' 'H' ;
+
+leaf: MINUS <- 'M' 'I' 'N' 'U' 'S' ;
+
+ minus_num <- MINUS number ;
+
+ multiselect_op <- UNION
+ / UNION ALL
+ / INTERSECT
+ / EXCEPT ;
+
+leaf: NE <- 'N' 'E' ;
+
+ nm <- ID
+ / STRING
+ / JOIN_KW ;
+
+leaf: NOT <- 'N' 'O' 'T' ;
+
+leaf: NOTNULL <- 'N' 'O' 'T' 'N' 'U' 'L' 'L' ;
+
+leaf: NULL <- 'N' 'U' 'L' 'L' ;
+
+ number <- INTEGER
+ / FLOAT ;
+
+leaf: OF <- 'O' 'F' ;
+
+leaf: OFFSET <- 'O' 'F' 'F' 'S' 'E' 'T' ;
+
+leaf: ON <- 'O' 'N' ;
+
+ on_opt <- (ON expr)? ;
+
+ onconf <- (ON CONFLICT resolvetype)? ;
+
+ oneselect <- SELECT distinct selcollist from where_opt
+ groupby_opt having_opt orderby_opt limit_opt ;
+
+leaf: OR <- 'O' 'R' ;
+
+ orconf <- (OR resolvetype)? ;
+
+leaf: ORDER <- 'O' 'R' 'D' 'E' 'R' ;
+
+ orderby_opt <- (ORDER BY sortlist)? ;
+
+leaf: PLUS <- 'P' 'L' 'U' 'S' ;
+
+ plus_num <- plus_opt number ;
+
+ plus_opt <- PLUS? ;
+
+leaf: PRAGMA <- 'P' 'R' 'A' 'G' 'M' 'A' ;
+
+leaf: PRIMARY <- 'P' 'R' 'I' 'M' 'A' 'R' 'Y' ;
+
+leaf: RAISE <- 'R' 'A' 'I' 'S' 'E' ;
+
+ raisetype <- ROLLBACK
+ / ABORT
+ / FAIL ;
+
+ refact <- SET NULL
+ / SET DEFAULT
+ / CASCADE
+ / RESTRICT ;
+
+ refarg <- MATCH nm
+ / ON DELETE refact
+ / ON UPDATE refact
+ / ON INSERT refact ;
+
+ refargs <- (refargs refarg)? ;
+
+leaf: REFERENCES <- 'R' 'E' 'F' 'E' 'R' 'E' 'N' 'C' 'E' 'S' ;
+
+leaf: REGISTER <- 'R' 'E' 'G' 'I' 'S' 'T' 'E' 'R' ;
+
+leaf: REINDEX <- 'R' 'E' 'I' 'N' 'D' 'E' 'X' ;
+
+leaf: REM <- 'R' 'E' 'M' ;
+
+leaf: RENAME <- 'R' 'E' 'N' 'A' 'M' 'E' ;
+
+leaf: REPLACE <- 'R' 'E' 'P' 'L' 'A' 'C' 'E' ;
+
+ resolvetype <- raisetype
+ / IGNORE
+ / REPLACE ;
+
+leaf: RESTRICT <- 'R' 'E' 'S' 'T' 'R' 'I' 'C' 'T' ;
+
+leaf: ROLLBACK <- 'R' 'O' 'L' 'L' 'B' 'A' 'C' 'K' ;
+
+leaf: ROW <- 'R' 'O' 'W' ;
+
+leaf: RP <- 'R' 'P' ;
+
+leaf: RSHIFT <- 'R' 'S' 'H' 'I' 'F' 'T' ;
+
+ sclp <- (selcollist COMMA)? ;
+
+ selcollist <- sclp expr as
+ / sclp STAR
+ / sclp nm DOT STAR ;
+
+leaf: SELECT <- 'S' 'E' 'L' 'E' 'C' 'T' ;
+
+ select <- oneselect
+ / select multiselect_op oneselect ;
+
+ seltablist <- stl_prefix nm dbnm as on_opt using_opt
+ / stl_prefix LP seltablist_paren RP as on_opt
+ using_opt ;
+
+ seltablist_paren <- select
+ / seltablist ;
+
+leaf: SEMI <- 'S' 'E' 'M' 'I' ;
+
+leaf: SET <- 'S' 'E' 'T' ;
+
+ setlist <- setlist COMMA nm EQ expr
+ / nm EQ expr ;
+
+ signed <- plus_num
+ / minus_num ;
+
+leaf: SLASH <- 'S' 'L' 'A' 'S' 'H' ;
+
+ sortitem <- expr ;
+
+ sortlist <- sortlist COMMA sortitem collate sortorder
+ / sortitem collate sortorder ;
+
+ sortorder <- ( ASC
+ / DESC)? ;
+
+leaf: STAR <- 'S' 'T' 'A' 'R' ;
+
+leaf: STATEMENT <- 'S' 'T' 'A' 'T' 'E' 'M' 'E' 'N' 'T' ;
+
+ stl_prefix <- (seltablist joinop)? ;
+
+leaf: STRING <- 'S' 'T' 'R' 'I' 'N' 'G' ;
+
+leaf: TABLE <- 'T' 'A' 'B' 'L' 'E' ;
+
+ tcons <- CONSTRAINT nm
+ / PRIMARY KEY LP idxlist autoinc RP onconf
+ / UNIQUE LP idxlist RP onconf
+ / CHECK expr onconf
+ / FOREIGN KEY LP idxlist RP REFERENCES nm
+ idxlist_opt refargs defer_subclause_opt ;
+
+leaf: TEMP <- 'T' 'E' 'M' 'P' ;
+
+ temp <- TEMP? ;
+
+ term <- NULL
+ / INTEGER
+ / FLOAT
+ / STRING
+ / BLOB
+ / CTIME
+ / CDATE
+ / CTIMESTAMP ;
+
+leaf: THEN <- 'T' 'H' 'E' 'N' ;
+
+leaf: TO <- 'T' 'O' ;
+
+ trans_opt <- ( TRANSACTION
+ / TRANSACTION nm)? ;
+
+leaf: TRANSACTION <- 'T' 'R' 'A' 'N' 'S' 'A' 'C' 'T' 'I' 'O' 'N' ;
+
+ transtype <- ( DEFERRED
+ / IMMEDIATE
+ / EXCLUSIVE)? ;
+
+leaf: TRIGGER <- 'T' 'R' 'I' 'G' 'G' 'E' 'R' ;
+
+ trigger_cmd <- UPDATE orconf nm SET setlist where_opt
+ / insert_cmd INTO nm inscollist_opt VALUES LP
+ itemlist RP
+ / insert_cmd INTO nm inscollist_opt select
+ / DELETE FROM nm where_opt
+ / select ;
+
+ trigger_cmd_list <- (trigger_cmd SEMI trigger_cmd_list)? ;
+
+ trigger_decl <- temp TRIGGER nm dbnm trigger_time trigger_event
+ ON fullname foreach_clause when_clause ;
+
+ trigger_event <- DELETE
+ / INSERT
+ / UPDATE
+ / UPDATE OF inscollist ;
+
+ trigger_time <- ( BEFORE
+ / AFTER
+ / INSTEAD OF)? ;
+
+ type <- ( typename
+ / typename LP signed RP
+ / typename LP signed COMMA signed RP)? ;
+
+ typename <- ids
+ / typename ids ;
+
+leaf: UNION <- 'U' 'N' 'I' 'O' 'N' ;
+
+leaf: UNIQUE <- 'U' 'N' 'I' 'Q' 'U' 'E' ;
+
+ uniqueflag <- UNIQUE? ;
+
+leaf: UPDATE <- 'U' 'P' 'D' 'A' 'T' 'E' ;
+
+leaf: USING <- 'U' 'S' 'I' 'N' 'G' ;
+
+ using_opt <- (USING LP inscollist RP)? ;
+
+leaf: VACUUM <- 'V' 'A' 'C' 'U' 'U' 'M' ;
+
+leaf: VALUES <- 'V' 'A' 'L' 'U' 'E' 'S' ;
+
+leaf: VARIABLE <- 'V' 'A' 'R' 'I' 'A' 'B' 'L' 'E' ;
+
+leaf: VIEW <- 'V' 'I' 'E' 'W' ;
+
+leaf: WHEN <- 'W' 'H' 'E' 'N' ;
+
+ when_clause <- (WHEN expr)? ;
+
+leaf: WHERE <- 'W' 'H' 'E' 'R' 'E' ;
+
+ where_opt <- (WHERE expr)? ;
+
+END;
+