├── .gitignore ├── Makefile ├── README.md ├── analyze.sh ├── build-antlr4-java.sh ├── common.sh ├── create-antlr4-csharp.sh ├── csharp ├── Properties │ └── AssemblyInfo.cs ├── README.md ├── analyzer.csproj ├── analyzer.sln ├── nuget_antlr4.sh ├── packages.config └── src │ ├── PlSql.tokens │ ├── PlSqlBaseListener.cs │ ├── PlSqlBaseVisitor.cs │ ├── PlSqlLexer.cs │ ├── PlSqlLexer.tokens │ ├── PlSqlListener.cs │ ├── PlSqlParser.cs │ ├── PlSqlVisitor.cs │ └── Program.cs ├── grammar ├── PlSql-template.g4 ├── csharp_addon.g4 └── java_addon.g4 ├── java ├── RemoteSystemsTempFiles │ └── .project └── src │ ├── Analyzer │ ├── .classpath │ ├── .project │ ├── bin │ │ └── .gitignore │ ├── build.xml │ └── src │ │ └── org │ │ └── antlr │ │ └── utils │ │ └── Analyzer.java │ ├── Antlr4ParserLexer │ ├── .classpath │ ├── .gitignore │ ├── .project │ ├── .settings │ │ ├── org.eclipse.core.resources.prefs │ │ └── org.eclipse.jdt.core.prefs │ ├── lib │ │ └── antlr-4.5.3-complete.jar │ └── src │ │ └── org │ │ └── antlr │ │ └── generated │ │ ├── PlSql.tokens │ │ ├── PlSqlBaseListener.java │ │ ├── PlSqlBaseVisitor.java │ │ ├── PlSqlLexer.java │ │ ├── PlSqlLexer.tokens │ │ ├── PlSqlListener.java │ │ ├── PlSqlParser.java │ │ └── PlSqlVisitor.java │ ├── Antlr4Work │ ├── .classpath │ ├── .gitignore │ ├── .project │ ├── .settings │ │ ├── org.eclipse.core.resources.prefs │ │ ├── org.eclipse.jdt.core.prefs │ │ └── org.jboss.ide.eclipse.as.core.prefs │ ├── build.xml │ ├── config.properties │ └── src │ │ └── org │ │ ├── example │ │ ├── PlSqlCallGraph.java │ │ └── PlSqlLiteralExtractor.java │ │ └── plsql │ │ ├── PlSqlParserTree.java │ │ ├── utils │ │ ├── PlSqlErrorListener.java │ │ ├── PlSqlUtils.java │ │ └── Translit.java │ │ └── visitor │ │ ├── CallGraphVisitor.java │ │ ├── ConcatenationVisitor.java │ │ ├── PlSqlRuleVisitor.java │ │ └── StringVisitor.java │ └── RemoteSystemsTempFiles │ └── .project ├── runners └── analyze_files.sh ├── stuff ├── out.txt ├── plsql_keywords.txt ├── plsql_reserved_words.txt ├── prepare_keywords.sh └── sql_reserved_words.txt └── tests └── call_graph_test ├── pkg1.pkb ├── pkg1.pks ├── pkg2.pkb ├── pkg2.pks ├── pkg3.pkb └── pkg3.pks /.gitignore: -------------------------------------------------------------------------------- 1 | *.class 2 | *.log 3 | java/.metadata/ 4 | java/bin/ 5 | csharp/bin/ 6 | csharp/obj/ 7 | grammar/PlSql.g4 8 | csharp/packages/ 9 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | build: 2 | sh build-antlr4-java.sh -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # antlr4-oracle 2 | 3 | Original grammar can be found at https://github.com/antlr/grammars-v4. 4 | 5 | To build java files and classes use: 6 | ./build-antlr4.sh 7 | 8 | To analyze files use: 9 | ./analyze.sh [-tokens] [-gui] < files > 10 | 11 | Interesting: 12 | https://habrahabr.ru/post/259691/ 13 | 14 | http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/fundamentals.htm#LNPLS00210 15 | http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/langelems.htm 16 | http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/toc.htm 17 | 18 | Database PL/SQL Language Reference: 19 | http://docs.oracle.com/cd/B28359_01/appdev.111/b28370/toc.htm 20 | 21 | http://stackoverflow.com/questions/14565794/antlr-4-tree-inject-rewrite-operator 22 | http://www.antlr.org/api/Java/org/antlr/v4/runtime/TokenStreamRewriter.html -------------------------------------------------------------------------------- /analyze.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | current_dir=$(dirname $0) 3 | 4 | ############################################################################### 5 | source $current_dir/common.sh 6 | ############################################################################### 7 | 8 | # [-tokens] [-tree] [-gui] [-trace] 9 | 10 | echo "# Running: $*" 11 | runTest $* 12 | #runAnalyze $* 13 | -------------------------------------------------------------------------------- /build-antlr4-java.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | current_dir=$(dirname $0) 3 | 4 | ############################################################################### 5 | source $current_dir/common.sh 6 | ############################################################################### 7 | 8 | echo "Building antlr4 files for java!" 9 | 10 | make_grammar_with grammar/java_addon.g4 11 | 12 | antlr4 $grammar $* -Dlanguage=Java -o $java_src_path -visitor 13 | 14 | echo "Compiling java!" 15 | [ -d "$java_internal_class" ] || mkdir "$java_internal_class" 16 | javac -g:none -d "$java_internal_class" $java_src_path/*.java 17 | -------------------------------------------------------------------------------- /common.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | current_dir=$(dirname $0) 3 | 4 | ############################################################################### 5 | antlr='antlr-4.5.3-complete.jar' 6 | ############################################################################### 7 | 8 | grammar=$current_dir/grammar/PlSql.g4 9 | grammar_template=$current_dir/grammar/PlSql-template.g4 10 | 11 | start_rule=sql_script 12 | 13 | grammar_class=org.antlr.generated.PlSql 14 | 15 | ############################################################################### 16 | 17 | java_src_path=$current_dir/java/src/Antlr4ParserLexer/src/org/antlr/generated 18 | jar_path=$current_dir/java/src/Antlr4ParserLexer/lib/$antlr 19 | java_internal_class=$current_dir/java/internal_class 20 | 21 | # new_analyzer_path=$current_dir/bin/analyzer.jar 22 | 23 | ############################################################################### 24 | # Java 25 | ############################################################################### 26 | 27 | # [-tokens] [-tree] [-gui] [-trace] 28 | JAVA_OPTIONS='-Xms2048M -Xmx2048M -XX:+UseParallelGC -XX:NewRatio=2' 29 | # JAVA_OPTIONS= 30 | 31 | export CLASSPATH="$java_internal_class:$jar_path:$new_analyzer_path:$CLASSPATH" 32 | 33 | alias runTest='java $JAVA_OPTIONS org.antlr.v4.gui.TestRig $grammar_class $start_rule' 34 | 35 | # new custom class for future purposes 36 | alias runAnalyze='java $JAVA_OPTIONS org.antlr.utils.Analyzer $grammar_class $start_rule' 37 | 38 | alias antlr4='java $java_options org.antlr.v4.Tool' 39 | 40 | make_grammar_with() { 41 | local addon=$current_dir/$1 42 | echo "Creating grammar with addon: $addon" 43 | 44 | cat grammar/PlSql-template.g4 | sed -e '/<>/ {' -e "r $addon" -e 'd' -e '}' > $grammar 45 | } 46 | 47 | ### echo "Running! $1" 48 | ### grun $grammar $start_rule $* 49 | -------------------------------------------------------------------------------- /create-antlr4-csharp.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alris/antlr4-oracle/8c185f04b07169effd9a9bb9bf7ed5686ffe66d9/create-antlr4-csharp.sh -------------------------------------------------------------------------------- /csharp/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region Using directives 2 | 3 | using System; 4 | using System.Reflection; 5 | using System.Runtime.InteropServices; 6 | 7 | #endregion 8 | 9 | // General Information about an assembly is controlled through the following 10 | // set of attributes. Change these attribute values to modify the information 11 | // associated with an assembly. 12 | [assembly: AssemblyTitle("analyzer")] 13 | [assembly: AssemblyDescription("")] 14 | [assembly: AssemblyConfiguration("")] 15 | [assembly: AssemblyCompany("")] 16 | [assembly: AssemblyProduct("analyzer")] 17 | [assembly: AssemblyCopyright("Copyright 2016")] 18 | [assembly: AssemblyTrademark("")] 19 | [assembly: AssemblyCulture("")] 20 | 21 | // This sets the default COM visibility of types in the assembly to invisible. 22 | // If you need to expose a type to COM, use [ComVisible(true)] on that type. 23 | [assembly: ComVisible(false)] 24 | 25 | // The assembly version has following format : 26 | // 27 | // Major.Minor.Build.Revision 28 | // 29 | // You can specify all the values or you can use the default the Revision and 30 | // Build Numbers by using the '*' as shown below: 31 | [assembly: AssemblyVersion("1.0.*")] 32 | -------------------------------------------------------------------------------- /csharp/README.md: -------------------------------------------------------------------------------- 1 | Please install Antlr4 runtime for C# first. 2 | Run: ./nuget_antlr4.sh -------------------------------------------------------------------------------- /csharp/analyzer.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | {3EE25398-7791-45B7-AE5F-2C00AE4E4A0C} 6 | Debug 7 | AnyCPU 8 | Exe 9 | analyzer 10 | analyzer 11 | v4.0 12 | Client 13 | Properties 14 | False 15 | False 16 | False 17 | False 18 | obj\$(Configuration)\ 19 | 4 20 | 21 | 22 | x86 23 | 4194304 24 | False 25 | Auto 26 | 4096 27 | 28 | 29 | bin\Debug\ 30 | True 31 | Full 32 | False 33 | True 34 | DEBUG;TRACE 35 | Project 36 | D:\Work\Other\antlr4-oracle\tests\call_graph_test\pkg1.pkb 37 | obj\ 38 | 39 | 40 | bin\Release\ 41 | False 42 | None 43 | True 44 | False 45 | TRACE 46 | obj\ 47 | Project 48 | D:\Work\Other\antlr4-oracle\tests\call_graph_test\pkg1.pkb 49 | 50 | 51 | 52 | packages\Antlr4.Runtime.4.5.3\lib\net40-client\Antlr4.Runtime.dll 53 | 54 | 55 | packages\Antlr4.4.5.3\build\Antlr4BuildTasks.net40.dll 56 | 57 | 58 | 59 | 3.5 60 | 61 | 62 | 63 | 3.5 64 | 65 | 66 | 67 | 3.5 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | -------------------------------------------------------------------------------- /csharp/analyzer.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | # SharpDevelop 4.4 5 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "analyzer", "analyzer.csproj", "{3EE25398-7791-45B7-AE5F-2C00AE4E4A0C}" 6 | EndProject 7 | Global 8 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 9 | Debug|Any CPU = Debug|Any CPU 10 | Release|Any CPU = Release|Any CPU 11 | EndGlobalSection 12 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 13 | {3EE25398-7791-45B7-AE5F-2C00AE4E4A0C}.Debug|Any CPU.Build.0 = Debug|Any CPU 14 | {3EE25398-7791-45B7-AE5F-2C00AE4E4A0C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {3EE25398-7791-45B7-AE5F-2C00AE4E4A0C}.Release|Any CPU.Build.0 = Release|Any CPU 16 | {3EE25398-7791-45B7-AE5F-2C00AE4E4A0C}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | EndGlobalSection 18 | EndGlobal 19 | -------------------------------------------------------------------------------- /csharp/nuget_antlr4.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | mkdir packages 3 | cd packages 4 | nuget install Antlr4 -Version 4.5.3 -------------------------------------------------------------------------------- /csharp/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /csharp/src/PlSql.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | PP_IF=2 3 | PP_THEN=3 4 | PP_ELSE=4 5 | PP_ELSIF=5 6 | PP_END=6 7 | PP_ERROR=7 8 | A_LETTER=8 9 | ADD=9 10 | AFTER=10 11 | AGENT=11 12 | AGGREGATE=12 13 | ALL=13 14 | ALTER=14 15 | ANALYZE=15 16 | AND=16 17 | ANY=17 18 | ARRAY=18 19 | AS=19 20 | ASC=20 21 | ASSOCIATE=21 22 | ASSOCIATION_OPERATOR=22 23 | AT=23 24 | ATTRIBUTE=24 25 | AUDIT=25 26 | AUTHID=26 27 | AUTO=27 28 | AUTOMATIC=28 29 | AUTONOMOUS_TRANSACTION=29 30 | BATCH=30 31 | BEFORE=31 32 | BEGIN=32 33 | BETWEEN=33 34 | BFILE=34 35 | BINARY_DOUBLE=35 36 | BINARY_FLOAT=36 37 | BINARY_INTEGER=37 38 | BLOB=38 39 | BLOCK=39 40 | BODY=40 41 | BOOLEAN=41 42 | BOTH=42 43 | BREADTH=43 44 | BULK=44 45 | BY=45 46 | BYTE=46 47 | C_LETTER=47 48 | CACHE=48 49 | CALL=49 50 | CANONICAL=50 51 | CASCADE=51 52 | CASE=52 53 | CAST=53 54 | CHAR=54 55 | CHAR_CS=55 56 | CHARACTER=56 57 | CHECK=57 58 | CHR=58 59 | CLOB=59 60 | CLOSE=60 61 | CLUSTER=61 62 | COLLECT=62 63 | COLUMNS=63 64 | COMMENT=64 65 | COMMIT=65 66 | COMMITTED=66 67 | COMPATIBILITY=67 68 | COMPILE=68 69 | COMPOUND=69 70 | CONNECT=70 71 | CONNECT_BY_ROOT=71 72 | CONSTANT=72 73 | CONSTRAINT=73 74 | CONSTRAINTS=74 75 | CONSTRUCTOR=75 76 | CONTENT=76 77 | CONTEXT=77 78 | CONTINUE=78 79 | CONVERT=79 80 | CORRUPT_XID=80 81 | CORRUPT_XID_ALL=81 82 | COST=82 83 | COUNT=83 84 | CREATE=84 85 | CROSS=85 86 | CUBE=86 87 | CURRENT=87 88 | CURRENT_USER=88 89 | CURSOR=89 90 | CUSTOMDATUM=90 91 | CYCLE=91 92 | DATA=92 93 | DATABASE=93 94 | DATE=94 95 | DAY=95 96 | DB_ROLE_CHANGE=96 97 | DBTIMEZONE=97 98 | DDL=98 99 | DEBUG=99 100 | DEC=100 101 | DECIMAL=101 102 | DECLARE=102 103 | DECOMPOSE=103 104 | DECREMENT=104 105 | DEFAULT=105 106 | DEFAULTS=106 107 | DEFERRED=107 108 | DEFINER=108 109 | DELETE=109 110 | DEPTH=110 111 | DESC=111 112 | DETERMINISTIC=112 113 | DIMENSION=113 114 | DISABLE=114 115 | DISASSOCIATE=115 116 | DISTINCT=116 117 | DOCUMENT=117 118 | DOUBLE=118 119 | DROP=119 120 | DSINTERVAL_UNCONSTRAINED=120 121 | EACH=121 122 | ELEMENT=122 123 | ELSE=123 124 | ELSIF=124 125 | EMPTY=125 126 | ENABLE=126 127 | ENCODING=127 128 | END=128 129 | ENTITYESCAPING=129 130 | ERRORS=130 131 | ESCAPE=131 132 | EXCEPT=132 133 | EVALNAME=133 134 | EXCEPTION=134 135 | EXCEPTION_INIT=135 136 | EXCEPTIONS=136 137 | EXCLUDE=137 138 | EXCLUSIVE=138 139 | EXECUTE=139 140 | EXISTS=140 141 | EXIT=141 142 | EXPLAIN=142 143 | EXTERNAL=143 144 | EXTEND=144 145 | EXTRACT=145 146 | FAILURE=146 147 | FALSE=147 148 | FETCH=148 149 | FINAL=149 150 | FIRST=150 151 | FIRST_VALUE=151 152 | FLOAT=152 153 | FOLLOWING=153 154 | FOLLOWS=154 155 | FOR=155 156 | FORALL=156 157 | FORCE=157 158 | FROM=158 159 | FULL=159 160 | FUNCTION=160 161 | GOTO=161 162 | GRANT=162 163 | GROUP=163 164 | GROUPING=164 165 | HASH=165 166 | HAVING=166 167 | HIDE=167 168 | HOUR=168 169 | IF=169 170 | IGNORE=170 171 | IMMEDIATE=171 172 | IN=172 173 | INCLUDE=173 174 | INCLUDING=174 175 | INCREMENT=175 176 | INDENT=176 177 | INDEX=177 178 | INDEXED=178 179 | INDICATOR=179 180 | INDICES=180 181 | INFINITE=181 182 | INLINE=182 183 | INNER=183 184 | INOUT=184 185 | INSERT=185 186 | INSTANTIABLE=186 187 | INSTEAD=187 188 | INT=188 189 | INTEGER=189 190 | INTERSECT=190 191 | INTERVAL=191 192 | INTO=192 193 | INVALIDATE=193 194 | IS=194 195 | ISOLATION=195 196 | ITERATE=196 197 | JAVA=197 198 | JOIN=198 199 | KEEP=199 200 | LANGUAGE=200 201 | LAST=201 202 | LAST_VALUE=202 203 | LEADING=203 204 | LEFT=204 205 | LEVEL=205 206 | LIBRARY=206 207 | LIKE=207 208 | LIKE2=208 209 | LIKE4=209 210 | LIKEC=210 211 | LIMIT=211 212 | LOCAL=212 213 | LOCK=213 214 | LOCKED=214 215 | LOG=215 216 | LOGOFF=216 217 | LOGON=217 218 | LONG=218 219 | LOOP=219 220 | MAIN=220 221 | MAP=221 222 | MATCHED=222 223 | MAXVALUE=223 224 | MEASURES=224 225 | MEMBER=225 226 | MERGE=226 227 | MINUS=227 228 | MINUTE=228 229 | MINVALUE=229 230 | MLSLABEL=230 231 | MOD=231 232 | MODE=232 233 | MODEL=233 234 | MODIFY=234 235 | MONTH=235 236 | MULTISET=236 237 | NAME=237 238 | NAN=238 239 | NATURAL=239 240 | NATURALN=240 241 | NAV=241 242 | NCHAR=242 243 | NCHAR_CS=243 244 | NCLOB=244 245 | NESTED=245 246 | NEW=246 247 | NEXT=247 248 | NO=248 249 | NOAUDIT=249 250 | NOCACHE=250 251 | NOCOPY=251 252 | NOCYCLE=252 253 | NOENTITYESCAPING=253 254 | NOMAXVALUE=254 255 | NOMINVALUE=255 256 | NONE=256 257 | NOORDER=257 258 | NOSCHEMACHECK=258 259 | NOT=259 260 | NOWAIT=260 261 | NULL=261 262 | NULLS=262 263 | NUMBER=263 264 | NUMERIC=264 265 | NVARCHAR2=265 266 | OBJECT=266 267 | OF=267 268 | OFF=268 269 | OID=269 270 | OLD=270 271 | ON=271 272 | ONLY=272 273 | OPEN=273 274 | OPTION=274 275 | OR=275 276 | ORADATA=276 277 | ORDER=277 278 | ORDINALITY=278 279 | OSERROR=279 280 | OUT=280 281 | OUTER=281 282 | OVER=282 283 | OVERRIDING=283 284 | PACKAGE=284 285 | PARALLEL_ENABLE=285 286 | PARAMETERS=286 287 | PARENT=287 288 | PARTITION=288 289 | PASSING=289 290 | PATH=290 291 | PERCENT_ISOPEN=291 292 | PERCENT_ROWTYPE=292 293 | PERCENT_TYPE=293 294 | PERCENT_FOUND=294 295 | PERCENT_NOTFOUND=295 296 | PERCENT_ROWCOUNT=296 297 | PIPELINED=297 298 | PIPE=298 299 | PIVOT=299 300 | PLAN=300 301 | PLS_INTEGER=301 302 | POSITIVE=302 303 | POSITIVEN=303 304 | PRAGMA=304 305 | PRECEDING=305 306 | PRECISION=306 307 | PRESENT=307 308 | PRIOR=308 309 | PROCEDURE=309 310 | RAISE=310 311 | RANGE=311 312 | RAW=312 313 | READ=313 314 | REAL=314 315 | RECORD=315 316 | REF=316 317 | REFERENCE=317 318 | REFERENCING=318 319 | REJECT=319 320 | RELIES_ON=320 321 | RENAME=321 322 | REPLACE=322 323 | RESPECT=323 324 | RESTRICT_REFERENCES=324 325 | RESULT=325 326 | RESULT_CACHE=326 327 | RETURN=327 328 | RETURNING=328 329 | REUSE=329 330 | REVERSE=330 331 | REVOKE=331 332 | RIGHT=332 333 | ROLLBACK=333 334 | ROLLUP=334 335 | ROW=335 336 | ROWID=336 337 | ROWS=337 338 | RULES=338 339 | SAMPLE=339 340 | SAVE=340 341 | SAVEPOINT=341 342 | SCHEMA=342 343 | SCHEMACHECK=343 344 | SCN=344 345 | SEARCH=345 346 | SECOND=346 347 | SEED=347 348 | SEGMENT=348 349 | SELECT=349 350 | SELF=350 351 | SEQUENCE=351 352 | SEQUENTIAL=352 353 | SERIALIZABLE=353 354 | SERIALLY_REUSABLE=354 355 | SERVERERROR=355 356 | SESSIONTIMEZONE=356 357 | SET=357 358 | SETS=358 359 | SETTINGS=359 360 | SHARE=360 361 | SHOW=361 362 | SHUTDOWN=362 363 | SIBLINGS=363 364 | SIGNTYPE=364 365 | SIMPLE_INTEGER=365 366 | SINGLE=366 367 | SIZE=367 368 | SKIP_=368 369 | SMALLINT=369 370 | SNAPSHOT=370 371 | SOME=371 372 | SPECIFICATION=372 373 | SQLDATA=373 374 | SQLERROR=374 375 | SQL_PERCENT_ROWCOUNT=375 376 | STANDALONE=376 377 | START=377 378 | STARTUP=378 379 | STATEMENT=379 380 | STATEMENT_ID=380 381 | STATIC=381 382 | STATISTICS=382 383 | STRING=383 384 | SUBMULTISET=384 385 | SUBPARTITION=385 386 | SUBSTITUTABLE=386 387 | SUBTYPE=387 388 | SUCCESS=388 389 | SUSPEND=389 390 | TABLE=390 391 | THE=391 392 | THEN=392 393 | TIME=393 394 | TIMESTAMP=394 395 | TIMESTAMP_LTZ_UNCONSTRAINED=395 396 | TIMESTAMP_TZ_UNCONSTRAINED=396 397 | TIMESTAMP_UNCONSTRAINED=397 398 | TIMEZONE_ABBR=398 399 | TIMEZONE_HOUR=399 400 | TIMEZONE_MINUTE=400 401 | TIMEZONE_REGION=401 402 | TO=402 403 | TO_CHAR=403 404 | TO_NUMBER=404 405 | TRAILING=405 406 | TRANSACTION=406 407 | TRANSLATE=407 408 | TREAT=408 409 | TRIGGER=409 410 | TRIM=410 411 | TRUE=411 412 | TRUNCATE=412 413 | TYPE=413 414 | UNBOUNDED=414 415 | UNDER=415 416 | UNION=416 417 | UNIQUE=417 418 | UNLIMITED=418 419 | UNPIVOT=419 420 | UNTIL=420 421 | UPDATE=421 422 | UPDATED=422 423 | UPSERT=423 424 | UROWID=424 425 | USE=425 426 | USING=426 427 | VALIDATE=427 428 | VALUE=428 429 | VALUES=429 430 | VARCHAR=430 431 | VARCHAR2=431 432 | VARIABLE=432 433 | VARRAY=433 434 | VARYING=434 435 | VERSION=435 436 | VERSIONS=436 437 | WAIT=437 438 | WARNING=438 439 | WELLFORMED=439 440 | WHEN=440 441 | WHENEVER=441 442 | WHERE=442 443 | WHILE=443 444 | WITH=444 445 | WITHIN=445 446 | WORK=446 447 | WRITE=447 448 | XML=448 449 | XMLAGG=449 450 | XMLATTRIBUTES=450 451 | XMLCAST=451 452 | XMLCOLATTVAL=452 453 | XMLELEMENT=453 454 | XMLEXISTS=454 455 | XMLFOREST=455 456 | XMLNAMESPACES=456 457 | XMLPARSE=457 458 | XMLPI=458 459 | XMLQUERY=459 460 | XMLROOT=460 461 | XMLSERIALIZE=461 462 | XMLTABLE=462 463 | YEAR=463 464 | YES=464 465 | YMINTERVAL_UNCONSTRAINED=465 466 | ZONE=466 467 | PREDICTION=467 468 | PREDICTION_BOUNDS=468 469 | PREDICTION_COST=469 470 | PREDICTION_DETAILS=470 471 | PREDICTION_PROBABILITY=471 472 | PREDICTION_SET=472 473 | CUME_DIST=473 474 | DENSE_RANK=474 475 | LISTAGG=475 476 | PERCENT_RANK=476 477 | PERCENTILE_CONT=477 478 | PERCENTILE_DISC=478 479 | RANK=479 480 | AVG=480 481 | CORR=481 482 | LAG=482 483 | LEAD=483 484 | MAX=484 485 | MEDIAN=485 486 | MIN=486 487 | NTILE=487 488 | RATIO_TO_REPORT=488 489 | ROW_NUMBER=489 490 | SUM=490 491 | VARIANCE=491 492 | REGR_=492 493 | STDDEV=493 494 | VAR_=494 495 | COVAR_=495 496 | PROMPT=496 497 | NATIONAL_CHAR_STRING_LIT=497 498 | BIT_STRING_LIT=498 499 | HEX_STRING_LIT=499 500 | DOUBLE_PERIOD=500 501 | PERIOD=501 502 | UNSIGNED_INTEGER=502 503 | APPROXIMATE_NUM_LIT=503 504 | CHAR_STRING=504 505 | DELIMITED_ID=505 506 | PERCENT=506 507 | AMPERSAND=507 508 | LEFT_PAREN=508 509 | RIGHT_PAREN=509 510 | DOUBLE_ASTERISK=510 511 | ASTERISK=511 512 | PLUS_SIGN=512 513 | MINUS_SIGN=513 514 | COMMA=514 515 | SOLIDUS=515 516 | AT_SIGN=516 517 | ASSIGN_OP=517 518 | BINDVAR=518 519 | COLON=519 520 | SEMICOLON=520 521 | LESS_THAN_OR_EQUALS_OP=521 522 | LESS_THAN_OP=522 523 | GREATER_THAN_OR_EQUALS_OP=523 524 | NOT_EQUAL_OP=524 525 | CARRET_OPERATOR_PART=525 526 | TILDE_OPERATOR_PART=526 527 | EXCLAMATION_OPERATOR_PART=527 528 | GREATER_THAN_OP=528 529 | CONCATENATION_OP=529 530 | VERTICAL_BAR=530 531 | EQUALS_OP=531 532 | LEFT_BRACKET=532 533 | RIGHT_BRACKET=533 534 | INTRODUCER=534 535 | SPACES=535 536 | SINGLE_LINE_COMMENT=536 537 | MULTI_LINE_COMMENT=537 538 | SQL92_RESERVED_ALL=538 539 | SQL92_RESERVED_ALTER=539 540 | SQL92_RESERVED_AND=540 541 | SQL92_RESERVED_ANY=541 542 | SQL92_RESERVED_AS=542 543 | SQL92_RESERVED_ASC=543 544 | SQL92_RESERVED_BEGIN=544 545 | SQL92_RESERVED_BETWEEN=545 546 | SQL92_RESERVED_BY=546 547 | SQL92_RESERVED_CASE=547 548 | SQL92_RESERVED_CHECK=548 549 | PLSQL_RESERVED_CLUSTERS=549 550 | PLSQL_RESERVED_COLAUTH=550 551 | PLSQL_RESERVED_COMPRESS=551 552 | SQL92_RESERVED_CONNECT=552 553 | PLSQL_NON_RESERVED_CONNECT_BY_ROOT=553 554 | PLSQL_RESERVED_CRASH=554 555 | SQL92_RESERVED_CREATE=555 556 | SQL92_RESERVED_CURRENT=556 557 | SQL92_RESERVED_CURSOR=557 558 | SQL92_RESERVED_DATE=558 559 | SQL92_RESERVED_DECLARE=559 560 | SQL92_RESERVED_DEFAULT=560 561 | SQL92_RESERVED_DELETE=561 562 | SQL92_RESERVED_DESC=562 563 | SQL92_RESERVED_DISTINCT=563 564 | SQL92_RESERVED_DROP=564 565 | SQL92_RESERVED_ELSE=565 566 | SQL92_RESERVED_END=566 567 | SQL92_RESERVED_EXCEPTION=567 568 | PLSQL_RESERVED_EXCLUSIVE=568 569 | SQL92_RESERVED_EXISTS=569 570 | SQL92_RESERVED_FALSE=570 571 | SQL92_RESERVED_FETCH=571 572 | SQL92_RESERVED_FOR=572 573 | SQL92_RESERVED_FROM=573 574 | SQL92_RESERVED_GOTO=574 575 | SQL92_RESERVED_GRANT=575 576 | SQL92_RESERVED_GROUP=576 577 | SQL92_RESERVED_HAVING=577 578 | PLSQL_RESERVED_IDENTIFIED=578 579 | PLSQL_RESERVED_IF=579 580 | SQL92_RESERVED_IN=580 581 | PLSQL_RESERVED_INDEX=581 582 | PLSQL_RESERVED_INDEXES=582 583 | SQL92_RESERVED_INSERT=583 584 | SQL92_RESERVED_INTERSECT=584 585 | SQL92_RESERVED_INTO=585 586 | SQL92_RESERVED_IS=586 587 | SQL92_RESERVED_LIKE=587 588 | PLSQL_RESERVED_LOCK=588 589 | PLSQL_RESERVED_MINUS=589 590 | PLSQL_RESERVED_MODE=590 591 | PLSQL_RESERVED_NOCOMPRESS=591 592 | SQL92_RESERVED_NOT=592 593 | PLSQL_RESERVED_NOWAIT=593 594 | SQL92_RESERVED_NULL=594 595 | SQL92_RESERVED_OF=595 596 | SQL92_RESERVED_ON=596 597 | SQL92_RESERVED_OPTION=597 598 | SQL92_RESERVED_OR=598 599 | SQL92_RESERVED_ORDER=599 600 | SQL92_RESERVED_OVERLAPS=600 601 | SQL92_RESERVED_PRIOR=601 602 | SQL92_RESERVED_PROCEDURE=602 603 | SQL92_RESERVED_PUBLIC=603 604 | PLSQL_RESERVED_RESOURCE=604 605 | SQL92_RESERVED_REVOKE=605 606 | SQL92_RESERVED_SELECT=606 607 | PLSQL_RESERVED_SHARE=607 608 | SQL92_RESERVED_SIZE=608 609 | PLSQL_RESERVED_START=609 610 | PLSQL_RESERVED_TABAUTH=610 611 | SQL92_RESERVED_TABLE=611 612 | SQL92_RESERVED_THE=612 613 | SQL92_RESERVED_THEN=613 614 | SQL92_RESERVED_TO=614 615 | SQL92_RESERVED_TRUE=615 616 | SQL92_RESERVED_UNION=616 617 | SQL92_RESERVED_UNIQUE=617 618 | SQL92_RESERVED_UPDATE=618 619 | SQL92_RESERVED_VALUES=619 620 | SQL92_RESERVED_VIEW=620 621 | PLSQL_RESERVED_VIEWS=621 622 | SQL92_RESERVED_WHEN=622 623 | SQL92_RESERVED_WHERE=623 624 | SQL92_RESERVED_WITH=624 625 | PLSQL_NON_RESERVED_USING=625 626 | PLSQL_NON_RESERVED_MODEL=626 627 | PLSQL_NON_RESERVED_ELSIF=627 628 | PLSQL_NON_RESERVED_PIVOT=628 629 | PLSQL_NON_RESERVED_UNPIVOT=629 630 | REGULAR_ID=630 631 | ZV=631 632 | '..'=1 633 | '=>'=22 634 | '.'=501 635 | '%'=506 636 | '&'=507 637 | '('=508 638 | ')'=509 639 | '**'=510 640 | '*'=511 641 | '+'=512 642 | '-'=513 643 | ','=514 644 | '/'=515 645 | '@'=516 646 | ':='=517 647 | ':'=519 648 | ';'=520 649 | '<='=521 650 | '<'=522 651 | '>='=523 652 | '^'=525 653 | '~'=526 654 | '!'=527 655 | '>'=528 656 | '||'=529 657 | '|'=530 658 | '='=531 659 | '['=532 660 | ']'=533 661 | '_'=534 662 | 'all'=538 663 | 'alter'=539 664 | 'and'=540 665 | 'any'=541 666 | 'as'=542 667 | 'asc'=543 668 | 'begin'=544 669 | 'between'=545 670 | 'by'=546 671 | 'case'=547 672 | 'check'=548 673 | 'clusters'=549 674 | 'colauth'=550 675 | 'compress'=551 676 | 'connect'=552 677 | 'connect_by_root'=553 678 | 'crash'=554 679 | 'create'=555 680 | 'current'=556 681 | 'cursor'=557 682 | 'date'=558 683 | 'declare'=559 684 | 'default'=560 685 | 'delete'=561 686 | 'desc'=562 687 | 'distinct'=563 688 | 'drop'=564 689 | 'else'=565 690 | 'end'=566 691 | 'exception'=567 692 | 'exclusive'=568 693 | 'exists'=569 694 | 'false'=570 695 | 'fetch'=571 696 | 'for'=572 697 | 'from'=573 698 | 'goto'=574 699 | 'grant'=575 700 | 'group'=576 701 | 'having'=577 702 | 'identified'=578 703 | 'if'=579 704 | 'in'=580 705 | 'index'=581 706 | 'indexes'=582 707 | 'insert'=583 708 | 'intersect'=584 709 | 'into'=585 710 | 'is'=586 711 | 'like'=587 712 | 'lock'=588 713 | 'minus'=589 714 | 'mode'=590 715 | 'nocompress'=591 716 | 'not'=592 717 | 'nowait'=593 718 | 'null'=594 719 | 'of'=595 720 | 'on'=596 721 | 'option'=597 722 | 'or'=598 723 | 'order'=599 724 | 'overlaps'=600 725 | 'prior'=601 726 | 'procedure'=602 727 | 'public'=603 728 | 'resource'=604 729 | 'revoke'=605 730 | 'select'=606 731 | 'share'=607 732 | 'size'=608 733 | 'start'=609 734 | 'tabauth'=610 735 | 'table'=611 736 | 'the'=612 737 | 'then'=613 738 | 'to'=614 739 | 'true'=615 740 | 'union'=616 741 | 'unique'=617 742 | 'update'=618 743 | 'values'=619 744 | 'view'=620 745 | 'views'=621 746 | 'when'=622 747 | 'where'=623 748 | 'with'=624 749 | 'using'=625 750 | 'model'=626 751 | 'elsif'=627 752 | 'pivot'=628 753 | 'unpivot'=629 754 | '@!'=631 755 | -------------------------------------------------------------------------------- /csharp/src/PlSqlLexer.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | PP_IF=2 3 | PP_THEN=3 4 | PP_ELSE=4 5 | PP_ELSIF=5 6 | PP_END=6 7 | PP_ERROR=7 8 | A_LETTER=8 9 | ADD=9 10 | AFTER=10 11 | AGENT=11 12 | AGGREGATE=12 13 | ALL=13 14 | ALTER=14 15 | ANALYZE=15 16 | AND=16 17 | ANY=17 18 | ARRAY=18 19 | AS=19 20 | ASC=20 21 | ASSOCIATE=21 22 | ASSOCIATION_OPERATOR=22 23 | AT=23 24 | ATTRIBUTE=24 25 | AUDIT=25 26 | AUTHID=26 27 | AUTO=27 28 | AUTOMATIC=28 29 | AUTONOMOUS_TRANSACTION=29 30 | BATCH=30 31 | BEFORE=31 32 | BEGIN=32 33 | BETWEEN=33 34 | BFILE=34 35 | BINARY_DOUBLE=35 36 | BINARY_FLOAT=36 37 | BINARY_INTEGER=37 38 | BLOB=38 39 | BLOCK=39 40 | BODY=40 41 | BOOLEAN=41 42 | BOTH=42 43 | BREADTH=43 44 | BULK=44 45 | BY=45 46 | BYTE=46 47 | C_LETTER=47 48 | CACHE=48 49 | CALL=49 50 | CANONICAL=50 51 | CASCADE=51 52 | CASE=52 53 | CAST=53 54 | CHAR=54 55 | CHAR_CS=55 56 | CHARACTER=56 57 | CHECK=57 58 | CHR=58 59 | CLOB=59 60 | CLOSE=60 61 | CLUSTER=61 62 | COLLECT=62 63 | COLUMNS=63 64 | COMMENT=64 65 | COMMIT=65 66 | COMMITTED=66 67 | COMPATIBILITY=67 68 | COMPILE=68 69 | COMPOUND=69 70 | CONNECT=70 71 | CONNECT_BY_ROOT=71 72 | CONSTANT=72 73 | CONSTRAINT=73 74 | CONSTRAINTS=74 75 | CONSTRUCTOR=75 76 | CONTENT=76 77 | CONTEXT=77 78 | CONTINUE=78 79 | CONVERT=79 80 | CORRUPT_XID=80 81 | CORRUPT_XID_ALL=81 82 | COST=82 83 | COUNT=83 84 | CREATE=84 85 | CROSS=85 86 | CUBE=86 87 | CURRENT=87 88 | CURRENT_USER=88 89 | CURSOR=89 90 | CUSTOMDATUM=90 91 | CYCLE=91 92 | DATA=92 93 | DATABASE=93 94 | DATE=94 95 | DAY=95 96 | DB_ROLE_CHANGE=96 97 | DBTIMEZONE=97 98 | DDL=98 99 | DEBUG=99 100 | DEC=100 101 | DECIMAL=101 102 | DECLARE=102 103 | DECOMPOSE=103 104 | DECREMENT=104 105 | DEFAULT=105 106 | DEFAULTS=106 107 | DEFERRED=107 108 | DEFINER=108 109 | DELETE=109 110 | DEPTH=110 111 | DESC=111 112 | DETERMINISTIC=112 113 | DIMENSION=113 114 | DISABLE=114 115 | DISASSOCIATE=115 116 | DISTINCT=116 117 | DOCUMENT=117 118 | DOUBLE=118 119 | DROP=119 120 | DSINTERVAL_UNCONSTRAINED=120 121 | EACH=121 122 | ELEMENT=122 123 | ELSE=123 124 | ELSIF=124 125 | EMPTY=125 126 | ENABLE=126 127 | ENCODING=127 128 | END=128 129 | ENTITYESCAPING=129 130 | ERRORS=130 131 | ESCAPE=131 132 | EXCEPT=132 133 | EVALNAME=133 134 | EXCEPTION=134 135 | EXCEPTION_INIT=135 136 | EXCEPTIONS=136 137 | EXCLUDE=137 138 | EXCLUSIVE=138 139 | EXECUTE=139 140 | EXISTS=140 141 | EXIT=141 142 | EXPLAIN=142 143 | EXTERNAL=143 144 | EXTEND=144 145 | EXTRACT=145 146 | FAILURE=146 147 | FALSE=147 148 | FETCH=148 149 | FINAL=149 150 | FIRST=150 151 | FIRST_VALUE=151 152 | FLOAT=152 153 | FOLLOWING=153 154 | FOLLOWS=154 155 | FOR=155 156 | FORALL=156 157 | FORCE=157 158 | FROM=158 159 | FULL=159 160 | FUNCTION=160 161 | GOTO=161 162 | GRANT=162 163 | GROUP=163 164 | GROUPING=164 165 | HASH=165 166 | HAVING=166 167 | HIDE=167 168 | HOUR=168 169 | IF=169 170 | IGNORE=170 171 | IMMEDIATE=171 172 | IN=172 173 | INCLUDE=173 174 | INCLUDING=174 175 | INCREMENT=175 176 | INDENT=176 177 | INDEX=177 178 | INDEXED=178 179 | INDICATOR=179 180 | INDICES=180 181 | INFINITE=181 182 | INLINE=182 183 | INNER=183 184 | INOUT=184 185 | INSERT=185 186 | INSTANTIABLE=186 187 | INSTEAD=187 188 | INT=188 189 | INTEGER=189 190 | INTERSECT=190 191 | INTERVAL=191 192 | INTO=192 193 | INVALIDATE=193 194 | IS=194 195 | ISOLATION=195 196 | ITERATE=196 197 | JAVA=197 198 | JOIN=198 199 | KEEP=199 200 | LANGUAGE=200 201 | LAST=201 202 | LAST_VALUE=202 203 | LEADING=203 204 | LEFT=204 205 | LEVEL=205 206 | LIBRARY=206 207 | LIKE=207 208 | LIKE2=208 209 | LIKE4=209 210 | LIKEC=210 211 | LIMIT=211 212 | LOCAL=212 213 | LOCK=213 214 | LOCKED=214 215 | LOG=215 216 | LOGOFF=216 217 | LOGON=217 218 | LONG=218 219 | LOOP=219 220 | MAIN=220 221 | MAP=221 222 | MATCHED=222 223 | MAXVALUE=223 224 | MEASURES=224 225 | MEMBER=225 226 | MERGE=226 227 | MINUS=227 228 | MINUTE=228 229 | MINVALUE=229 230 | MLSLABEL=230 231 | MOD=231 232 | MODE=232 233 | MODEL=233 234 | MODIFY=234 235 | MONTH=235 236 | MULTISET=236 237 | NAME=237 238 | NAN=238 239 | NATURAL=239 240 | NATURALN=240 241 | NAV=241 242 | NCHAR=242 243 | NCHAR_CS=243 244 | NCLOB=244 245 | NESTED=245 246 | NEW=246 247 | NEXT=247 248 | NO=248 249 | NOAUDIT=249 250 | NOCACHE=250 251 | NOCOPY=251 252 | NOCYCLE=252 253 | NOENTITYESCAPING=253 254 | NOMAXVALUE=254 255 | NOMINVALUE=255 256 | NONE=256 257 | NOORDER=257 258 | NOSCHEMACHECK=258 259 | NOT=259 260 | NOWAIT=260 261 | NULL=261 262 | NULLS=262 263 | NUMBER=263 264 | NUMERIC=264 265 | NVARCHAR2=265 266 | OBJECT=266 267 | OF=267 268 | OFF=268 269 | OID=269 270 | OLD=270 271 | ON=271 272 | ONLY=272 273 | OPEN=273 274 | OPTION=274 275 | OR=275 276 | ORADATA=276 277 | ORDER=277 278 | ORDINALITY=278 279 | OSERROR=279 280 | OUT=280 281 | OUTER=281 282 | OVER=282 283 | OVERRIDING=283 284 | PACKAGE=284 285 | PARALLEL_ENABLE=285 286 | PARAMETERS=286 287 | PARENT=287 288 | PARTITION=288 289 | PASSING=289 290 | PATH=290 291 | PERCENT_ISOPEN=291 292 | PERCENT_ROWTYPE=292 293 | PERCENT_TYPE=293 294 | PERCENT_FOUND=294 295 | PERCENT_NOTFOUND=295 296 | PERCENT_ROWCOUNT=296 297 | PIPELINED=297 298 | PIPE=298 299 | PIVOT=299 300 | PLAN=300 301 | PLS_INTEGER=301 302 | POSITIVE=302 303 | POSITIVEN=303 304 | PRAGMA=304 305 | PRECEDING=305 306 | PRECISION=306 307 | PRESENT=307 308 | PRIOR=308 309 | PROCEDURE=309 310 | RAISE=310 311 | RANGE=311 312 | RAW=312 313 | READ=313 314 | REAL=314 315 | RECORD=315 316 | REF=316 317 | REFERENCE=317 318 | REFERENCING=318 319 | REJECT=319 320 | RELIES_ON=320 321 | RENAME=321 322 | REPLACE=322 323 | RESPECT=323 324 | RESTRICT_REFERENCES=324 325 | RESULT=325 326 | RESULT_CACHE=326 327 | RETURN=327 328 | RETURNING=328 329 | REUSE=329 330 | REVERSE=330 331 | REVOKE=331 332 | RIGHT=332 333 | ROLLBACK=333 334 | ROLLUP=334 335 | ROW=335 336 | ROWID=336 337 | ROWS=337 338 | RULES=338 339 | SAMPLE=339 340 | SAVE=340 341 | SAVEPOINT=341 342 | SCHEMA=342 343 | SCHEMACHECK=343 344 | SCN=344 345 | SEARCH=345 346 | SECOND=346 347 | SEED=347 348 | SEGMENT=348 349 | SELECT=349 350 | SELF=350 351 | SEQUENCE=351 352 | SEQUENTIAL=352 353 | SERIALIZABLE=353 354 | SERIALLY_REUSABLE=354 355 | SERVERERROR=355 356 | SESSIONTIMEZONE=356 357 | SET=357 358 | SETS=358 359 | SETTINGS=359 360 | SHARE=360 361 | SHOW=361 362 | SHUTDOWN=362 363 | SIBLINGS=363 364 | SIGNTYPE=364 365 | SIMPLE_INTEGER=365 366 | SINGLE=366 367 | SIZE=367 368 | SKIP_=368 369 | SMALLINT=369 370 | SNAPSHOT=370 371 | SOME=371 372 | SPECIFICATION=372 373 | SQLDATA=373 374 | SQLERROR=374 375 | SQL_PERCENT_ROWCOUNT=375 376 | STANDALONE=376 377 | START=377 378 | STARTUP=378 379 | STATEMENT=379 380 | STATEMENT_ID=380 381 | STATIC=381 382 | STATISTICS=382 383 | STRING=383 384 | SUBMULTISET=384 385 | SUBPARTITION=385 386 | SUBSTITUTABLE=386 387 | SUBTYPE=387 388 | SUCCESS=388 389 | SUSPEND=389 390 | TABLE=390 391 | THE=391 392 | THEN=392 393 | TIME=393 394 | TIMESTAMP=394 395 | TIMESTAMP_LTZ_UNCONSTRAINED=395 396 | TIMESTAMP_TZ_UNCONSTRAINED=396 397 | TIMESTAMP_UNCONSTRAINED=397 398 | TIMEZONE_ABBR=398 399 | TIMEZONE_HOUR=399 400 | TIMEZONE_MINUTE=400 401 | TIMEZONE_REGION=401 402 | TO=402 403 | TO_CHAR=403 404 | TO_NUMBER=404 405 | TRAILING=405 406 | TRANSACTION=406 407 | TRANSLATE=407 408 | TREAT=408 409 | TRIGGER=409 410 | TRIM=410 411 | TRUE=411 412 | TRUNCATE=412 413 | TYPE=413 414 | UNBOUNDED=414 415 | UNDER=415 416 | UNION=416 417 | UNIQUE=417 418 | UNLIMITED=418 419 | UNPIVOT=419 420 | UNTIL=420 421 | UPDATE=421 422 | UPDATED=422 423 | UPSERT=423 424 | UROWID=424 425 | USE=425 426 | USING=426 427 | VALIDATE=427 428 | VALUE=428 429 | VALUES=429 430 | VARCHAR=430 431 | VARCHAR2=431 432 | VARIABLE=432 433 | VARRAY=433 434 | VARYING=434 435 | VERSION=435 436 | VERSIONS=436 437 | WAIT=437 438 | WARNING=438 439 | WELLFORMED=439 440 | WHEN=440 441 | WHENEVER=441 442 | WHERE=442 443 | WHILE=443 444 | WITH=444 445 | WITHIN=445 446 | WORK=446 447 | WRITE=447 448 | XML=448 449 | XMLAGG=449 450 | XMLATTRIBUTES=450 451 | XMLCAST=451 452 | XMLCOLATTVAL=452 453 | XMLELEMENT=453 454 | XMLEXISTS=454 455 | XMLFOREST=455 456 | XMLNAMESPACES=456 457 | XMLPARSE=457 458 | XMLPI=458 459 | XMLQUERY=459 460 | XMLROOT=460 461 | XMLSERIALIZE=461 462 | XMLTABLE=462 463 | YEAR=463 464 | YES=464 465 | YMINTERVAL_UNCONSTRAINED=465 466 | ZONE=466 467 | PREDICTION=467 468 | PREDICTION_BOUNDS=468 469 | PREDICTION_COST=469 470 | PREDICTION_DETAILS=470 471 | PREDICTION_PROBABILITY=471 472 | PREDICTION_SET=472 473 | CUME_DIST=473 474 | DENSE_RANK=474 475 | LISTAGG=475 476 | PERCENT_RANK=476 477 | PERCENTILE_CONT=477 478 | PERCENTILE_DISC=478 479 | RANK=479 480 | AVG=480 481 | CORR=481 482 | LAG=482 483 | LEAD=483 484 | MAX=484 485 | MEDIAN=485 486 | MIN=486 487 | NTILE=487 488 | RATIO_TO_REPORT=488 489 | ROW_NUMBER=489 490 | SUM=490 491 | VARIANCE=491 492 | REGR_=492 493 | STDDEV=493 494 | VAR_=494 495 | COVAR_=495 496 | PROMPT=496 497 | NATIONAL_CHAR_STRING_LIT=497 498 | BIT_STRING_LIT=498 499 | HEX_STRING_LIT=499 500 | DOUBLE_PERIOD=500 501 | PERIOD=501 502 | UNSIGNED_INTEGER=502 503 | APPROXIMATE_NUM_LIT=503 504 | CHAR_STRING=504 505 | DELIMITED_ID=505 506 | PERCENT=506 507 | AMPERSAND=507 508 | LEFT_PAREN=508 509 | RIGHT_PAREN=509 510 | DOUBLE_ASTERISK=510 511 | ASTERISK=511 512 | PLUS_SIGN=512 513 | MINUS_SIGN=513 514 | COMMA=514 515 | SOLIDUS=515 516 | AT_SIGN=516 517 | ASSIGN_OP=517 518 | BINDVAR=518 519 | COLON=519 520 | SEMICOLON=520 521 | LESS_THAN_OR_EQUALS_OP=521 522 | LESS_THAN_OP=522 523 | GREATER_THAN_OR_EQUALS_OP=523 524 | NOT_EQUAL_OP=524 525 | CARRET_OPERATOR_PART=525 526 | TILDE_OPERATOR_PART=526 527 | EXCLAMATION_OPERATOR_PART=527 528 | GREATER_THAN_OP=528 529 | CONCATENATION_OP=529 530 | VERTICAL_BAR=530 531 | EQUALS_OP=531 532 | LEFT_BRACKET=532 533 | RIGHT_BRACKET=533 534 | INTRODUCER=534 535 | SPACES=535 536 | SINGLE_LINE_COMMENT=536 537 | MULTI_LINE_COMMENT=537 538 | SQL92_RESERVED_ALL=538 539 | SQL92_RESERVED_ALTER=539 540 | SQL92_RESERVED_AND=540 541 | SQL92_RESERVED_ANY=541 542 | SQL92_RESERVED_AS=542 543 | SQL92_RESERVED_ASC=543 544 | SQL92_RESERVED_BEGIN=544 545 | SQL92_RESERVED_BETWEEN=545 546 | SQL92_RESERVED_BY=546 547 | SQL92_RESERVED_CASE=547 548 | SQL92_RESERVED_CHECK=548 549 | PLSQL_RESERVED_CLUSTERS=549 550 | PLSQL_RESERVED_COLAUTH=550 551 | PLSQL_RESERVED_COMPRESS=551 552 | SQL92_RESERVED_CONNECT=552 553 | PLSQL_NON_RESERVED_CONNECT_BY_ROOT=553 554 | PLSQL_RESERVED_CRASH=554 555 | SQL92_RESERVED_CREATE=555 556 | SQL92_RESERVED_CURRENT=556 557 | SQL92_RESERVED_CURSOR=557 558 | SQL92_RESERVED_DATE=558 559 | SQL92_RESERVED_DECLARE=559 560 | SQL92_RESERVED_DEFAULT=560 561 | SQL92_RESERVED_DELETE=561 562 | SQL92_RESERVED_DESC=562 563 | SQL92_RESERVED_DISTINCT=563 564 | SQL92_RESERVED_DROP=564 565 | SQL92_RESERVED_ELSE=565 566 | SQL92_RESERVED_END=566 567 | SQL92_RESERVED_EXCEPTION=567 568 | PLSQL_RESERVED_EXCLUSIVE=568 569 | SQL92_RESERVED_EXISTS=569 570 | SQL92_RESERVED_FALSE=570 571 | SQL92_RESERVED_FETCH=571 572 | SQL92_RESERVED_FOR=572 573 | SQL92_RESERVED_FROM=573 574 | SQL92_RESERVED_GOTO=574 575 | SQL92_RESERVED_GRANT=575 576 | SQL92_RESERVED_GROUP=576 577 | SQL92_RESERVED_HAVING=577 578 | PLSQL_RESERVED_IDENTIFIED=578 579 | PLSQL_RESERVED_IF=579 580 | SQL92_RESERVED_IN=580 581 | PLSQL_RESERVED_INDEX=581 582 | PLSQL_RESERVED_INDEXES=582 583 | SQL92_RESERVED_INSERT=583 584 | SQL92_RESERVED_INTERSECT=584 585 | SQL92_RESERVED_INTO=585 586 | SQL92_RESERVED_IS=586 587 | SQL92_RESERVED_LIKE=587 588 | PLSQL_RESERVED_LOCK=588 589 | PLSQL_RESERVED_MINUS=589 590 | PLSQL_RESERVED_MODE=590 591 | PLSQL_RESERVED_NOCOMPRESS=591 592 | SQL92_RESERVED_NOT=592 593 | PLSQL_RESERVED_NOWAIT=593 594 | SQL92_RESERVED_NULL=594 595 | SQL92_RESERVED_OF=595 596 | SQL92_RESERVED_ON=596 597 | SQL92_RESERVED_OPTION=597 598 | SQL92_RESERVED_OR=598 599 | SQL92_RESERVED_ORDER=599 600 | SQL92_RESERVED_OVERLAPS=600 601 | SQL92_RESERVED_PRIOR=601 602 | SQL92_RESERVED_PROCEDURE=602 603 | SQL92_RESERVED_PUBLIC=603 604 | PLSQL_RESERVED_RESOURCE=604 605 | SQL92_RESERVED_REVOKE=605 606 | SQL92_RESERVED_SELECT=606 607 | PLSQL_RESERVED_SHARE=607 608 | SQL92_RESERVED_SIZE=608 609 | PLSQL_RESERVED_START=609 610 | PLSQL_RESERVED_TABAUTH=610 611 | SQL92_RESERVED_TABLE=611 612 | SQL92_RESERVED_THE=612 613 | SQL92_RESERVED_THEN=613 614 | SQL92_RESERVED_TO=614 615 | SQL92_RESERVED_TRUE=615 616 | SQL92_RESERVED_UNION=616 617 | SQL92_RESERVED_UNIQUE=617 618 | SQL92_RESERVED_UPDATE=618 619 | SQL92_RESERVED_VALUES=619 620 | SQL92_RESERVED_VIEW=620 621 | PLSQL_RESERVED_VIEWS=621 622 | SQL92_RESERVED_WHEN=622 623 | SQL92_RESERVED_WHERE=623 624 | SQL92_RESERVED_WITH=624 625 | PLSQL_NON_RESERVED_USING=625 626 | PLSQL_NON_RESERVED_MODEL=626 627 | PLSQL_NON_RESERVED_ELSIF=627 628 | PLSQL_NON_RESERVED_PIVOT=628 629 | PLSQL_NON_RESERVED_UNPIVOT=629 630 | REGULAR_ID=630 631 | ZV=631 632 | '..'=1 633 | '=>'=22 634 | '.'=501 635 | '%'=506 636 | '&'=507 637 | '('=508 638 | ')'=509 639 | '**'=510 640 | '*'=511 641 | '+'=512 642 | '-'=513 643 | ','=514 644 | '/'=515 645 | '@'=516 646 | ':='=517 647 | ':'=519 648 | ';'=520 649 | '<='=521 650 | '<'=522 651 | '>='=523 652 | '^'=525 653 | '~'=526 654 | '!'=527 655 | '>'=528 656 | '||'=529 657 | '|'=530 658 | '='=531 659 | '['=532 660 | ']'=533 661 | '_'=534 662 | 'all'=538 663 | 'alter'=539 664 | 'and'=540 665 | 'any'=541 666 | 'as'=542 667 | 'asc'=543 668 | 'begin'=544 669 | 'between'=545 670 | 'by'=546 671 | 'case'=547 672 | 'check'=548 673 | 'clusters'=549 674 | 'colauth'=550 675 | 'compress'=551 676 | 'connect'=552 677 | 'connect_by_root'=553 678 | 'crash'=554 679 | 'create'=555 680 | 'current'=556 681 | 'cursor'=557 682 | 'date'=558 683 | 'declare'=559 684 | 'default'=560 685 | 'delete'=561 686 | 'desc'=562 687 | 'distinct'=563 688 | 'drop'=564 689 | 'else'=565 690 | 'end'=566 691 | 'exception'=567 692 | 'exclusive'=568 693 | 'exists'=569 694 | 'false'=570 695 | 'fetch'=571 696 | 'for'=572 697 | 'from'=573 698 | 'goto'=574 699 | 'grant'=575 700 | 'group'=576 701 | 'having'=577 702 | 'identified'=578 703 | 'if'=579 704 | 'in'=580 705 | 'index'=581 706 | 'indexes'=582 707 | 'insert'=583 708 | 'intersect'=584 709 | 'into'=585 710 | 'is'=586 711 | 'like'=587 712 | 'lock'=588 713 | 'minus'=589 714 | 'mode'=590 715 | 'nocompress'=591 716 | 'not'=592 717 | 'nowait'=593 718 | 'null'=594 719 | 'of'=595 720 | 'on'=596 721 | 'option'=597 722 | 'or'=598 723 | 'order'=599 724 | 'overlaps'=600 725 | 'prior'=601 726 | 'procedure'=602 727 | 'public'=603 728 | 'resource'=604 729 | 'revoke'=605 730 | 'select'=606 731 | 'share'=607 732 | 'size'=608 733 | 'start'=609 734 | 'tabauth'=610 735 | 'table'=611 736 | 'the'=612 737 | 'then'=613 738 | 'to'=614 739 | 'true'=615 740 | 'union'=616 741 | 'unique'=617 742 | 'update'=618 743 | 'values'=619 744 | 'view'=620 745 | 'views'=621 746 | 'when'=622 747 | 'where'=623 748 | 'with'=624 749 | 'using'=625 750 | 'model'=626 751 | 'elsif'=627 752 | 'pivot'=628 753 | 'unpivot'=629 754 | '@!'=631 755 | -------------------------------------------------------------------------------- /csharp/src/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.IO; 7 | using Antlr4.Runtime; 8 | using Antlr4.Runtime.Misc; 9 | using Antlr4.Runtime.Tree; 10 | 11 | using Antlr4.Runtime.Atn; 12 | using System.Runtime.CompilerServices; 13 | 14 | namespace analyzer 15 | { 16 | class Program 17 | { 18 | public static void analyze(TextReader file) { 19 | var input = new AntlrInputStream(file); 20 | var lexer = new PlSqlLexer(input); 21 | var tokens = new CommonTokenStream(lexer); 22 | var parser = new PlSqlParser(tokens); 23 | var tree = parser.sql_script(); 24 | } 25 | 26 | public static void Main(string[] args) 27 | { 28 | string inputFile = null; 29 | 30 | if (args.Length > 0) { 31 | inputFile = args[0]; 32 | Console.WriteLine("Parsing " + inputFile); 33 | } 34 | var istream = System.Console.In; 35 | 36 | if (inputFile != null) { 37 | istream = File.OpenText(inputFile); 38 | } 39 | 40 | analyze(istream); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /grammar/PlSql-template.g4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alris/antlr4-oracle/8c185f04b07169effd9a9bb9bf7ed5686ffe66d9/grammar/PlSql-template.g4 -------------------------------------------------------------------------------- /grammar/csharp_addon.g4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alris/antlr4-oracle/8c185f04b07169effd9a9bb9bf7ed5686ffe66d9/grammar/csharp_addon.g4 -------------------------------------------------------------------------------- /grammar/java_addon.g4: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alris/antlr4-oracle/8c185f04b07169effd9a9bb9bf7ed5686ffe66d9/grammar/java_addon.g4 -------------------------------------------------------------------------------- /java/RemoteSystemsTempFiles/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | RemoteSystemsTempFiles 4 | 5 | 6 | 7 | 8 | 9 | 10 | org.eclipse.rse.ui.remoteSystemsTempNature 11 | 12 | 13 | -------------------------------------------------------------------------------- /java/src/Analyzer/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /java/src/Analyzer/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | Analyzer 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /java/src/Analyzer/bin/.gitignore: -------------------------------------------------------------------------------- 1 | /org/ 2 | -------------------------------------------------------------------------------- /java/src/Analyzer/build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /java/src/Analyzer/src/org/antlr/utils/Analyzer.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Original from http://stackoverflow.com/questions/28352193/how-to-use-antlr4-in-eclipse 3 | */ 4 | 5 | package org.antlr.utils; 6 | 7 | import org.antlr.v4.runtime.ANTLRInputStream; 8 | import org.antlr.v4.runtime.CharStream; 9 | import org.antlr.v4.runtime.CommonTokenStream; 10 | import org.antlr.v4.runtime.DefaultErrorStrategy; 11 | import org.antlr.v4.runtime.DiagnosticErrorListener; 12 | import org.antlr.v4.runtime.InputMismatchException; 13 | import org.antlr.v4.runtime.Lexer; 14 | import org.antlr.v4.runtime.Parser; 15 | import org.antlr.v4.runtime.ParserRuleContext; 16 | import org.antlr.v4.runtime.RecognitionException; 17 | import org.antlr.v4.runtime.Token; 18 | import org.antlr.v4.runtime.TokenStream; 19 | import org.antlr.v4.runtime.atn.PredictionMode; 20 | 21 | import javax.print.PrintException; 22 | 23 | import java.io.FileInputStream; 24 | import java.io.IOException; 25 | import java.io.InputStream; 26 | import java.io.InputStreamReader; 27 | import java.io.Reader; 28 | import java.lang.reflect.Constructor; 29 | import java.lang.reflect.InvocationTargetException; 30 | import java.lang.reflect.Method; 31 | import java.util.ArrayList; 32 | import java.util.List; 33 | 34 | /** 35 | * Run a lexer/parser combo, optionally printing tree string or generating 36 | * postscript file. Optionally taking input file. 37 | * 38 | * $ java org.antlr.v4.runtime.misc.TestRig GrammarName startRuleName [-tree] 39 | * [-tokens] [-gui] [-ps file.ps] [-trace] [-diagnostics] [-SLL] 40 | * [input-filename(s)] 41 | */ 42 | public class Analyzer { 43 | public static final String LEXER_START_RULE_NAME = "tokens"; 44 | 45 | protected String grammarName; 46 | protected String startRuleName; 47 | protected final List inputFiles = new ArrayList(); 48 | protected boolean printTree = false; 49 | protected boolean gui = false; 50 | protected String psFile = null; 51 | protected boolean showTokens = false; 52 | protected boolean trace = false; 53 | protected boolean diagnostics = false; 54 | protected String encoding = null; 55 | protected boolean SLL = false; 56 | 57 | public Analyzer(String[] args) throws Exception { 58 | if (args.length < 2) { 59 | System.err.println("java org.antlr.v4.runtime.misc.TestRig GrammarName startRuleName\n" 60 | + " [-tokens] [-tree] [-gui] [-ps file.ps] [-encoding encodingname]\n" + " [-trace] [-diagnostics] [-SLL]\n" + " [input-filename(s)]"); 61 | System.err.println("Use startRuleName='tokens' if GrammarName is a lexer grammar."); 62 | System.err.println("Omitting input-filename makes rig read from stdin."); 63 | return; 64 | } 65 | int i = 0; 66 | grammarName = args[i]; 67 | i++; 68 | startRuleName = args[i]; 69 | i++; 70 | while (i < args.length) { 71 | String arg = args[i]; 72 | i++; 73 | if (arg.charAt(0) != '-') { // input file name 74 | inputFiles.add(arg); 75 | continue; 76 | } 77 | if (arg.equals("-tree")) { 78 | printTree = true; 79 | } 80 | if (arg.equals("-gui")) { 81 | gui = true; 82 | } 83 | if (arg.equals("-tokens")) { 84 | showTokens = true; 85 | } else if (arg.equals("-trace")) { 86 | trace = true; 87 | } else if (arg.equals("-SLL")) { 88 | SLL = true; 89 | } else if (arg.equals("-diagnostics")) { 90 | diagnostics = true; 91 | } else if (arg.equals("-encoding")) { 92 | if (i >= args.length) { 93 | System.err.println("missing encoding on -encoding"); 94 | return; 95 | } 96 | encoding = args[i]; 97 | i++; 98 | } else if (arg.equals("-ps")) { 99 | if (i >= args.length) { 100 | System.err.println("missing filename on -ps"); 101 | return; 102 | } 103 | psFile = args[i]; 104 | i++; 105 | } 106 | } 107 | } 108 | 109 | public static void main(String[] args) throws Exception { 110 | Analyzer test = new Analyzer(args); 111 | if (args.length >= 2) { 112 | test.process(); 113 | } 114 | } 115 | 116 | public void process() throws Exception { 117 | // System.out.println("exec "+grammarName+" "+startRuleName); 118 | String lexerName = grammarName + "Lexer"; 119 | ClassLoader cl = Thread.currentThread().getContextClassLoader(); 120 | Class lexerClass = null; 121 | try { 122 | lexerClass = cl.loadClass(lexerName).asSubclass(Lexer.class); 123 | } catch (java.lang.ClassNotFoundException cnfe) { 124 | System.err.println("1: Can't load " + lexerName + " as lexer or parser"); 125 | return; 126 | } 127 | 128 | Constructor lexerCtor = lexerClass.getConstructor(CharStream.class); 129 | Lexer lexer = lexerCtor.newInstance((CharStream) null); 130 | 131 | Class parserClass = null; 132 | Parser parser = null; 133 | if (!startRuleName.equals(LEXER_START_RULE_NAME)) { 134 | String parserName = grammarName + "Parser"; 135 | parserClass = cl.loadClass(parserName).asSubclass(Parser.class); 136 | if (parserClass == null) { 137 | System.err.println("Can't load " + parserName); 138 | } 139 | Constructor parserCtor = parserClass.getConstructor(TokenStream.class); 140 | parser = parserCtor.newInstance((TokenStream) null); 141 | } 142 | 143 | if (inputFiles.size() == 0) { 144 | InputStream is = System.in; 145 | Reader r; 146 | if (encoding != null) { 147 | r = new InputStreamReader(is, encoding); 148 | } else { 149 | r = new InputStreamReader(is); 150 | } 151 | 152 | process(lexer, parserClass, parser, is, r); 153 | return; 154 | } 155 | for (String inputFile : inputFiles) { 156 | InputStream is = System.in; 157 | if (inputFile != null) { 158 | is = new FileInputStream(inputFile); 159 | } 160 | Reader r; 161 | if (encoding != null) { 162 | r = new InputStreamReader(is, encoding); 163 | } else { 164 | r = new InputStreamReader(is); 165 | } 166 | 167 | if (inputFiles.size() > 1) { 168 | System.err.println(inputFile); 169 | } 170 | process(lexer, parserClass, parser, is, r); 171 | } 172 | } 173 | 174 | protected void process(Lexer lexer, Class parserClass, Parser parser, InputStream is, Reader r) throws IOException, 175 | IllegalAccessException, InvocationTargetException, PrintException { 176 | try { 177 | ANTLRInputStream input = new ANTLRInputStream(r); 178 | lexer.setInputStream(input); 179 | CommonTokenStream tokens = new CommonTokenStream(lexer); 180 | 181 | tokens.fill(); 182 | 183 | if (showTokens) { 184 | for (Object tok : tokens.getTokens()) { 185 | System.out.println(tok); 186 | } 187 | } 188 | 189 | if (startRuleName.equals(LEXER_START_RULE_NAME)) 190 | return; 191 | 192 | if (diagnostics) { 193 | parser.addErrorListener(new DiagnosticErrorListener()); 194 | parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION); 195 | } 196 | 197 | if (printTree || gui || psFile != null) { 198 | parser.setBuildParseTree(true); 199 | } 200 | 201 | if (SLL) { // overrides diagnostics 202 | parser.getInterpreter().setPredictionMode(PredictionMode.SLL); 203 | } 204 | 205 | parser.setTokenStream(tokens); 206 | parser.setTrace(trace); 207 | // parser.setErrorHandler(new BailErrorStrategy()); 208 | 209 | try { 210 | Method startRule = parserClass.getMethod(startRuleName); 211 | ParserRuleContext tree = (ParserRuleContext) startRule.invoke(parser, (Object[]) null); 212 | 213 | if (printTree) { 214 | System.out.println(tree.toStringTree(parser)); 215 | } 216 | // TODO: broken - tree.inspect 217 | // if (gui) { 218 | // tree.inspect(parser); 219 | // } 220 | // if (psFile != null) { 221 | // tree.save(parser, psFile); // Generate postscript 222 | // } 223 | } catch (NoSuchMethodException nsme) { 224 | System.err.println("No method for rule " + startRuleName + " or it has arguments"); 225 | } 226 | } finally { 227 | if (r != null) 228 | r.close(); 229 | if (is != null) 230 | is.close(); 231 | } 232 | } 233 | 234 | @SuppressWarnings("unused") 235 | private static class BailErrorStrategy extends DefaultErrorStrategy { 236 | /** 237 | * Instead of recovering from exception e, rethrow it wrapped in a 238 | * generic RuntimeException so it is not caught by the rule function 239 | * catches. Exception e is the "cause" of the RuntimeException. 240 | */ 241 | @Override 242 | public void recover(Parser recognizer, RecognitionException e) { 243 | throw new RuntimeException(e); 244 | } 245 | 246 | /** 247 | * Make sure we don't attempt to recover inline; if the parser 248 | * successfully recovers, it won't throw an exception. 249 | */ 250 | @Override 251 | public Token recoverInline(Parser recognizer) throws RecognitionException { 252 | throw new RuntimeException(new InputMismatchException(recognizer)); 253 | } 254 | 255 | /** Make sure we don't attempt to recover from problems in subrules. */ 256 | @Override 257 | public void sync(Parser recognizer) { 258 | } 259 | } 260 | } -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/.gitignore: -------------------------------------------------------------------------------- 1 | bin/ -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | Antlr4ParserLexer 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/lib/antlr-4.5.3-complete.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/alris/antlr4-oracle/8c185f04b07169effd9a9bb9bf7ed5686ffe66d9/java/src/Antlr4ParserLexer/lib/antlr-4.5.3-complete.jar -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/src/org/antlr/generated/PlSql.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | PP_IF=2 3 | PP_THEN=3 4 | PP_ELSE=4 5 | PP_ELSIF=5 6 | PP_END=6 7 | PP_ERROR=7 8 | A_LETTER=8 9 | ADD=9 10 | AFTER=10 11 | AGENT=11 12 | AGGREGATE=12 13 | ALL=13 14 | ALTER=14 15 | ANALYZE=15 16 | AND=16 17 | ANY=17 18 | ARRAY=18 19 | AS=19 20 | ASC=20 21 | ASSOCIATE=21 22 | ASSOCIATION_OPERATOR=22 23 | AT=23 24 | ATTRIBUTE=24 25 | AUDIT=25 26 | AUTHID=26 27 | AUTO=27 28 | AUTOMATIC=28 29 | AUTONOMOUS_TRANSACTION=29 30 | BATCH=30 31 | BEFORE=31 32 | BEGIN=32 33 | BETWEEN=33 34 | BFILE=34 35 | BINARY_DOUBLE=35 36 | BINARY_FLOAT=36 37 | BINARY_INTEGER=37 38 | BLOB=38 39 | BLOCK=39 40 | BODY=40 41 | BOOLEAN=41 42 | BOTH=42 43 | BREADTH=43 44 | BULK=44 45 | BY=45 46 | BYTE=46 47 | C_LETTER=47 48 | CACHE=48 49 | CALL=49 50 | CANONICAL=50 51 | CASCADE=51 52 | CASE=52 53 | CAST=53 54 | CHAR=54 55 | CHAR_CS=55 56 | CHARACTER=56 57 | CHECK=57 58 | CHR=58 59 | CLOB=59 60 | CLOSE=60 61 | CLUSTER=61 62 | COLLECT=62 63 | COLUMNS=63 64 | COMMENT=64 65 | COMMIT=65 66 | COMMITTED=66 67 | COMPATIBILITY=67 68 | COMPILE=68 69 | COMPOUND=69 70 | CONNECT=70 71 | CONNECT_BY_ROOT=71 72 | CONSTANT=72 73 | CONSTRAINT=73 74 | CONSTRAINTS=74 75 | CONSTRUCTOR=75 76 | CONTENT=76 77 | CONTEXT=77 78 | CONTINUE=78 79 | CONVERT=79 80 | CORRUPT_XID=80 81 | CORRUPT_XID_ALL=81 82 | COST=82 83 | COUNT=83 84 | CREATE=84 85 | CROSS=85 86 | CUBE=86 87 | CURRENT=87 88 | CURRENT_USER=88 89 | CURSOR=89 90 | CUSTOMDATUM=90 91 | CYCLE=91 92 | DATA=92 93 | DATABASE=93 94 | DATE=94 95 | DAY=95 96 | DB_ROLE_CHANGE=96 97 | DBTIMEZONE=97 98 | DDL=98 99 | DEBUG=99 100 | DEC=100 101 | DECIMAL=101 102 | DECLARE=102 103 | DECOMPOSE=103 104 | DECREMENT=104 105 | DEFAULT=105 106 | DEFAULTS=106 107 | DEFERRED=107 108 | DEFINER=108 109 | DELETE=109 110 | DEPTH=110 111 | DESC=111 112 | DETERMINISTIC=112 113 | DIMENSION=113 114 | DISABLE=114 115 | DISASSOCIATE=115 116 | DISTINCT=116 117 | DOCUMENT=117 118 | DOUBLE=118 119 | DROP=119 120 | DSINTERVAL_UNCONSTRAINED=120 121 | EACH=121 122 | ELEMENT=122 123 | ELSE=123 124 | ELSIF=124 125 | EMPTY=125 126 | ENABLE=126 127 | ENCODING=127 128 | END=128 129 | ENTITYESCAPING=129 130 | ERRORS=130 131 | ESCAPE=131 132 | EXCEPT=132 133 | EVALNAME=133 134 | EXCEPTION=134 135 | EXCEPTION_INIT=135 136 | EXCEPTIONS=136 137 | EXCLUDE=137 138 | EXCLUSIVE=138 139 | EXECUTE=139 140 | EXISTS=140 141 | EXIT=141 142 | EXPLAIN=142 143 | EXTERNAL=143 144 | EXTEND=144 145 | EXTRACT=145 146 | FAILURE=146 147 | FALSE=147 148 | FETCH=148 149 | FINAL=149 150 | FIRST=150 151 | FIRST_VALUE=151 152 | FLOAT=152 153 | FOLLOWING=153 154 | FOLLOWS=154 155 | FOR=155 156 | FORALL=156 157 | FORCE=157 158 | FROM=158 159 | FULL=159 160 | FUNCTION=160 161 | GOTO=161 162 | GRANT=162 163 | GROUP=163 164 | GROUPING=164 165 | HASH=165 166 | HAVING=166 167 | HIDE=167 168 | HOUR=168 169 | IF=169 170 | IGNORE=170 171 | IMMEDIATE=171 172 | IN=172 173 | INCLUDE=173 174 | INCLUDING=174 175 | INCREMENT=175 176 | INDENT=176 177 | INDEX=177 178 | INDEXED=178 179 | INDICATOR=179 180 | INDICES=180 181 | INFINITE=181 182 | INLINE=182 183 | INNER=183 184 | INOUT=184 185 | INSERT=185 186 | INSTANTIABLE=186 187 | INSTEAD=187 188 | INT=188 189 | INTEGER=189 190 | INTERSECT=190 191 | INTERVAL=191 192 | INTO=192 193 | INVALIDATE=193 194 | IS=194 195 | ISOLATION=195 196 | ITERATE=196 197 | JAVA=197 198 | JOIN=198 199 | KEEP=199 200 | LANGUAGE=200 201 | LAST=201 202 | LAST_VALUE=202 203 | LEADING=203 204 | LEFT=204 205 | LEVEL=205 206 | LIBRARY=206 207 | LIKE=207 208 | LIKE2=208 209 | LIKE4=209 210 | LIKEC=210 211 | LIMIT=211 212 | LOCAL=212 213 | LOCK=213 214 | LOCKED=214 215 | LOG=215 216 | LOGOFF=216 217 | LOGON=217 218 | LONG=218 219 | LOOP=219 220 | MAIN=220 221 | MAP=221 222 | MATCHED=222 223 | MAXVALUE=223 224 | MEASURES=224 225 | MEMBER=225 226 | MERGE=226 227 | MINUS=227 228 | MINUTE=228 229 | MINVALUE=229 230 | MLSLABEL=230 231 | MOD=231 232 | MODE=232 233 | MODEL=233 234 | MODIFY=234 235 | MONTH=235 236 | MULTISET=236 237 | NAME=237 238 | NAN=238 239 | NATURAL=239 240 | NATURALN=240 241 | NAV=241 242 | NCHAR=242 243 | NCHAR_CS=243 244 | NCLOB=244 245 | NESTED=245 246 | NEW=246 247 | NEXT=247 248 | NO=248 249 | NOAUDIT=249 250 | NOCACHE=250 251 | NOCOPY=251 252 | NOCYCLE=252 253 | NOENTITYESCAPING=253 254 | NOMAXVALUE=254 255 | NOMINVALUE=255 256 | NONE=256 257 | NOORDER=257 258 | NOSCHEMACHECK=258 259 | NOT=259 260 | NOWAIT=260 261 | NULL=261 262 | NULLS=262 263 | NUMBER=263 264 | NUMERIC=264 265 | NVARCHAR2=265 266 | OBJECT=266 267 | OF=267 268 | OFF=268 269 | OID=269 270 | OLD=270 271 | ON=271 272 | ONLY=272 273 | OPEN=273 274 | OPTION=274 275 | OR=275 276 | ORADATA=276 277 | ORDER=277 278 | ORDINALITY=278 279 | OSERROR=279 280 | OUT=280 281 | OUTER=281 282 | OVER=282 283 | OVERRIDING=283 284 | PACKAGE=284 285 | PARALLEL_ENABLE=285 286 | PARAMETERS=286 287 | PARENT=287 288 | PARTITION=288 289 | PASSING=289 290 | PATH=290 291 | PERCENT_ISOPEN=291 292 | PERCENT_ROWTYPE=292 293 | PERCENT_TYPE=293 294 | PERCENT_FOUND=294 295 | PERCENT_NOTFOUND=295 296 | PERCENT_ROWCOUNT=296 297 | PIPELINED=297 298 | PIPE=298 299 | PIVOT=299 300 | PLAN=300 301 | PLS_INTEGER=301 302 | POSITIVE=302 303 | POSITIVEN=303 304 | PRAGMA=304 305 | PRECEDING=305 306 | PRECISION=306 307 | PRESENT=307 308 | PRIOR=308 309 | PROCEDURE=309 310 | RAISE=310 311 | RANGE=311 312 | RAW=312 313 | READ=313 314 | REAL=314 315 | RECORD=315 316 | REF=316 317 | REFERENCE=317 318 | REFERENCING=318 319 | REJECT=319 320 | RELIES_ON=320 321 | RENAME=321 322 | REPLACE=322 323 | RESPECT=323 324 | RESTRICT_REFERENCES=324 325 | RESULT=325 326 | RESULT_CACHE=326 327 | RETURN=327 328 | RETURNING=328 329 | REUSE=329 330 | REVERSE=330 331 | REVOKE=331 332 | RIGHT=332 333 | ROLLBACK=333 334 | ROLLUP=334 335 | ROW=335 336 | ROWID=336 337 | ROWS=337 338 | RULES=338 339 | SAMPLE=339 340 | SAVE=340 341 | SAVEPOINT=341 342 | SCHEMA=342 343 | SCHEMACHECK=343 344 | SCN=344 345 | SEARCH=345 346 | SECOND=346 347 | SEED=347 348 | SEGMENT=348 349 | SELECT=349 350 | SELF=350 351 | SEQUENCE=351 352 | SEQUENTIAL=352 353 | SERIALIZABLE=353 354 | SERIALLY_REUSABLE=354 355 | SERVERERROR=355 356 | SESSIONTIMEZONE=356 357 | SET=357 358 | SETS=358 359 | SETTINGS=359 360 | SHARE=360 361 | SHOW=361 362 | SHUTDOWN=362 363 | SIBLINGS=363 364 | SIGNTYPE=364 365 | SIMPLE_INTEGER=365 366 | SINGLE=366 367 | SIZE=367 368 | SKIP_=368 369 | SMALLINT=369 370 | SNAPSHOT=370 371 | SOME=371 372 | SPECIFICATION=372 373 | SQLDATA=373 374 | SQLERROR=374 375 | SQL_PERCENT_ROWCOUNT=375 376 | STANDALONE=376 377 | START=377 378 | STARTUP=378 379 | STATEMENT=379 380 | STATEMENT_ID=380 381 | STATIC=381 382 | STATISTICS=382 383 | STRING=383 384 | SUBMULTISET=384 385 | SUBPARTITION=385 386 | SUBSTITUTABLE=386 387 | SUBTYPE=387 388 | SUCCESS=388 389 | SUSPEND=389 390 | TABLE=390 391 | THE=391 392 | THEN=392 393 | TIME=393 394 | TIMESTAMP=394 395 | TIMESTAMP_LTZ_UNCONSTRAINED=395 396 | TIMESTAMP_TZ_UNCONSTRAINED=396 397 | TIMESTAMP_UNCONSTRAINED=397 398 | TIMEZONE_ABBR=398 399 | TIMEZONE_HOUR=399 400 | TIMEZONE_MINUTE=400 401 | TIMEZONE_REGION=401 402 | TO=402 403 | TO_CHAR=403 404 | TO_NUMBER=404 405 | TRAILING=405 406 | TRANSACTION=406 407 | TRANSLATE=407 408 | TREAT=408 409 | TRIGGER=409 410 | TRIM=410 411 | TRUE=411 412 | TRUNCATE=412 413 | TYPE=413 414 | UNBOUNDED=414 415 | UNDER=415 416 | UNION=416 417 | UNIQUE=417 418 | UNLIMITED=418 419 | UNPIVOT=419 420 | UNTIL=420 421 | UPDATE=421 422 | UPDATED=422 423 | UPSERT=423 424 | UROWID=424 425 | USE=425 426 | USING=426 427 | VALIDATE=427 428 | VALUE=428 429 | VALUES=429 430 | VARCHAR=430 431 | VARCHAR2=431 432 | VARIABLE=432 433 | VARRAY=433 434 | VARYING=434 435 | VERSION=435 436 | VERSIONS=436 437 | WAIT=437 438 | WARNING=438 439 | WELLFORMED=439 440 | WHEN=440 441 | WHENEVER=441 442 | WHERE=442 443 | WHILE=443 444 | WITH=444 445 | WITHIN=445 446 | WORK=446 447 | WRITE=447 448 | XML=448 449 | XMLAGG=449 450 | XMLATTRIBUTES=450 451 | XMLCAST=451 452 | XMLCOLATTVAL=452 453 | XMLELEMENT=453 454 | XMLEXISTS=454 455 | XMLFOREST=455 456 | XMLNAMESPACES=456 457 | XMLPARSE=457 458 | XMLPI=458 459 | XMLQUERY=459 460 | XMLROOT=460 461 | XMLSERIALIZE=461 462 | XMLTABLE=462 463 | YEAR=463 464 | YES=464 465 | YMINTERVAL_UNCONSTRAINED=465 466 | ZONE=466 467 | PREDICTION=467 468 | PREDICTION_BOUNDS=468 469 | PREDICTION_COST=469 470 | PREDICTION_DETAILS=470 471 | PREDICTION_PROBABILITY=471 472 | PREDICTION_SET=472 473 | CUME_DIST=473 474 | DENSE_RANK=474 475 | LISTAGG=475 476 | PERCENT_RANK=476 477 | PERCENTILE_CONT=477 478 | PERCENTILE_DISC=478 479 | RANK=479 480 | AVG=480 481 | CORR=481 482 | LAG=482 483 | LEAD=483 484 | MAX=484 485 | MEDIAN=485 486 | MIN=486 487 | NTILE=487 488 | RATIO_TO_REPORT=488 489 | ROW_NUMBER=489 490 | SUM=490 491 | VARIANCE=491 492 | REGR_=492 493 | STDDEV=493 494 | VAR_=494 495 | COVAR_=495 496 | PROMPT=496 497 | NATIONAL_CHAR_STRING_LIT=497 498 | BIT_STRING_LIT=498 499 | HEX_STRING_LIT=499 500 | DOUBLE_PERIOD=500 501 | PERIOD=501 502 | UNSIGNED_INTEGER=502 503 | APPROXIMATE_NUM_LIT=503 504 | CHAR_STRING=504 505 | DELIMITED_ID=505 506 | PERCENT=506 507 | AMPERSAND=507 508 | LEFT_PAREN=508 509 | RIGHT_PAREN=509 510 | DOUBLE_ASTERISK=510 511 | ASTERISK=511 512 | PLUS_SIGN=512 513 | MINUS_SIGN=513 514 | COMMA=514 515 | SOLIDUS=515 516 | AT_SIGN=516 517 | ASSIGN_OP=517 518 | BINDVAR=518 519 | COLON=519 520 | SEMICOLON=520 521 | LESS_THAN_OR_EQUALS_OP=521 522 | LESS_THAN_OP=522 523 | GREATER_THAN_OR_EQUALS_OP=523 524 | NOT_EQUAL_OP=524 525 | CARRET_OPERATOR_PART=525 526 | TILDE_OPERATOR_PART=526 527 | EXCLAMATION_OPERATOR_PART=527 528 | GREATER_THAN_OP=528 529 | CONCATENATION_OP=529 530 | VERTICAL_BAR=530 531 | EQUALS_OP=531 532 | LEFT_BRACKET=532 533 | RIGHT_BRACKET=533 534 | INTRODUCER=534 535 | SPACES=535 536 | SINGLE_LINE_COMMENT=536 537 | MULTI_LINE_COMMENT=537 538 | SQL92_RESERVED_ALL=538 539 | SQL92_RESERVED_ALTER=539 540 | SQL92_RESERVED_AND=540 541 | SQL92_RESERVED_ANY=541 542 | SQL92_RESERVED_AS=542 543 | SQL92_RESERVED_ASC=543 544 | SQL92_RESERVED_BEGIN=544 545 | SQL92_RESERVED_BETWEEN=545 546 | SQL92_RESERVED_BY=546 547 | SQL92_RESERVED_CASE=547 548 | SQL92_RESERVED_CHECK=548 549 | PLSQL_RESERVED_CLUSTERS=549 550 | PLSQL_RESERVED_COLAUTH=550 551 | PLSQL_RESERVED_COMPRESS=551 552 | SQL92_RESERVED_CONNECT=552 553 | PLSQL_NON_RESERVED_CONNECT_BY_ROOT=553 554 | PLSQL_RESERVED_CRASH=554 555 | SQL92_RESERVED_CREATE=555 556 | SQL92_RESERVED_CURRENT=556 557 | SQL92_RESERVED_CURSOR=557 558 | SQL92_RESERVED_DATE=558 559 | SQL92_RESERVED_DECLARE=559 560 | SQL92_RESERVED_DEFAULT=560 561 | SQL92_RESERVED_DELETE=561 562 | SQL92_RESERVED_DESC=562 563 | SQL92_RESERVED_DISTINCT=563 564 | SQL92_RESERVED_DROP=564 565 | SQL92_RESERVED_ELSE=565 566 | SQL92_RESERVED_END=566 567 | SQL92_RESERVED_EXCEPTION=567 568 | PLSQL_RESERVED_EXCLUSIVE=568 569 | SQL92_RESERVED_EXISTS=569 570 | SQL92_RESERVED_FALSE=570 571 | SQL92_RESERVED_FETCH=571 572 | SQL92_RESERVED_FOR=572 573 | SQL92_RESERVED_FROM=573 574 | SQL92_RESERVED_GOTO=574 575 | SQL92_RESERVED_GRANT=575 576 | SQL92_RESERVED_GROUP=576 577 | SQL92_RESERVED_HAVING=577 578 | PLSQL_RESERVED_IDENTIFIED=578 579 | PLSQL_RESERVED_IF=579 580 | SQL92_RESERVED_IN=580 581 | PLSQL_RESERVED_INDEX=581 582 | PLSQL_RESERVED_INDEXES=582 583 | SQL92_RESERVED_INSERT=583 584 | SQL92_RESERVED_INTERSECT=584 585 | SQL92_RESERVED_INTO=585 586 | SQL92_RESERVED_IS=586 587 | SQL92_RESERVED_LIKE=587 588 | PLSQL_RESERVED_LOCK=588 589 | PLSQL_RESERVED_MINUS=589 590 | PLSQL_RESERVED_MODE=590 591 | PLSQL_RESERVED_NOCOMPRESS=591 592 | SQL92_RESERVED_NOT=592 593 | PLSQL_RESERVED_NOWAIT=593 594 | SQL92_RESERVED_NULL=594 595 | SQL92_RESERVED_OF=595 596 | SQL92_RESERVED_ON=596 597 | SQL92_RESERVED_OPTION=597 598 | SQL92_RESERVED_OR=598 599 | SQL92_RESERVED_ORDER=599 600 | SQL92_RESERVED_OVERLAPS=600 601 | SQL92_RESERVED_PRIOR=601 602 | SQL92_RESERVED_PROCEDURE=602 603 | SQL92_RESERVED_PUBLIC=603 604 | PLSQL_RESERVED_RESOURCE=604 605 | SQL92_RESERVED_REVOKE=605 606 | SQL92_RESERVED_SELECT=606 607 | PLSQL_RESERVED_SHARE=607 608 | SQL92_RESERVED_SIZE=608 609 | PLSQL_RESERVED_START=609 610 | PLSQL_RESERVED_TABAUTH=610 611 | SQL92_RESERVED_TABLE=611 612 | SQL92_RESERVED_THE=612 613 | SQL92_RESERVED_THEN=613 614 | SQL92_RESERVED_TO=614 615 | SQL92_RESERVED_TRUE=615 616 | SQL92_RESERVED_UNION=616 617 | SQL92_RESERVED_UNIQUE=617 618 | SQL92_RESERVED_UPDATE=618 619 | SQL92_RESERVED_VALUES=619 620 | SQL92_RESERVED_VIEW=620 621 | PLSQL_RESERVED_VIEWS=621 622 | SQL92_RESERVED_WHEN=622 623 | SQL92_RESERVED_WHERE=623 624 | SQL92_RESERVED_WITH=624 625 | PLSQL_NON_RESERVED_USING=625 626 | PLSQL_NON_RESERVED_MODEL=626 627 | PLSQL_NON_RESERVED_ELSIF=627 628 | PLSQL_NON_RESERVED_PIVOT=628 629 | PLSQL_NON_RESERVED_UNPIVOT=629 630 | REGULAR_ID=630 631 | ZV=631 632 | '..'=1 633 | '=>'=22 634 | '.'=501 635 | '%'=506 636 | '&'=507 637 | '('=508 638 | ')'=509 639 | '**'=510 640 | '*'=511 641 | '+'=512 642 | '-'=513 643 | ','=514 644 | '/'=515 645 | '@'=516 646 | ':='=517 647 | ':'=519 648 | ';'=520 649 | '<='=521 650 | '<'=522 651 | '>='=523 652 | '^'=525 653 | '~'=526 654 | '!'=527 655 | '>'=528 656 | '||'=529 657 | '|'=530 658 | '='=531 659 | '['=532 660 | ']'=533 661 | '_'=534 662 | 'all'=538 663 | 'alter'=539 664 | 'and'=540 665 | 'any'=541 666 | 'as'=542 667 | 'asc'=543 668 | 'begin'=544 669 | 'between'=545 670 | 'by'=546 671 | 'case'=547 672 | 'check'=548 673 | 'clusters'=549 674 | 'colauth'=550 675 | 'compress'=551 676 | 'connect'=552 677 | 'connect_by_root'=553 678 | 'crash'=554 679 | 'create'=555 680 | 'current'=556 681 | 'cursor'=557 682 | 'date'=558 683 | 'declare'=559 684 | 'default'=560 685 | 'delete'=561 686 | 'desc'=562 687 | 'distinct'=563 688 | 'drop'=564 689 | 'else'=565 690 | 'end'=566 691 | 'exception'=567 692 | 'exclusive'=568 693 | 'exists'=569 694 | 'false'=570 695 | 'fetch'=571 696 | 'for'=572 697 | 'from'=573 698 | 'goto'=574 699 | 'grant'=575 700 | 'group'=576 701 | 'having'=577 702 | 'identified'=578 703 | 'if'=579 704 | 'in'=580 705 | 'index'=581 706 | 'indexes'=582 707 | 'insert'=583 708 | 'intersect'=584 709 | 'into'=585 710 | 'is'=586 711 | 'like'=587 712 | 'lock'=588 713 | 'minus'=589 714 | 'mode'=590 715 | 'nocompress'=591 716 | 'not'=592 717 | 'nowait'=593 718 | 'null'=594 719 | 'of'=595 720 | 'on'=596 721 | 'option'=597 722 | 'or'=598 723 | 'order'=599 724 | 'overlaps'=600 725 | 'prior'=601 726 | 'procedure'=602 727 | 'public'=603 728 | 'resource'=604 729 | 'revoke'=605 730 | 'select'=606 731 | 'share'=607 732 | 'size'=608 733 | 'start'=609 734 | 'tabauth'=610 735 | 'table'=611 736 | 'the'=612 737 | 'then'=613 738 | 'to'=614 739 | 'true'=615 740 | 'union'=616 741 | 'unique'=617 742 | 'update'=618 743 | 'values'=619 744 | 'view'=620 745 | 'views'=621 746 | 'when'=622 747 | 'where'=623 748 | 'with'=624 749 | 'using'=625 750 | 'model'=626 751 | 'elsif'=627 752 | 'pivot'=628 753 | 'unpivot'=629 754 | '@!'=631 755 | -------------------------------------------------------------------------------- /java/src/Antlr4ParserLexer/src/org/antlr/generated/PlSqlLexer.tokens: -------------------------------------------------------------------------------- 1 | T__0=1 2 | PP_IF=2 3 | PP_THEN=3 4 | PP_ELSE=4 5 | PP_ELSIF=5 6 | PP_END=6 7 | PP_ERROR=7 8 | A_LETTER=8 9 | ADD=9 10 | AFTER=10 11 | AGENT=11 12 | AGGREGATE=12 13 | ALL=13 14 | ALTER=14 15 | ANALYZE=15 16 | AND=16 17 | ANY=17 18 | ARRAY=18 19 | AS=19 20 | ASC=20 21 | ASSOCIATE=21 22 | ASSOCIATION_OPERATOR=22 23 | AT=23 24 | ATTRIBUTE=24 25 | AUDIT=25 26 | AUTHID=26 27 | AUTO=27 28 | AUTOMATIC=28 29 | AUTONOMOUS_TRANSACTION=29 30 | BATCH=30 31 | BEFORE=31 32 | BEGIN=32 33 | BETWEEN=33 34 | BFILE=34 35 | BINARY_DOUBLE=35 36 | BINARY_FLOAT=36 37 | BINARY_INTEGER=37 38 | BLOB=38 39 | BLOCK=39 40 | BODY=40 41 | BOOLEAN=41 42 | BOTH=42 43 | BREADTH=43 44 | BULK=44 45 | BY=45 46 | BYTE=46 47 | C_LETTER=47 48 | CACHE=48 49 | CALL=49 50 | CANONICAL=50 51 | CASCADE=51 52 | CASE=52 53 | CAST=53 54 | CHAR=54 55 | CHAR_CS=55 56 | CHARACTER=56 57 | CHECK=57 58 | CHR=58 59 | CLOB=59 60 | CLOSE=60 61 | CLUSTER=61 62 | COLLECT=62 63 | COLUMNS=63 64 | COMMENT=64 65 | COMMIT=65 66 | COMMITTED=66 67 | COMPATIBILITY=67 68 | COMPILE=68 69 | COMPOUND=69 70 | CONNECT=70 71 | CONNECT_BY_ROOT=71 72 | CONSTANT=72 73 | CONSTRAINT=73 74 | CONSTRAINTS=74 75 | CONSTRUCTOR=75 76 | CONTENT=76 77 | CONTEXT=77 78 | CONTINUE=78 79 | CONVERT=79 80 | CORRUPT_XID=80 81 | CORRUPT_XID_ALL=81 82 | COST=82 83 | COUNT=83 84 | CREATE=84 85 | CROSS=85 86 | CUBE=86 87 | CURRENT=87 88 | CURRENT_USER=88 89 | CURSOR=89 90 | CUSTOMDATUM=90 91 | CYCLE=91 92 | DATA=92 93 | DATABASE=93 94 | DATE=94 95 | DAY=95 96 | DB_ROLE_CHANGE=96 97 | DBTIMEZONE=97 98 | DDL=98 99 | DEBUG=99 100 | DEC=100 101 | DECIMAL=101 102 | DECLARE=102 103 | DECOMPOSE=103 104 | DECREMENT=104 105 | DEFAULT=105 106 | DEFAULTS=106 107 | DEFERRED=107 108 | DEFINER=108 109 | DELETE=109 110 | DEPTH=110 111 | DESC=111 112 | DETERMINISTIC=112 113 | DIMENSION=113 114 | DISABLE=114 115 | DISASSOCIATE=115 116 | DISTINCT=116 117 | DOCUMENT=117 118 | DOUBLE=118 119 | DROP=119 120 | DSINTERVAL_UNCONSTRAINED=120 121 | EACH=121 122 | ELEMENT=122 123 | ELSE=123 124 | ELSIF=124 125 | EMPTY=125 126 | ENABLE=126 127 | ENCODING=127 128 | END=128 129 | ENTITYESCAPING=129 130 | ERRORS=130 131 | ESCAPE=131 132 | EXCEPT=132 133 | EVALNAME=133 134 | EXCEPTION=134 135 | EXCEPTION_INIT=135 136 | EXCEPTIONS=136 137 | EXCLUDE=137 138 | EXCLUSIVE=138 139 | EXECUTE=139 140 | EXISTS=140 141 | EXIT=141 142 | EXPLAIN=142 143 | EXTERNAL=143 144 | EXTEND=144 145 | EXTRACT=145 146 | FAILURE=146 147 | FALSE=147 148 | FETCH=148 149 | FINAL=149 150 | FIRST=150 151 | FIRST_VALUE=151 152 | FLOAT=152 153 | FOLLOWING=153 154 | FOLLOWS=154 155 | FOR=155 156 | FORALL=156 157 | FORCE=157 158 | FROM=158 159 | FULL=159 160 | FUNCTION=160 161 | GOTO=161 162 | GRANT=162 163 | GROUP=163 164 | GROUPING=164 165 | HASH=165 166 | HAVING=166 167 | HIDE=167 168 | HOUR=168 169 | IF=169 170 | IGNORE=170 171 | IMMEDIATE=171 172 | IN=172 173 | INCLUDE=173 174 | INCLUDING=174 175 | INCREMENT=175 176 | INDENT=176 177 | INDEX=177 178 | INDEXED=178 179 | INDICATOR=179 180 | INDICES=180 181 | INFINITE=181 182 | INLINE=182 183 | INNER=183 184 | INOUT=184 185 | INSERT=185 186 | INSTANTIABLE=186 187 | INSTEAD=187 188 | INT=188 189 | INTEGER=189 190 | INTERSECT=190 191 | INTERVAL=191 192 | INTO=192 193 | INVALIDATE=193 194 | IS=194 195 | ISOLATION=195 196 | ITERATE=196 197 | JAVA=197 198 | JOIN=198 199 | KEEP=199 200 | LANGUAGE=200 201 | LAST=201 202 | LAST_VALUE=202 203 | LEADING=203 204 | LEFT=204 205 | LEVEL=205 206 | LIBRARY=206 207 | LIKE=207 208 | LIKE2=208 209 | LIKE4=209 210 | LIKEC=210 211 | LIMIT=211 212 | LOCAL=212 213 | LOCK=213 214 | LOCKED=214 215 | LOG=215 216 | LOGOFF=216 217 | LOGON=217 218 | LONG=218 219 | LOOP=219 220 | MAIN=220 221 | MAP=221 222 | MATCHED=222 223 | MAXVALUE=223 224 | MEASURES=224 225 | MEMBER=225 226 | MERGE=226 227 | MINUS=227 228 | MINUTE=228 229 | MINVALUE=229 230 | MLSLABEL=230 231 | MOD=231 232 | MODE=232 233 | MODEL=233 234 | MODIFY=234 235 | MONTH=235 236 | MULTISET=236 237 | NAME=237 238 | NAN=238 239 | NATURAL=239 240 | NATURALN=240 241 | NAV=241 242 | NCHAR=242 243 | NCHAR_CS=243 244 | NCLOB=244 245 | NESTED=245 246 | NEW=246 247 | NEXT=247 248 | NO=248 249 | NOAUDIT=249 250 | NOCACHE=250 251 | NOCOPY=251 252 | NOCYCLE=252 253 | NOENTITYESCAPING=253 254 | NOMAXVALUE=254 255 | NOMINVALUE=255 256 | NONE=256 257 | NOORDER=257 258 | NOSCHEMACHECK=258 259 | NOT=259 260 | NOWAIT=260 261 | NULL=261 262 | NULLS=262 263 | NUMBER=263 264 | NUMERIC=264 265 | NVARCHAR2=265 266 | OBJECT=266 267 | OF=267 268 | OFF=268 269 | OID=269 270 | OLD=270 271 | ON=271 272 | ONLY=272 273 | OPEN=273 274 | OPTION=274 275 | OR=275 276 | ORADATA=276 277 | ORDER=277 278 | ORDINALITY=278 279 | OSERROR=279 280 | OUT=280 281 | OUTER=281 282 | OVER=282 283 | OVERRIDING=283 284 | PACKAGE=284 285 | PARALLEL_ENABLE=285 286 | PARAMETERS=286 287 | PARENT=287 288 | PARTITION=288 289 | PASSING=289 290 | PATH=290 291 | PERCENT_ISOPEN=291 292 | PERCENT_ROWTYPE=292 293 | PERCENT_TYPE=293 294 | PERCENT_FOUND=294 295 | PERCENT_NOTFOUND=295 296 | PERCENT_ROWCOUNT=296 297 | PIPELINED=297 298 | PIPE=298 299 | PIVOT=299 300 | PLAN=300 301 | PLS_INTEGER=301 302 | POSITIVE=302 303 | POSITIVEN=303 304 | PRAGMA=304 305 | PRECEDING=305 306 | PRECISION=306 307 | PRESENT=307 308 | PRIOR=308 309 | PROCEDURE=309 310 | RAISE=310 311 | RANGE=311 312 | RAW=312 313 | READ=313 314 | REAL=314 315 | RECORD=315 316 | REF=316 317 | REFERENCE=317 318 | REFERENCING=318 319 | REJECT=319 320 | RELIES_ON=320 321 | RENAME=321 322 | REPLACE=322 323 | RESPECT=323 324 | RESTRICT_REFERENCES=324 325 | RESULT=325 326 | RESULT_CACHE=326 327 | RETURN=327 328 | RETURNING=328 329 | REUSE=329 330 | REVERSE=330 331 | REVOKE=331 332 | RIGHT=332 333 | ROLLBACK=333 334 | ROLLUP=334 335 | ROW=335 336 | ROWID=336 337 | ROWS=337 338 | RULES=338 339 | SAMPLE=339 340 | SAVE=340 341 | SAVEPOINT=341 342 | SCHEMA=342 343 | SCHEMACHECK=343 344 | SCN=344 345 | SEARCH=345 346 | SECOND=346 347 | SEED=347 348 | SEGMENT=348 349 | SELECT=349 350 | SELF=350 351 | SEQUENCE=351 352 | SEQUENTIAL=352 353 | SERIALIZABLE=353 354 | SERIALLY_REUSABLE=354 355 | SERVERERROR=355 356 | SESSIONTIMEZONE=356 357 | SET=357 358 | SETS=358 359 | SETTINGS=359 360 | SHARE=360 361 | SHOW=361 362 | SHUTDOWN=362 363 | SIBLINGS=363 364 | SIGNTYPE=364 365 | SIMPLE_INTEGER=365 366 | SINGLE=366 367 | SIZE=367 368 | SKIP_=368 369 | SMALLINT=369 370 | SNAPSHOT=370 371 | SOME=371 372 | SPECIFICATION=372 373 | SQLDATA=373 374 | SQLERROR=374 375 | SQL_PERCENT_ROWCOUNT=375 376 | STANDALONE=376 377 | START=377 378 | STARTUP=378 379 | STATEMENT=379 380 | STATEMENT_ID=380 381 | STATIC=381 382 | STATISTICS=382 383 | STRING=383 384 | SUBMULTISET=384 385 | SUBPARTITION=385 386 | SUBSTITUTABLE=386 387 | SUBTYPE=387 388 | SUCCESS=388 389 | SUSPEND=389 390 | TABLE=390 391 | THE=391 392 | THEN=392 393 | TIME=393 394 | TIMESTAMP=394 395 | TIMESTAMP_LTZ_UNCONSTRAINED=395 396 | TIMESTAMP_TZ_UNCONSTRAINED=396 397 | TIMESTAMP_UNCONSTRAINED=397 398 | TIMEZONE_ABBR=398 399 | TIMEZONE_HOUR=399 400 | TIMEZONE_MINUTE=400 401 | TIMEZONE_REGION=401 402 | TO=402 403 | TO_CHAR=403 404 | TO_NUMBER=404 405 | TRAILING=405 406 | TRANSACTION=406 407 | TRANSLATE=407 408 | TREAT=408 409 | TRIGGER=409 410 | TRIM=410 411 | TRUE=411 412 | TRUNCATE=412 413 | TYPE=413 414 | UNBOUNDED=414 415 | UNDER=415 416 | UNION=416 417 | UNIQUE=417 418 | UNLIMITED=418 419 | UNPIVOT=419 420 | UNTIL=420 421 | UPDATE=421 422 | UPDATED=422 423 | UPSERT=423 424 | UROWID=424 425 | USE=425 426 | USING=426 427 | VALIDATE=427 428 | VALUE=428 429 | VALUES=429 430 | VARCHAR=430 431 | VARCHAR2=431 432 | VARIABLE=432 433 | VARRAY=433 434 | VARYING=434 435 | VERSION=435 436 | VERSIONS=436 437 | WAIT=437 438 | WARNING=438 439 | WELLFORMED=439 440 | WHEN=440 441 | WHENEVER=441 442 | WHERE=442 443 | WHILE=443 444 | WITH=444 445 | WITHIN=445 446 | WORK=446 447 | WRITE=447 448 | XML=448 449 | XMLAGG=449 450 | XMLATTRIBUTES=450 451 | XMLCAST=451 452 | XMLCOLATTVAL=452 453 | XMLELEMENT=453 454 | XMLEXISTS=454 455 | XMLFOREST=455 456 | XMLNAMESPACES=456 457 | XMLPARSE=457 458 | XMLPI=458 459 | XMLQUERY=459 460 | XMLROOT=460 461 | XMLSERIALIZE=461 462 | XMLTABLE=462 463 | YEAR=463 464 | YES=464 465 | YMINTERVAL_UNCONSTRAINED=465 466 | ZONE=466 467 | PREDICTION=467 468 | PREDICTION_BOUNDS=468 469 | PREDICTION_COST=469 470 | PREDICTION_DETAILS=470 471 | PREDICTION_PROBABILITY=471 472 | PREDICTION_SET=472 473 | CUME_DIST=473 474 | DENSE_RANK=474 475 | LISTAGG=475 476 | PERCENT_RANK=476 477 | PERCENTILE_CONT=477 478 | PERCENTILE_DISC=478 479 | RANK=479 480 | AVG=480 481 | CORR=481 482 | LAG=482 483 | LEAD=483 484 | MAX=484 485 | MEDIAN=485 486 | MIN=486 487 | NTILE=487 488 | RATIO_TO_REPORT=488 489 | ROW_NUMBER=489 490 | SUM=490 491 | VARIANCE=491 492 | REGR_=492 493 | STDDEV=493 494 | VAR_=494 495 | COVAR_=495 496 | PROMPT=496 497 | NATIONAL_CHAR_STRING_LIT=497 498 | BIT_STRING_LIT=498 499 | HEX_STRING_LIT=499 500 | DOUBLE_PERIOD=500 501 | PERIOD=501 502 | UNSIGNED_INTEGER=502 503 | APPROXIMATE_NUM_LIT=503 504 | CHAR_STRING=504 505 | DELIMITED_ID=505 506 | PERCENT=506 507 | AMPERSAND=507 508 | LEFT_PAREN=508 509 | RIGHT_PAREN=509 510 | DOUBLE_ASTERISK=510 511 | ASTERISK=511 512 | PLUS_SIGN=512 513 | MINUS_SIGN=513 514 | COMMA=514 515 | SOLIDUS=515 516 | AT_SIGN=516 517 | ASSIGN_OP=517 518 | BINDVAR=518 519 | COLON=519 520 | SEMICOLON=520 521 | LESS_THAN_OR_EQUALS_OP=521 522 | LESS_THAN_OP=522 523 | GREATER_THAN_OR_EQUALS_OP=523 524 | NOT_EQUAL_OP=524 525 | CARRET_OPERATOR_PART=525 526 | TILDE_OPERATOR_PART=526 527 | EXCLAMATION_OPERATOR_PART=527 528 | GREATER_THAN_OP=528 529 | CONCATENATION_OP=529 530 | VERTICAL_BAR=530 531 | EQUALS_OP=531 532 | LEFT_BRACKET=532 533 | RIGHT_BRACKET=533 534 | INTRODUCER=534 535 | SPACES=535 536 | SINGLE_LINE_COMMENT=536 537 | MULTI_LINE_COMMENT=537 538 | SQL92_RESERVED_ALL=538 539 | SQL92_RESERVED_ALTER=539 540 | SQL92_RESERVED_AND=540 541 | SQL92_RESERVED_ANY=541 542 | SQL92_RESERVED_AS=542 543 | SQL92_RESERVED_ASC=543 544 | SQL92_RESERVED_BEGIN=544 545 | SQL92_RESERVED_BETWEEN=545 546 | SQL92_RESERVED_BY=546 547 | SQL92_RESERVED_CASE=547 548 | SQL92_RESERVED_CHECK=548 549 | PLSQL_RESERVED_CLUSTERS=549 550 | PLSQL_RESERVED_COLAUTH=550 551 | PLSQL_RESERVED_COMPRESS=551 552 | SQL92_RESERVED_CONNECT=552 553 | PLSQL_NON_RESERVED_CONNECT_BY_ROOT=553 554 | PLSQL_RESERVED_CRASH=554 555 | SQL92_RESERVED_CREATE=555 556 | SQL92_RESERVED_CURRENT=556 557 | SQL92_RESERVED_CURSOR=557 558 | SQL92_RESERVED_DATE=558 559 | SQL92_RESERVED_DECLARE=559 560 | SQL92_RESERVED_DEFAULT=560 561 | SQL92_RESERVED_DELETE=561 562 | SQL92_RESERVED_DESC=562 563 | SQL92_RESERVED_DISTINCT=563 564 | SQL92_RESERVED_DROP=564 565 | SQL92_RESERVED_ELSE=565 566 | SQL92_RESERVED_END=566 567 | SQL92_RESERVED_EXCEPTION=567 568 | PLSQL_RESERVED_EXCLUSIVE=568 569 | SQL92_RESERVED_EXISTS=569 570 | SQL92_RESERVED_FALSE=570 571 | SQL92_RESERVED_FETCH=571 572 | SQL92_RESERVED_FOR=572 573 | SQL92_RESERVED_FROM=573 574 | SQL92_RESERVED_GOTO=574 575 | SQL92_RESERVED_GRANT=575 576 | SQL92_RESERVED_GROUP=576 577 | SQL92_RESERVED_HAVING=577 578 | PLSQL_RESERVED_IDENTIFIED=578 579 | PLSQL_RESERVED_IF=579 580 | SQL92_RESERVED_IN=580 581 | PLSQL_RESERVED_INDEX=581 582 | PLSQL_RESERVED_INDEXES=582 583 | SQL92_RESERVED_INSERT=583 584 | SQL92_RESERVED_INTERSECT=584 585 | SQL92_RESERVED_INTO=585 586 | SQL92_RESERVED_IS=586 587 | SQL92_RESERVED_LIKE=587 588 | PLSQL_RESERVED_LOCK=588 589 | PLSQL_RESERVED_MINUS=589 590 | PLSQL_RESERVED_MODE=590 591 | PLSQL_RESERVED_NOCOMPRESS=591 592 | SQL92_RESERVED_NOT=592 593 | PLSQL_RESERVED_NOWAIT=593 594 | SQL92_RESERVED_NULL=594 595 | SQL92_RESERVED_OF=595 596 | SQL92_RESERVED_ON=596 597 | SQL92_RESERVED_OPTION=597 598 | SQL92_RESERVED_OR=598 599 | SQL92_RESERVED_ORDER=599 600 | SQL92_RESERVED_OVERLAPS=600 601 | SQL92_RESERVED_PRIOR=601 602 | SQL92_RESERVED_PROCEDURE=602 603 | SQL92_RESERVED_PUBLIC=603 604 | PLSQL_RESERVED_RESOURCE=604 605 | SQL92_RESERVED_REVOKE=605 606 | SQL92_RESERVED_SELECT=606 607 | PLSQL_RESERVED_SHARE=607 608 | SQL92_RESERVED_SIZE=608 609 | PLSQL_RESERVED_START=609 610 | PLSQL_RESERVED_TABAUTH=610 611 | SQL92_RESERVED_TABLE=611 612 | SQL92_RESERVED_THE=612 613 | SQL92_RESERVED_THEN=613 614 | SQL92_RESERVED_TO=614 615 | SQL92_RESERVED_TRUE=615 616 | SQL92_RESERVED_UNION=616 617 | SQL92_RESERVED_UNIQUE=617 618 | SQL92_RESERVED_UPDATE=618 619 | SQL92_RESERVED_VALUES=619 620 | SQL92_RESERVED_VIEW=620 621 | PLSQL_RESERVED_VIEWS=621 622 | SQL92_RESERVED_WHEN=622 623 | SQL92_RESERVED_WHERE=623 624 | SQL92_RESERVED_WITH=624 625 | PLSQL_NON_RESERVED_USING=625 626 | PLSQL_NON_RESERVED_MODEL=626 627 | PLSQL_NON_RESERVED_ELSIF=627 628 | PLSQL_NON_RESERVED_PIVOT=628 629 | PLSQL_NON_RESERVED_UNPIVOT=629 630 | REGULAR_ID=630 631 | ZV=631 632 | '..'=1 633 | '=>'=22 634 | '.'=501 635 | '%'=506 636 | '&'=507 637 | '('=508 638 | ')'=509 639 | '**'=510 640 | '*'=511 641 | '+'=512 642 | '-'=513 643 | ','=514 644 | '/'=515 645 | '@'=516 646 | ':='=517 647 | ':'=519 648 | ';'=520 649 | '<='=521 650 | '<'=522 651 | '>='=523 652 | '^'=525 653 | '~'=526 654 | '!'=527 655 | '>'=528 656 | '||'=529 657 | '|'=530 658 | '='=531 659 | '['=532 660 | ']'=533 661 | '_'=534 662 | 'all'=538 663 | 'alter'=539 664 | 'and'=540 665 | 'any'=541 666 | 'as'=542 667 | 'asc'=543 668 | 'begin'=544 669 | 'between'=545 670 | 'by'=546 671 | 'case'=547 672 | 'check'=548 673 | 'clusters'=549 674 | 'colauth'=550 675 | 'compress'=551 676 | 'connect'=552 677 | 'connect_by_root'=553 678 | 'crash'=554 679 | 'create'=555 680 | 'current'=556 681 | 'cursor'=557 682 | 'date'=558 683 | 'declare'=559 684 | 'default'=560 685 | 'delete'=561 686 | 'desc'=562 687 | 'distinct'=563 688 | 'drop'=564 689 | 'else'=565 690 | 'end'=566 691 | 'exception'=567 692 | 'exclusive'=568 693 | 'exists'=569 694 | 'false'=570 695 | 'fetch'=571 696 | 'for'=572 697 | 'from'=573 698 | 'goto'=574 699 | 'grant'=575 700 | 'group'=576 701 | 'having'=577 702 | 'identified'=578 703 | 'if'=579 704 | 'in'=580 705 | 'index'=581 706 | 'indexes'=582 707 | 'insert'=583 708 | 'intersect'=584 709 | 'into'=585 710 | 'is'=586 711 | 'like'=587 712 | 'lock'=588 713 | 'minus'=589 714 | 'mode'=590 715 | 'nocompress'=591 716 | 'not'=592 717 | 'nowait'=593 718 | 'null'=594 719 | 'of'=595 720 | 'on'=596 721 | 'option'=597 722 | 'or'=598 723 | 'order'=599 724 | 'overlaps'=600 725 | 'prior'=601 726 | 'procedure'=602 727 | 'public'=603 728 | 'resource'=604 729 | 'revoke'=605 730 | 'select'=606 731 | 'share'=607 732 | 'size'=608 733 | 'start'=609 734 | 'tabauth'=610 735 | 'table'=611 736 | 'the'=612 737 | 'then'=613 738 | 'to'=614 739 | 'true'=615 740 | 'union'=616 741 | 'unique'=617 742 | 'update'=618 743 | 'values'=619 744 | 'view'=620 745 | 'views'=621 746 | 'when'=622 747 | 'where'=623 748 | 'with'=624 749 | 'using'=625 750 | 'model'=626 751 | 'elsif'=627 752 | 'pivot'=628 753 | 'unpivot'=629 754 | '@!'=631 755 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/.classpath: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/.gitignore: -------------------------------------------------------------------------------- 1 | bin/ -------------------------------------------------------------------------------- /java/src/Antlr4Work/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | Antlr4Work 4 | 5 | 6 | 7 | 8 | 9 | org.eclipse.jdt.core.javabuilder 10 | 11 | 12 | 13 | 14 | 15 | org.eclipse.jdt.core.javanature 16 | 17 | 18 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/.settings/org.eclipse.core.resources.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | encoding/=UTF-8 3 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/.settings/org.eclipse.jdt.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled 3 | org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 4 | org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve 5 | org.eclipse.jdt.core.compiler.compliance=1.8 6 | org.eclipse.jdt.core.compiler.debug.lineNumber=generate 7 | org.eclipse.jdt.core.compiler.debug.localVariable=generate 8 | org.eclipse.jdt.core.compiler.debug.sourceFile=generate 9 | org.eclipse.jdt.core.compiler.problem.assertIdentifier=error 10 | org.eclipse.jdt.core.compiler.problem.enumIdentifier=error 11 | org.eclipse.jdt.core.compiler.source=1.8 12 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/.settings/org.jboss.ide.eclipse.as.core.prefs: -------------------------------------------------------------------------------- 1 | eclipse.preferences.version=1 2 | org.jboss.ide.eclipse.as.core.singledeployable.deployableList= 3 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/build.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/config.properties: -------------------------------------------------------------------------------- 1 | default_file_name=d\:\\work\\Other\\antlr4-oracle\\tests\\call_graph_test\\pkg1.pkb 2 | concatenation_format = format('%s', tvarchararray(%s)) 3 | constant_format=\ %-32s CONSTANT VARCHAR2%-5s \:\= %s; 4 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/example/PlSqlCallGraph.java: -------------------------------------------------------------------------------- 1 | package org.example; 2 | 3 | import java.io.FileInputStream; 4 | import java.io.IOException; 5 | import java.util.Properties; 6 | import java.util.logging.Level; 7 | 8 | import org.antlr.v4.runtime.ANTLRInputStream; 9 | import org.plsql.utils.*; 10 | import org.plsql.*; 11 | import org.plsql.visitor.*; 12 | import org.plsql.visitor.CallGraphVisitor.VisitMode; 13 | 14 | public class PlSqlCallGraph { 15 | 16 | private static Properties prop = new Properties(); 17 | 18 | public static void processFile(String fileName) throws IOException { 19 | String parsedSql = null; 20 | PlSqlParserTree tree = null; 21 | 22 | System.out.println("Start " + fileName); 23 | 24 | FileInputStream parseFile = new FileInputStream(fileName); 25 | try { 26 | tree = new PlSqlParserTree(new ANTLRInputStream(parseFile)); 27 | 28 | CallGraphVisitor visitor = new CallGraphVisitor(tree); 29 | 30 | visitor.visitMode = VisitMode.FIRST_PASS; 31 | visitor.visit(); 32 | 33 | CallGraphVisitor.idMap.forEach((k, v) -> System.out.println("Key: [" + k + "] = Value is " + v)); 34 | 35 | visitor.visitMode = VisitMode.SECOND_PASS; 36 | visitor.visit(); 37 | 38 | parsedSql = tree.getResultText(); 39 | // обработанный текст 40 | // System.out.println(parsedSql); 41 | } finally { 42 | parseFile.close(); 43 | } 44 | 45 | // PlSqlUtils.writeToFile(fileName + "_2", parsedSql); 46 | 47 | System.out.println("End"); 48 | } 49 | 50 | public static void main(String[] args) { 51 | prop = PlSqlUtils.loadProperties(); 52 | 53 | if (args.length > 0) { 54 | for (int i = 0; i < args.length; i++) { 55 | try { 56 | processFile(args[i]); 57 | } catch (IOException e) { 58 | PlSqlUtils.logger.log(Level.WARNING, "Error processing " + args[i], e); 59 | } 60 | } 61 | } else { 62 | String fileName = prop.getProperty("default_file_name"); 63 | 64 | if ((fileName != null) && (!fileName.isEmpty())) { 65 | try { 66 | processFile(fileName); 67 | } catch (IOException e) { 68 | PlSqlUtils.logger.log(Level.WARNING, "Error processing " + fileName, e); 69 | } 70 | } else { 71 | System.out.println("No files to parse"); 72 | return; 73 | } 74 | } 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/example/PlSqlLiteralExtractor.java: -------------------------------------------------------------------------------- 1 | package org.example; 2 | 3 | import java.io.FileInputStream; 4 | import java.io.IOException; 5 | import java.util.Properties; 6 | import java.util.logging.Level; 7 | 8 | import org.antlr.v4.runtime.ANTLRInputStream; 9 | import org.plsql.utils.*; 10 | import org.plsql.*; 11 | import org.plsql.visitor.*; 12 | 13 | public class PlSqlLiteralExtractor { 14 | 15 | private static Properties prop = new Properties(); 16 | 17 | public static void processFile(String fileName) throws IOException { 18 | String parsedSql; 19 | PlSqlParserTree tree = null; 20 | 21 | System.out.println("Start " + fileName); 22 | String concatenationFormat = prop.getProperty("concatenation_format"); 23 | String constantFormat = prop.getProperty("constant_format"); 24 | 25 | FileInputStream parseFile = new FileInputStream(fileName); 26 | try { 27 | // первый проход для сжатия конкатенаций строк в стиль format('%1', [p1]) 28 | tree = new PlSqlParserTree(new ANTLRInputStream(parseFile)); 29 | ConcatenationVisitor visitor = new ConcatenationVisitor(tree); 30 | if ((concatenationFormat != null) && (!concatenationFormat.isEmpty())) { 31 | visitor.setConcatenationFormat(concatenationFormat); 32 | } 33 | visitor.visit(); 34 | 35 | parsedSql = tree.getResultText(); 36 | // обработанный текст первого прохода 37 | // System.out.println(parsedSql); 38 | } finally { 39 | parseFile.close(); 40 | } 41 | 42 | PlSqlUtils.writeToFile(fileName + "_2", parsedSql); 43 | 44 | // вторая стадия 45 | System.out.println("--------------------------------"); 46 | 47 | // второй проход - перенос строковых литералов вверх 48 | tree = new PlSqlParserTree(new ANTLRInputStream(parsedSql)); 49 | StringVisitor visitor = new StringVisitor(tree); 50 | if ((constantFormat != null) && (!constantFormat.isEmpty())) { 51 | visitor.setConstantFormat(constantFormat); 52 | } 53 | visitor.visit(); 54 | 55 | // добавление блока констант в DECLARE 56 | String declares = visitor.createConstants(); 57 | 58 | parsedSql = tree.getResultText(); 59 | 60 | System.out.println(declares); 61 | 62 | // System.out.println(parsedSql); 63 | PlSqlUtils.writeToFile(fileName + "_3", parsedSql); 64 | 65 | System.out.println("End"); 66 | } 67 | 68 | /** 69 | * Нужно найти строки без конкатенаций или все конкатенации, где есть строка 70 | * и преобразовать это к Format('%1 %2 %3', [p1, p2, p3]) 71 | */ 72 | public static void main(String[] args) { 73 | prop = PlSqlUtils.loadProperties(); 74 | 75 | if (args.length > 0) { 76 | for (int i = 0; i < args.length; i++) { 77 | try { 78 | processFile(args[i]); 79 | } catch (IOException e) { 80 | PlSqlUtils.logger.log(Level.WARNING, "Error processing " + args[i], e); 81 | } 82 | } 83 | } else { 84 | String fileName = prop.getProperty("default_file_name"); 85 | 86 | if ((fileName != null) && (!fileName.isEmpty())) { 87 | try { 88 | processFile(fileName); 89 | } catch (IOException e) { 90 | PlSqlUtils.logger.log(Level.WARNING, "Error processing " + fileName, e); 91 | } 92 | } else { 93 | System.out.println("No files to parse"); 94 | return; 95 | } 96 | } 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/PlSqlParserTree.java: -------------------------------------------------------------------------------- 1 | package org.plsql; 2 | 3 | import org.antlr.generated.PlSqlLexer; 4 | import org.antlr.generated.PlSqlParser; 5 | import org.antlr.v4.runtime.ANTLRInputStream; 6 | import org.antlr.v4.runtime.CommonTokenStream; 7 | import org.antlr.v4.runtime.TokenStreamRewriter; 8 | import org.antlr.v4.runtime.tree.ParseTree; 9 | import org.plsql.utils.PlSqlErrorListener; 10 | 11 | /** 12 | * Класс для объединения всей логики парсинга для использования его в 13 | * PlSqlRuleVisitor 14 | */ 15 | public class PlSqlParserTree { 16 | 17 | private ANTLRInputStream input; 18 | private PlSqlLexer lexer; 19 | private CommonTokenStream tokens; 20 | private PlSqlParser parser; 21 | private TokenStreamRewriter rewriter; 22 | private ParseTree parseTree; 23 | 24 | public ANTLRInputStream getInput() { 25 | return input; 26 | } 27 | 28 | public TokenStreamRewriter getRewriter() { 29 | return rewriter; 30 | } 31 | 32 | public ParseTree getParseTree() { 33 | return parseTree; 34 | } 35 | 36 | public PlSqlParserTree(ANTLRInputStream input) { 37 | this.input = input; 38 | parseInput(); 39 | } 40 | 41 | // основная логика парсера 42 | private ParseTree parseInput() { 43 | lexer = new PlSqlLexer(input); 44 | lexer.removeErrorListeners(); 45 | lexer.addErrorListener(new PlSqlErrorListener()); 46 | 47 | tokens = new CommonTokenStream(lexer); 48 | 49 | parser = new PlSqlParser(tokens); 50 | parser.removeErrorListeners(); 51 | parser.addErrorListener(new PlSqlErrorListener()); 52 | 53 | rewriter = new TokenStreamRewriter(tokens); 54 | 55 | parseTree = parser.compilation_unit(); 56 | 57 | return parseTree; 58 | } 59 | 60 | public String getResultText() { 61 | return rewriter.getText(); 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/utils/PlSqlErrorListener.java: -------------------------------------------------------------------------------- 1 | package org.plsql.utils; 2 | 3 | import java.util.List; 4 | 5 | import org.antlr.generated.*; 6 | 7 | import org.antlr.v4.runtime.BaseErrorListener; 8 | import org.antlr.v4.runtime.Parser; 9 | import org.antlr.v4.runtime.RecognitionException; 10 | import org.antlr.v4.runtime.Recognizer; 11 | import org.antlr.v4.runtime.Token; 12 | import org.antlr.v4.runtime.TokenStream; 13 | 14 | public class PlSqlErrorListener extends BaseErrorListener { 15 | 16 | public int lastError = -1; 17 | 18 | @Override 19 | public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { 20 | Parser parser = (Parser) recognizer; 21 | String name = parser.getSourceName(); 22 | TokenStream tokens = parser.getInputStream(); 23 | 24 | Token offSymbol = (Token) offendingSymbol; 25 | int thisError = offSymbol.getTokenIndex(); 26 | if (offSymbol.getType() == -1 && thisError == tokens.size() - 1) { 27 | System.err.println("DEBUG: " + name + ": Incorrect error: " + msg); 28 | return; 29 | } 30 | String offSymName = PlSqlLexer.VOCABULARY.getSymbolicName(offSymbol.getType()); 31 | 32 | List stack = parser.getRuleInvocationStack(); 33 | // Collections.reverse(stack); 34 | 35 | System.err.println("Source name: " + name); 36 | System.err.println("Rule stack: " + stack); 37 | System.err.println("At line " + line + ":" + charPositionInLine + " at " + offSymName + ": " + msg); 38 | 39 | if (thisError > lastError + 10) { 40 | lastError = thisError - 10; 41 | } 42 | for (int idx = lastError + 1; idx <= thisError; idx++) { 43 | Token token = tokens.get(idx); 44 | if (token.getChannel() != Token.HIDDEN_CHANNEL) 45 | System.err.println(" " + token.toString()); 46 | } 47 | lastError = thisError; 48 | } 49 | } -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/utils/PlSqlUtils.java: -------------------------------------------------------------------------------- 1 | package org.plsql.utils; 2 | 3 | import java.io.FileInputStream; 4 | import java.io.FileNotFoundException; 5 | import java.io.IOException; 6 | import java.io.InputStream; 7 | import java.io.PrintWriter; 8 | import java.io.UnsupportedEncodingException; 9 | import java.util.Properties; 10 | import java.util.logging.Level; 11 | import java.util.logging.Logger; 12 | 13 | import org.antlr.generated.PlSqlParser; 14 | import org.antlr.v4.runtime.ANTLRInputStream; 15 | import org.antlr.v4.runtime.ParserRuleContext; 16 | import org.antlr.v4.runtime.misc.Interval; 17 | 18 | public class PlSqlUtils { 19 | // счетчик для непонятных идентификаторов, которые не вычислить 20 | private static int declareSeq = 0; 21 | 22 | // допустимые символы для генерации идентификатора Oracle 23 | private static final String validIdentifierChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$#_"; 24 | 25 | public static Logger logger = Logger.getLogger("PlSqlLogger"); 26 | 27 | public static Properties loadProperties() { 28 | InputStream input = null; 29 | Properties prop = new Properties(); 30 | 31 | try { 32 | input = new FileInputStream("config.properties"); 33 | prop.load(input); 34 | } catch (IOException e) { 35 | PlSqlUtils.logger.log(Level.SEVERE, "Error loading config.properties", e); 36 | } 37 | 38 | if (input != null) { 39 | try { 40 | input.close(); 41 | } catch (IOException e) { 42 | PlSqlUtils.logger.log(Level.SEVERE, "Error closing config.properties", e); 43 | } 44 | } 45 | 46 | return prop; 47 | } 48 | 49 | 50 | public static String unquote(String s) { 51 | if (s != null && ((s.startsWith("\"") && s.endsWith("\"")) || (s.startsWith("'") && s.endsWith("'")))) { 52 | s = s.substring(1, s.length() - 1); 53 | } 54 | return s; 55 | } 56 | 57 | // генерация имени идентификатора по строке данных 58 | public static String makeOraIdentifier(String str) { 59 | StringBuilder sb = new StringBuilder(str.length() * 2); 60 | String tr; 61 | 62 | // allowed $ # _, maximum 30 symbols 63 | str = str.toLowerCase().trim(); 64 | str = str.replace("%s", "$"); 65 | str = str.replaceAll("[ .,:;-=]+", "_"); // чтобы разделить текст 66 | 67 | for (char ch : str.toCharArray()) { 68 | if (validIdentifierChars.indexOf(ch) >= 0) { 69 | sb.append(ch); 70 | } else { 71 | // недопустимый символ 72 | tr = Translit.cyr2lat(ch); 73 | if (!tr.isEmpty() && (validIdentifierChars.indexOf(tr.charAt(0)) >= 0)) { 74 | sb.append(tr); 75 | } 76 | } 77 | } 78 | 79 | tr = sb.toString().trim().replaceAll("_$", ""); 80 | 81 | if (tr.isEmpty()) { 82 | tr = "gen_" + Integer.toString(++declareSeq); 83 | } 84 | tr = "l$" + tr.replaceAll("_+", "_"); 85 | 86 | if (tr.length() > 30) 87 | tr = tr.substring(0, 29); 88 | 89 | tr = tr.replaceAll("_$", ""); 90 | 91 | return tr; 92 | } 93 | 94 | // public static String getFileContent(FileInputStream fis, String encoding) throws IOException { 95 | // try (BufferedReader br = new BufferedReader(new InputStreamReader(fis, encoding))) { 96 | // StringBuilder sb = new StringBuilder(); 97 | // String line; 98 | // while ((line = br.readLine()) != null) { 99 | // sb.append(line); 100 | // sb.append('\n'); 101 | // } 102 | // return sb.toString(); 103 | // } 104 | //} 105 | 106 | public static void writeToFile(String fileName, String text) throws FileNotFoundException, UnsupportedEncodingException { 107 | PrintWriter writer = new PrintWriter(fileName); 108 | writer.println(text); 109 | writer.close(); 110 | } 111 | 112 | // возвращает оригинальный текст токена из исходного файла 113 | public static String getOriginalText(ANTLRInputStream input, ParserRuleContext ctx) { 114 | int a = ctx.start.getStartIndex(); 115 | int b = ctx.stop.getStopIndex(); 116 | Interval interval = new Interval(a, b); 117 | return input.getText(interval); 118 | } 119 | 120 | public static int getLine(/*ANTLRInputStream input,*/ ParserRuleContext ctx) { 121 | //Interval sourceInterval = ctx.getSourceInterval(); 122 | //Token firstToken = input.get(sourceInterval.a); 123 | //int line = firstToken.getLine(); 124 | return ctx.start.getLine(); 125 | } 126 | 127 | // логгирование правила (для конкатенаций) 128 | public static void logCharContext(String prefix, ParserRuleContext ctx) { 129 | System.out.println(prefix + ctx.getText() + ", [startType: " + PlSqlParser.VOCABULARY.getSymbolicName(ctx.start.getType()) + ", childs: " 130 | + ctx.getChildCount() + "]"); 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/utils/Translit.java: -------------------------------------------------------------------------------- 1 | package org.plsql.utils; 2 | 3 | public class Translit { 4 | public static String cyr2lat(char ch) { 5 | switch (ch) { 6 | case 'А': 7 | return "A"; 8 | case 'Б': 9 | return "B"; 10 | case 'В': 11 | return "V"; 12 | case 'Г': 13 | return "G"; 14 | case 'Д': 15 | return "D"; 16 | case 'Е': 17 | return "E"; 18 | case 'Ё': 19 | return "JE"; 20 | case 'Ж': 21 | return "ZH"; 22 | case 'З': 23 | return "Z"; 24 | case 'И': 25 | return "I"; 26 | case 'Й': 27 | return "Y"; 28 | case 'К': 29 | return "K"; 30 | case 'Л': 31 | return "L"; 32 | case 'М': 33 | return "M"; 34 | case 'Н': 35 | return "N"; 36 | case 'О': 37 | return "O"; 38 | case 'П': 39 | return "P"; 40 | case 'Р': 41 | return "R"; 42 | case 'С': 43 | return "S"; 44 | case 'Т': 45 | return "T"; 46 | case 'У': 47 | return "U"; 48 | case 'Ф': 49 | return "F"; 50 | case 'Х': 51 | //return "KH"; 52 | return "H"; 53 | case 'Ц': 54 | return "C"; 55 | case 'Ч': 56 | return "CH"; 57 | case 'Ш': 58 | return "SH"; 59 | case 'Щ': 60 | return "JSH"; 61 | case 'Ъ': 62 | //return "HH"; 63 | return ""; 64 | case 'Ы': 65 | //return "IH"; 66 | return "Y"; 67 | case 'Ь': 68 | //return "JH"; 69 | return ""; 70 | case 'Э': 71 | //return "EH"; 72 | return "E"; 73 | case 'Ю': 74 | return "JU"; 75 | case 'Я': 76 | return "JA"; 77 | case 'а': 78 | return "a"; 79 | case 'б': 80 | return "b"; 81 | case 'в': 82 | return "v"; 83 | case 'г': 84 | return "g"; 85 | case 'д': 86 | return "d"; 87 | case 'е': 88 | return "e"; 89 | case 'ё': 90 | return "je"; 91 | case 'ж': 92 | return "zh"; 93 | case 'з': 94 | return "z"; 95 | case 'и': 96 | return "i"; 97 | case 'й': 98 | return "y"; 99 | case 'к': 100 | return "k"; 101 | case 'л': 102 | return "l"; 103 | case 'м': 104 | return "m"; 105 | case 'н': 106 | return "n"; 107 | case 'о': 108 | return "o"; 109 | case 'п': 110 | return "p"; 111 | case 'р': 112 | return "r"; 113 | case 'с': 114 | return "s"; 115 | case 'т': 116 | return "t"; 117 | case 'у': 118 | return "u"; 119 | case 'ф': 120 | return "f"; 121 | case 'х': 122 | //return "kh"; 123 | return "h"; 124 | case 'ц': 125 | return "c"; 126 | case 'ч': 127 | return "ch"; 128 | case 'ш': 129 | return "sh"; 130 | case 'щ': 131 | return "jsh"; 132 | case 'ъ': 133 | //return "hh"; 134 | return ""; 135 | case 'ы': 136 | //return "ih"; 137 | return "y"; 138 | case 'ь': 139 | //return "jh"; 140 | return ""; 141 | case 'э': 142 | //return "eh"; 143 | return "e"; 144 | case 'ю': 145 | return "ju"; 146 | case 'я': 147 | return "ja"; 148 | default: 149 | return String.valueOf(ch); 150 | } 151 | } 152 | 153 | public static String cyr2lat(String s) { 154 | StringBuilder sb = new StringBuilder(s.length() * 2); 155 | for (char ch : s.toCharArray()) { 156 | sb.append(cyr2lat(ch)); 157 | } 158 | return sb.toString(); 159 | } 160 | } -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/visitor/CallGraphVisitor.java: -------------------------------------------------------------------------------- 1 | package org.plsql.visitor; 2 | 3 | import java.text.Format; 4 | import java.util.HashMap; 5 | import java.util.Map; 6 | 7 | import org.antlr.generated.PlSqlParser.Function_callContext; 8 | import org.antlr.generated.PlSqlParser.Function_specContext; 9 | import org.antlr.generated.PlSqlParser.Id_expressionContext; 10 | import org.antlr.generated.PlSqlParser.Package_bodyContext; 11 | import org.antlr.generated.PlSqlParser.Package_nameContext; 12 | import org.antlr.generated.PlSqlParser.Package_specContext; 13 | import org.antlr.generated.PlSqlParser.Procedure_specContext; 14 | import org.antlr.generated.PlSqlParser.Routine_clauseContext; 15 | import org.antlr.generated.PlSqlParser.StatementContext; 16 | import org.antlr.generated.PlSqlParser.Unit_statementContext; 17 | import org.antlr.v4.runtime.ParserRuleContext; 18 | import org.plsql.PlSqlParserTree; 19 | import org.plsql.utils.PlSqlUtils; 20 | 21 | public class CallGraphVisitor extends PlSqlRuleVisitor { 22 | public enum ExpressionType { 23 | PACKAGE, FUNCTION, PROCEDURE, VARIABLE, UNKNOWN 24 | } 25 | 26 | public enum VisitMode { 27 | FIRST_PASS, SECOND_PASS 28 | } 29 | 30 | public VisitMode visitMode = VisitMode.FIRST_PASS; 31 | 32 | public static Map idMap = new HashMap(); 33 | private String currentSchema = null; 34 | 35 | public CallGraphVisitor(PlSqlParserTree tree) { 36 | super(tree); 37 | } 38 | 39 | private void logContext(ParserRuleContext ctx) { 40 | System.out.printf("%04d > %s\n",ctx.start.getLine(), PlSqlUtils.getOriginalText(input, ctx)); 41 | } 42 | 43 | private String getFullProcName(ParserRuleContext ctx) { 44 | ParserRuleContext c = ctx; 45 | 46 | String fullName = ""; 47 | 48 | //fullName = ctx.getText(); 49 | 50 | while (c != null) { 51 | if (c instanceof Function_specContext) { 52 | Function_specContext fc = (Function_specContext) c; 53 | fullName = PlSqlUtils.getOriginalText(input, fc.function_name()) + "->Type=FUNCTION:" + fullName; 54 | } else if (c instanceof Procedure_specContext) { 55 | Procedure_specContext pc = (Procedure_specContext) c; 56 | fullName = PlSqlUtils.getOriginalText(input, pc.procedure_name()) + "->Type=PROCEDURE:" + fullName; 57 | } else if (c instanceof Package_bodyContext) { 58 | Package_bodyContext pbc = (Package_bodyContext) c; 59 | // TODO: здесь индекс у списка пакетов! 60 | fullName = PlSqlUtils.getOriginalText(input, pbc.package_name(0)) + "->TYPE=PACKAGE:" + fullName; 61 | break; 62 | } 63 | c = c.getParent(); 64 | } 65 | 66 | return fullName; 67 | } 68 | 69 | @Override 70 | public Void visitPackage_name(Package_nameContext ctx) { 71 | if (visitMode == VisitMode.FIRST_PASS) { 72 | String name = PlSqlUtils.getOriginalText(input, ctx); 73 | System.out.println(PlSqlUtils.getLine(ctx) + " PACKAGE " + name); 74 | 75 | currentSchema = PlSqlUtils.getOriginalText(input, ctx.schema_name()); 76 | System.out.println(" SCHEMA: " + currentSchema); 77 | 78 | idMap.put(name, ExpressionType.PACKAGE); 79 | // logContext(ctx); 80 | } 81 | 82 | return super.visitPackage_name(ctx); 83 | } 84 | 85 | @Override 86 | public Void visitFunction_spec(Function_specContext ctx) { 87 | if (visitMode == VisitMode.FIRST_PASS) { 88 | String name = getFullProcName(ctx/*.function_name()*/); 89 | System.out.println(PlSqlUtils.getLine(ctx) + " FUNCTION " + name); 90 | 91 | idMap.put(name, ExpressionType.FUNCTION); 92 | // logContext(ctx); 93 | } 94 | return super.visitFunction_spec(ctx); 95 | } 96 | 97 | @Override 98 | public Void visitProcedure_spec(Procedure_specContext ctx) { 99 | if (visitMode == VisitMode.FIRST_PASS) { 100 | String name = getFullProcName(ctx/*.procedure_name()*/); 101 | System.out.println(PlSqlUtils.getLine(ctx) + " PROCEDURE " + name); 102 | 103 | idMap.put(name, ExpressionType.PROCEDURE); 104 | // logContext(ctx); 105 | } 106 | return super.visitProcedure_spec(ctx); 107 | } 108 | 109 | @Override 110 | public Void visitRoutine_clause(Routine_clauseContext ctx) { 111 | String name = getFullProcName(ctx.routine_name()); 112 | System.out.println("-> call routine " + name); 113 | 114 | return super.visitRoutine_clause(ctx); 115 | } 116 | 117 | // @Override 118 | // public Void visitFunction_call(Function_callContext ctx) { 119 | // // String name = getFullProcName(ctx.routine_name()); 120 | // // System.out.println("-> call " + name); 121 | // 122 | // return super.visitFunction_call(ctx); 123 | // } 124 | 125 | private boolean isFunctionOrProcedureSpec(Id_expressionContext ctx) { 126 | ParserRuleContext c = ctx; 127 | 128 | while (c != null) { 129 | if ((c instanceof Function_specContext) || (c instanceof Procedure_specContext)) { 130 | return true; 131 | } else if (c instanceof StatementContext) { 132 | return false; 133 | } 134 | c = c.getParent(); 135 | } 136 | return false; 137 | } 138 | 139 | // здесь нужно отловить вызов функции 140 | // она должна быть или определена выше, или должен быть указан пакет, или это глобальная функция 141 | @Override 142 | public Void visitId_expression(Id_expressionContext ctx) { 143 | if (visitMode == VisitMode.SECOND_PASS) { 144 | String name = getFullProcName(ctx); 145 | logContext(ctx); 146 | 147 | // если в хеше есть определение, то это может быть вызов функции 148 | ExpressionType type = idMap.get(name); 149 | //System.out.println(" // " + name + " type " + type); 150 | 151 | if ((type == ExpressionType.FUNCTION) || (type == ExpressionType.PROCEDURE)) { 152 | // вызов функции, которая попадалась ранее 153 | if (!isFunctionOrProcedureSpec(ctx)) { 154 | System.out.printf("\t->> call [%s]\n", name); 155 | } 156 | } else if (type == ExpressionType.PACKAGE) { 157 | System.out.printf("->> package [%s]\n", name); 158 | } else { 159 | // при спуске по дереву, для процедур и функций заходит сюда, но это не требуется 160 | if (!isFunctionOrProcedureSpec(ctx)) { 161 | System.out.printf("- found new type [%s]", name + " [" + ctx.getClass().toString() + "]"); 162 | } 163 | } 164 | } 165 | return super.visitId_expression(ctx); 166 | } 167 | } 168 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/visitor/ConcatenationVisitor.java: -------------------------------------------------------------------------------- 1 | package org.plsql.visitor; 2 | 3 | import java.util.ArrayList; 4 | 5 | import org.antlr.generated.PlSqlParser; 6 | import org.antlr.generated.PlSqlParser.ConcatenationContext; 7 | import org.antlr.v4.runtime.ParserRuleContext; 8 | import org.plsql.PlSqlParserTree; 9 | import org.plsql.utils.PlSqlUtils; 10 | 11 | public class ConcatenationVisitor extends PlSqlRuleVisitor { 12 | 13 | // default 14 | // use: CREATE OR REPLACE TYPE tvarchararray AS TABLE of VARCHAR2(256) 15 | private String concatenationFormat = "format('%s', tvarchararray(%s))"; 16 | 17 | public void setConcatenationFormat(String concatenationFormat) { 18 | this.concatenationFormat = concatenationFormat; 19 | System.out.println("Concatenation format: " + concatenationFormat); 20 | } 21 | 22 | public ConcatenationVisitor(PlSqlParserTree tree) { 23 | super(tree); 24 | } 25 | 26 | // Сжатие конкатенаций в одну строку 27 | @Override 28 | public Void visitConcatenation(ConcatenationContext ctx) { 29 | Void res = super.visitConcatenation(ctx); 30 | 31 | PlSqlUtils.logCharContext("# :concatenation: ", ctx); 32 | 33 | System.out.println("- original: " + PlSqlUtils.getOriginalText(input, ctx)); // CHAR_STRING 34 | 35 | // System.out.println("-- " + ctx.start.getText() + " : " + 36 | 37 | // склеивание конкатенаций внутри токена 38 | if (ctx.getChildCount() > 1) { 39 | int i = 1; 40 | 41 | ArrayList replacer = new ArrayList(); 42 | ArrayList parameters = new ArrayList(); 43 | 44 | // все токены в конкатенации 45 | for (ParserRuleContext r : ctx.getRuleContexts(ParserRuleContext.class)) { 46 | 47 | PlSqlUtils.logCharContext(" --> ", r); 48 | 49 | if (r.start.getType() == PlSqlParser.CHAR_STRING) { 50 | // это строка - вставляется внутрь строки format('эта строка') 51 | replacer.add(PlSqlUtils.unquote(PlSqlUtils.getOriginalText(input, r))); 52 | } else if (r.start.getType() != PlSqlParser.CONCATENATION_OP) { 53 | // это выражение - вставляется с использованием параметра format('%1', [p1]) 54 | replacer.add("%" + Integer.toString(i++)); 55 | parameters.add(PlSqlUtils.getOriginalText(input, r)); 56 | } 57 | } 58 | 59 | // замена всей найденной конструкции на описанный формат 60 | String newText = String.format(concatenationFormat, String.join("", replacer), String.join(", ", parameters)); 61 | 62 | System.out.println("- rewritten: " + newText); 63 | 64 | rewriter.replace(ctx.start, ctx.stop, newText); 65 | } else { 66 | System.out.println("- skip: " + ctx.getText()); 67 | } 68 | 69 | return res; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/visitor/PlSqlRuleVisitor.java: -------------------------------------------------------------------------------- 1 | package org.plsql.visitor; 2 | 3 | import org.antlr.generated.PlSqlBaseVisitor; 4 | import org.antlr.v4.runtime.ANTLRInputStream; 5 | import org.antlr.v4.runtime.TokenStreamRewriter; 6 | import org.antlr.v4.runtime.tree.ParseTree; 7 | import org.plsql.PlSqlParserTree; 8 | 9 | /** 10 | * Базовый класс для наследования всех новых *Visitor 11 | */ 12 | public class PlSqlRuleVisitor extends PlSqlBaseVisitor { 13 | protected ANTLRInputStream input; 14 | protected TokenStreamRewriter rewriter; 15 | protected ParseTree parseTree; 16 | 17 | @SuppressWarnings("unused") 18 | private PlSqlRuleVisitor() { 19 | // нельзя создавать без параметров 20 | } 21 | 22 | public PlSqlRuleVisitor(PlSqlParserTree tree) { 23 | input = tree.getInput(); 24 | rewriter = tree.getRewriter(); 25 | parseTree = tree.getParseTree(); 26 | } 27 | 28 | public Void visit() { 29 | return super.visit(parseTree); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /java/src/Antlr4Work/src/org/plsql/visitor/StringVisitor.java: -------------------------------------------------------------------------------- 1 | package org.plsql.visitor; 2 | 3 | import java.util.HashMap; 4 | import java.util.Map; 5 | 6 | import org.antlr.generated.PlSqlParser; 7 | import org.antlr.generated.PlSqlParser.ConcatenationContext; 8 | import org.antlr.generated.PlSqlParser.Declare_specContext; 9 | import org.antlr.generated.PlSqlParser.Is_or_asContext; 10 | import org.antlr.v4.runtime.ParserRuleContext; 11 | import org.antlr.v4.runtime.Token; 12 | import org.plsql.PlSqlParserTree; 13 | import org.plsql.utils.PlSqlUtils; 14 | 15 | public class StringVisitor extends PlSqlRuleVisitor { 16 | 17 | // default 18 | private String constantFormat = " %-32s CONSTANT VARCHAR2%-5s := %s;\n"; 19 | 20 | public void setConstantFormat(String constantFormat) { 21 | this.constantFormat = constantFormat + "\n"; 22 | System.out.println("Constant format: " + constantFormat); 23 | } 24 | 25 | public StringVisitor(PlSqlParserTree tree) { 26 | super(tree); 27 | } 28 | 29 | // токен, куда размещать все найденные строки 30 | // будет или в DECLARE или в начале пакета IS | AS 31 | private Token declareToken; 32 | 33 | // здесь будет блок констант в виде текста 34 | private StringBuilder declares; 35 | private HashMap constants = new HashMap(); 36 | 37 | // ищет ближаюшую функцию или процедуру, чтобы узнать, где используется константа (для удобства логгирования) 38 | public ParserRuleContext findFunctionOrProcedure(ParserRuleContext ctx) { 39 | ParserRuleContext c = ctx; 40 | 41 | while (c != null) { 42 | if ((c.start.getType() == PlSqlParser.FUNCTION) || (c.start.getType() == PlSqlParser.PROCEDURE)) { 43 | return c.getChild(ParserRuleContext.class, 0); 44 | } 45 | c = (ParserRuleContext) c.parent; 46 | } 47 | 48 | return null; 49 | } 50 | 51 | // создание блока констант 52 | public String createConstants() { 53 | declares = new StringBuilder(); 54 | 55 | String inDeclare, constantName, originalText; 56 | 57 | declares.insert(0, "\n --- autogenerated constants ---\n"); 58 | for (Map.Entry e : constants.entrySet()) { 59 | constantName = e.getKey(); 60 | originalText = e.getValue(); 61 | 62 | inDeclare = String.format(constantFormat, constantName, "(" + Integer.toString(originalText.length()) + ")", originalText, 0); 63 | declares.append(inDeclare); 64 | } 65 | 66 | declares.append(" --- autogenerated constants ---\n"); 67 | 68 | // записывает полученный блок констант в исходник 69 | rewriter.insertAfter(declareToken, declares); 70 | 71 | return declares.toString(); 72 | } 73 | 74 | // Поиск первого упоминания DECLARE 75 | @Override 76 | public Void visitDeclare_spec(Declare_specContext ctx) { 77 | if (declareToken == null) { 78 | ParserRuleContext parentRule = (ParserRuleContext) ctx.parent; 79 | declareToken = parentRule.start; 80 | System.out.println(" DECLARE => " + declareToken.getText()); 81 | } 82 | return super.visitDeclare_spec(ctx); 83 | } 84 | 85 | // Поиск первого упоминания AS или IS 86 | @Override 87 | public Void visitIs_or_as(Is_or_asContext ctx) { 88 | if (declareToken == null) { 89 | declareToken = ctx.start; 90 | System.out.println(" DECLARE => " + declareToken.getText()); 91 | } 92 | return super.visitIs_or_as(ctx); 93 | } 94 | 95 | // Сжатие конкатенаций в одну строку 96 | @Override 97 | public Void visitConcatenation(ConcatenationContext ctx) { 98 | Void res = super.visitConcatenation(ctx); 99 | 100 | PlSqlUtils.logCharContext("# :concatenation: ", ctx); 101 | 102 | System.out.println("- original: " + PlSqlUtils.getOriginalText(input, ctx)); // CHAR_STRING 103 | 104 | // System.out.println("-- " + ctx.start.getText() + " : " + 105 | 106 | if ((ctx.getChildCount() == 1) && (ctx.start.getType() == PlSqlParser.CHAR_STRING)) { 107 | // все остальные товарищи (могут быть и цифры, потому, надо 108 | // проверять тип) 109 | 110 | // все это нужно пихать константами в DECLARE 111 | String originalText = PlSqlUtils.unquote(PlSqlUtils.getOriginalText(input, ctx)); 112 | 113 | if (!originalText.isEmpty()) { 114 | ParserRuleContext fnName = findFunctionOrProcedure(ctx); 115 | String constantName = PlSqlUtils.makeOraIdentifier(originalText); 116 | 117 | originalText = String.format("'%s' /* %s */", originalText, fnName != null ? fnName.start.getText() : ""); 118 | 119 | System.out.println("==> " + constantName + " :: " + originalText); 120 | 121 | String existedValue = constants.get(constantName); 122 | 123 | // новая константа 124 | if (existedValue == null) { 125 | constants.put(constantName, originalText); 126 | } else { 127 | // константа есть, но значение отличается 128 | if (!existedValue.equals(constantName)) { 129 | int i = 1; 130 | // обрезает, чтобы вставить номер 131 | constantName = constantName.substring(0, constantName.length() >= 28 ? 28 : constantName.length()); 132 | 133 | // поиск похожих названий 134 | for (String key : constants.keySet()) { 135 | if (constantName.equals(key.subSequence(0, key.length() >= 28 ? 28 : key.length()))) { 136 | i++; 137 | } 138 | } 139 | constantName += Integer.toString(i); 140 | constants.put(constantName, originalText); 141 | } else { 142 | // дубликат - просто добавит комментарий 143 | constants.replace(constantName, originalText + "' /* line: " + ctx.start.getLine() + " */"); 144 | } 145 | } 146 | 147 | // заменяет литерал на имя константы 148 | rewriter.replace(ctx.start, ctx.stop, constantName); 149 | } 150 | } else { 151 | System.out.println("- skip: " + ctx.getText()); 152 | } 153 | 154 | return res; 155 | } 156 | } 157 | -------------------------------------------------------------------------------- /java/src/RemoteSystemsTempFiles/.project: -------------------------------------------------------------------------------- 1 | 2 | 3 | RemoteSystemsTempFiles 4 | 5 | 6 | 7 | 8 | 9 | 10 | org.eclipse.rse.ui.remoteSystemsTempNature 11 | 12 | 13 | -------------------------------------------------------------------------------- /runners/analyze_files.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | current_dir=$(dirname $0) 3 | 4 | ############################################################################### 5 | # batch process array of files 6 | ############################################################################### 7 | # $1 - path to files 8 | # $2 - files mask 9 | ############################################################################### 10 | files=($(find $1 -iname $2)) 11 | files_len=${#files[@]} 12 | ############################################################################### 13 | 14 | batch_size=100 15 | 16 | num_batches=$(( files_len / batch_size + 1)) 17 | 18 | echo "Files: $files_len, batches: $num_batches * $batch_size" 19 | 20 | for (( i = 0; i < $num_batches; i++ )); do 21 | f_from=$(( i * batch_size )) 22 | f_to=$(( f_from + batch_size - 1)) 23 | 24 | echo "### $f_from - $f_to" 25 | ## !!!!!!!!! 26 | $current_dir/../analyze.sh ${files[@]:f_from:batch_size} 27 | done 28 | 29 | 30 | ############################################################################### 31 | # one by one (slow) 32 | ############################################################################### 33 | 34 | # echo Files: $files_len 35 | 36 | # i=0 37 | # for file in ${files[@]}; do 38 | # i=$((i+1)) 39 | # echo $i: $file 40 | # $current_dir/../analyze.sh $file 41 | # done -------------------------------------------------------------------------------- /stuff/out.txt: -------------------------------------------------------------------------------- 1 | ACCESS: A C C E S S; 2 | ADD: A D D; 3 | AFTER: A F T E R; 4 | AGENT: A G E N T; 5 | AGGREGATE: A G G R E G A T E; 6 | ALL: A L L; 7 | ALTER: A L T E R; 8 | ANALYZE: A N A L Y Z E; 9 | AND: A N D; 10 | ANY: A N Y; 11 | ARRAY: A R R A Y; 12 | ARROW: A R R O W; 13 | AS: A S; 14 | ASC: A S C; 15 | ASSOCIATE: A S S O C I A T E; 16 | ASSOCIATION_OPERATOR: '=>'; 17 | AT: A T; 18 | ATTRIBUTE: A T T R I B U T E; 19 | AUDIT: A U D I T; 20 | AUTHID: A U T H I D; 21 | AUTO: A U T O; 22 | AUTOMATIC: A U T O M A T I C; 23 | AUTONOMOUS_TRANSACTION: A U T O N O M O U S '_' T R A N S A C T I O N; 24 | AVG: A V G; 25 | A_LETTER: A; 26 | BATCH: B A T C H; 27 | BEFORE: B E F O R E; 28 | BEGIN: B E G I N; 29 | BETWEEN: B E T W E E N; 30 | BFILE: B F I L E; 31 | BFILE_BASE: B F I L E '_' B A S E; 32 | BINARY: B I N A R Y; 33 | BINARY_DOUBLE: B I N A R Y '_' D O U B L E; 34 | BINARY_FLOAT: B I N A R Y '_' F L O A T; 35 | BINARY_INTEGER: B I N A R Y '_' I N T E G E R; 36 | BLOB: B L O B; 37 | BLOB_BASE: B L O B '_' B A S E; 38 | BLOCK: B L O C K; 39 | BODY: B O D Y; 40 | BOOLEAN: B O O L E A N; 41 | BOTH: B O T H; 42 | BOUND: B O U N D; 43 | BREADTH: B R E A D T H; 44 | BULK: B U L K; 45 | BY: B Y; 46 | BYTE: B Y T E; 47 | CACHE: C A C H E; 48 | CALL: C A L L; 49 | CALLING: C A L L I N G; 50 | CANONICAL: C A N O N I C A L; 51 | CASCADE: C A S C A D E; 52 | CASE: C A S E; 53 | CAST: C A S T; 54 | CHAR: C H A R; 55 | CHARACTER: C H A R A C T E R; 56 | CHARSET: C H A R S E T; 57 | CHARSETFORM: C H A R S E T F O R M; 58 | CHARSETID: C H A R S E T I D; 59 | CHAR_BASE: C H A R '_' B A S E; 60 | CHAR_CS: C H A R '_' C S; 61 | CHECK: C H E C K; 62 | CHR: C H R; 63 | CLOB: C L O B; 64 | CLOB_BASE: C L O B '_' B A S E; 65 | CLOSE: C L O S E; 66 | CLUSTER: C L U S T E R; 67 | CLUSTERS: C L U S T E R S; 68 | COLAUTH: C O L A U T H; 69 | COLLECT: C O L L E C T; 70 | COLUMN: C O L U M N; 71 | COLUMNS: C O L U M N S; 72 | COLUMN_VALUE: C O L U M N '_' V A L U E; 73 | COMMENT: C O M M E N T; 74 | COMMIT: C O M M I T; 75 | COMMITTED: C O M M I T T E D; 76 | COMPATIBILITY: C O M P A T I B I L I T Y; 77 | COMPILE: C O M P I L E; 78 | COMPILED: C O M P I L E D; 79 | COMPOUND: C O M P O U N D; 80 | COMPRESS: C O M P R E S S; 81 | CONNECT: C O N N E C T; 82 | CONNECT_BY_ROOT: C O N N E C T '_' B Y '_' R O O T; 83 | CONSTANT: C O N S T A N T; 84 | CONSTRAINT: C O N S T R A I N T; 85 | CONSTRAINTS: C O N S T R A I N T S; 86 | CONSTRUCTOR: C O N S T R U C T O R; 87 | CONTENT: C O N T E N T; 88 | CONTEXT: C O N T E X T; 89 | CONTINUE: C O N T I N U E; 90 | CONVERT: C O N V E R T; 91 | CORR: C O R R; 92 | CORRUPT_XID: C O R R U P T '_' X I D; 93 | CORRUPT_XID_ALL: C O R R U P T '_' X I D '_' A L L; 94 | COST: C O S T; 95 | COUNT: C O U N T; 96 | COVAR_: C O V A R '_'; 97 | CRASH: C R A S H; 98 | CREATE: C R E A T E; 99 | CROSS: C R O S S; 100 | CUBE: C U B E; 101 | CUME_DIST: C U M E '_' D I S T; 102 | CURRENT: C U R R E N T; 103 | CURRENT_USER: C U R R E N T '_' U S E R; 104 | CURSOR: C U R S O R; 105 | CUSTOMDATUM: C U S T O M D A T U M; 106 | CYCLE: C Y C L E; 107 | C_LETTER: C; 108 | DANGLING: D A N G L I N G; 109 | DATA: D A T A; 110 | DATABASE: D A T A B A S E; 111 | DATE: D A T E; 112 | DATE_BASE: D A T E '_' B A S E; 113 | DAY: D A Y; 114 | DBTIMEZONE: D B T I M E Z O N E; 115 | DB_ROLE_CHANGE: D B '_' R O L E '_' C H A N G E; 116 | DDL: D D L; 117 | DEBUG: D E B U G; 118 | DEC: D E C; 119 | DECIMAL: D E C I M A L; 120 | DECLARE: D E C L A R E; 121 | DECOMPOSE: D E C O M P O S E; 122 | DECREMENT: D E C R E M E N T; 123 | DEFAULT: D E F A U L T; 124 | DEFAULTS: D E F A U L T S; 125 | DEFERRED: D E F E R R E D; 126 | DEFINE: D E F I N E; 127 | DEFINER: D E F I N E R; 128 | DELETE: D E L E T E; 129 | DENSE_RANK: D E N S E '_' R A N K; 130 | DEPTH: D E P T H; 131 | DESC: D E S C; 132 | DETERMINISTIC: D E T E R M I N I S T I C; 133 | DIMENSION: D I M E N S I O N; 134 | DISABLE: D I S A B L E; 135 | DISASSOCIATE: D I S A S S O C I A T E; 136 | DISTINCT: D I S T I N C T; 137 | DOCUMENT: D O C U M E N T; 138 | DOUBLE: D O U B L E; 139 | DROP: D R O P; 140 | DSINTERVAL_UNCONSTRAINED: D S I N T E R V A L '_' U N C O N S T R A I N E D; 141 | DURATION: D U R A T I O N; 142 | EACH: E A C H; 143 | ELEMENT: E L E M E N T; 144 | ELSE: E L S E; 145 | ELSIF: E L S I F; 146 | EMPTY: E M P T Y; 147 | ENABLE: E N A B L E; 148 | ENCODING: E N C O D I N G; 149 | END: E N D; 150 | ENTITYESCAPING: E N T I T Y E S C A P I N G; 151 | ERRORS: E R R O R S; 152 | ESCAPE: E S C A P E; 153 | EVALNAME: E V A L N A M E; 154 | EXCEPT: E X C E P T; 155 | EXCEPTION: E X C E P T I O N; 156 | EXCEPTIONS: E X C E P T I O N S; 157 | EXCEPTION_INIT: E X C E P T I O N '_' I N I T; 158 | EXCLUDE: E X C L U D E; 159 | EXCLUSIVE: E X C L U S I V E; 160 | EXECUTE: E X E C U T E; 161 | EXISTS: E X I S T S; 162 | EXIT: E X I T; 163 | EXPLAIN: E X P L A I N; 164 | EXTEND: E X T E N D; 165 | EXTERNAL: E X T E R N A L; 166 | EXTRACT: E X T R A C T; 167 | FAILURE: F A I L U R E; 168 | FALSE: F A L S E; 169 | FETCH: F E T C H; 170 | FILE: F I L E; 171 | FINAL: F I N A L; 172 | FIRST: F I R S T; 173 | FIRST_VALUE: F I R S T '_' V A L U E; 174 | FIXED: F I X E D; 175 | FLOAT: F L O A T; 176 | FOLLOWING: F O L L O W I N G; 177 | FOLLOWS: F O L L O W S; 178 | FOR: F O R; 179 | FORALL: F O R A L L; 180 | FORCE: F O R C E; 181 | FORM: F O R M; 182 | FROM: F R O M; 183 | FULL: F U L L; 184 | FUNCTION: F U N C T I O N; 185 | GENERAL: G E N E R A L; 186 | GOTO: G O T O; 187 | GRANT: G R A N T; 188 | GROUP: G R O U P; 189 | GROUPING: G R O U P I N G; 190 | HASH: H A S H; 191 | HAVING: H A V I N G; 192 | HEAP: H E A P; 193 | HIDDEN: H I D D E N; 194 | HIDE: H I D E; 195 | HOUR: H O U R; 196 | IDENTIFIED: I D E N T I F I E D; 197 | IF: I F; 198 | IGNORE: I G N O R E; 199 | IMMEDIATE: I M M E D I A T E; 200 | IN: I N; 201 | INCLUDE: I N C L U D E; 202 | INCLUDING: I N C L U D I N G; 203 | INCREMENT: I N C R E M E N T; 204 | INDENT: I N D E N T; 205 | INDEX: I N D E X; 206 | INDEXED: I N D E X E D; 207 | INDEXES: I N D E X E S; 208 | INDICATOR: I N D I C A T O R; 209 | INDICES: I N D I C E S; 210 | INFINITE: I N F I N I T E; 211 | INITIAL: I N I T I A L; 212 | INLINE: I N L I N E; 213 | INNER: I N N E R; 214 | INOUT: I N O U T; 215 | INSERT: I N S E R T; 216 | INSTANTIABLE: I N S T A N T I A B L E; 217 | INSTEAD: I N S T E A D; 218 | INT: I N T; 219 | INTEGER: I N T E G E R; 220 | INTERFACE: I N T E R F A C E; 221 | INTERSECT: I N T E R S E C T; 222 | INTERVAL: I N T E R V A L; 223 | INTO: I N T O; 224 | INVALIDATE: I N V A L I D A T E; 225 | IS: I S; 226 | ISOLATION: I S O L A T I O N; 227 | ITERATE: I T E R A T E; 228 | JAVA: J A V A; 229 | JOIN: J O I N; 230 | KEEP: K E E P; 231 | LAG: L A G; 232 | LANGUAGE: L A N G U A G E; 233 | LARGE: L A R G E; 234 | LAST: L A S T; 235 | LAST_VALUE: L A S T '_' V A L U E; 236 | LEAD: L E A D; 237 | LEADING: L E A D I N G; 238 | LEFT: L E F T; 239 | LENGTH: L E N G T H; 240 | LEVEL: L E V E L; 241 | LIBRARY: L I B R A R Y; 242 | LIKE2: L I K E '2'; 243 | LIKE4: L I K E '4'; 244 | LIKE: L I K E; 245 | LIKEC: L I K E C; 246 | LIMIT: L I M I T; 247 | LIMITED: L I M I T E D; 248 | LISTAGG: L I S T A G G; 249 | LOCAL: L O C A L; 250 | LOCK: L O C K; 251 | LOCKED: L O C K E D; 252 | LOG: L O G; 253 | LOGOFF: L O G O F F; 254 | LOGON: L O G O N; 255 | LONG: L O N G; 256 | LOOP: L O O P; 257 | MAIN: M A I N; 258 | MAP: M A P; 259 | MATCHED: M A T C H E D; 260 | MAX: M A X; 261 | MAXEXTENTS: M A X E X T E N T S; 262 | MAXLEN: M A X L E N; 263 | MAXVALUE: M A X V A L U E; 264 | MEASURES: M E A S U R E S; 265 | MEDIAN: M E D I A N; 266 | MEMBER: M E M B E R; 267 | MERGE: M E R G E; 268 | MIN: M I N; 269 | MINUS: M I N U S; 270 | MINUTE: M I N U T E; 271 | MINVALUE: M I N V A L U E; 272 | MLSLABEL: M L S L A B E L; 273 | MOD: M O D; 274 | MODE: M O D E; 275 | MODEL: M O D E L; 276 | MODIFY: M O D I F Y; 277 | MONTH: M O N T H; 278 | MULTISET: M U L T I S E T; 279 | NAME: N A M E; 280 | NAN: N A N; 281 | NATIONAL: N A T I O N A L; 282 | NATIVE: N A T I V E; 283 | NATURAL: N A T U R A L; 284 | NATURALN: N A T U R A L N; 285 | NAV: N A V; 286 | NCHAR: N C H A R; 287 | NCHAR_CS: N C H A R '_' C S; 288 | NCLOB: N C L O B; 289 | NESTED: N E S T E D; 290 | NESTED_TABLE_ID: N E S T E D '_' T A B L E '_' I D; 291 | NEW: N E W; 292 | NEXT: N E X T; 293 | NO: N O; 294 | NOAUDIT: N O A U D I T; 295 | NOCACHE: N O C A C H E; 296 | NOCOMPRESS: N O C O M P R E S S; 297 | NOCOPY: N O C O P Y; 298 | NOCYCLE: N O C Y C L E; 299 | NOENTITYESCAPING: N O E N T I T Y E S C A P I N G; 300 | NOMAXVALUE: N O M A X V A L U E; 301 | NOMINVALUE: N O M I N V A L U E; 302 | NONE: N O N E; 303 | NOORDER: N O O R D E R; 304 | NOSCHEMACHECK: N O S C H E M A C H E C K; 305 | NOT: N O T; 306 | NOWAIT: N O W A I T; 307 | NTILE: N T I L E; 308 | NULL: N U L L; 309 | NULLS: N U L L S; 310 | NUMBER: N U M B E R; 311 | NUMBER_BASE: N U M B E R '_' B A S E; 312 | NUMERIC: N U M E R I C; 313 | NVARCHAR2: N V A R C H A R '2'; 314 | OBJECT: O B J E C T; 315 | OCICOLL: O C I C O L L; 316 | OCIDATE: O C I D A T E; 317 | OCIDATETIME: O C I D A T E T I M E; 318 | OCIDURATION: O C I D U R A T I O N; 319 | OCIINTERVAL: O C I I N T E R V A L; 320 | OCILOBLOCATOR: O C I L O B L O C A T O R; 321 | OCINUMBER: O C I N U M B E R; 322 | OCIRAW: O C I R A W; 323 | OCIREF: O C I R E F; 324 | OCIREFCURSOR: O C I R E F C U R S O R; 325 | OCIROWID: O C I R O W I D; 326 | OCISTRING: O C I S T R I N G; 327 | OCITYPE: O C I T Y P E; 328 | OF: O F; 329 | OFF: O F F; 330 | OFFLINE: O F F L I N E; 331 | OID: O I D; 332 | OLD: O L D; 333 | ON: O N; 334 | ONLINE: O N L I N E; 335 | ONLY: O N L Y; 336 | OPAQUE: O P A Q U E; 337 | OPEN: O P E N; 338 | OPERATOR: O P E R A T O R; 339 | OPTION: O P T I O N; 340 | OR: O R; 341 | ORACLE: O R A C L E; 342 | ORADATA: O R A D A T A; 343 | ORDER: O R D E R; 344 | ORDINALITY: O R D I N A L I T Y; 345 | ORGANIZATION: O R G A N I Z A T I O N; 346 | ORLANY: O R L A N Y; 347 | ORLVARY: O R L V A R Y; 348 | OSERROR: O S E R R O R; 349 | OTHERS: O T H E R S; 350 | OUT: O U T; 351 | OUTER: O U T E R; 352 | OVER: O V E R; 353 | OVERLAPS: O V E R L A P S; 354 | OVERRIDING: O V E R R I D I N G; 355 | PACKAGE: P A C K A G E; 356 | PARALLEL_ENABLE: P A R A L L E L '_' E N A B L E; 357 | PARAMETER: P A R A M E T E R; 358 | PARAMETERS: P A R A M E T E R S; 359 | PARENT: P A R E N T; 360 | PARTITION: P A R T I T I O N; 361 | PASCAL: P A S C A L; 362 | PASSING: P A S S I N G; 363 | PATH: P A T H; 364 | PCTFREE: P C T F R E E; 365 | PERCENTILE_CONT: P E R C E N T I L E '_' C O N T; 366 | PERCENTILE_DISC: P E R C E N T I L E '_' D I S C; 367 | PERCENT_FOUND: '%' F O U N D; 368 | PERCENT_ISOPEN: '%' I S O P E N; 369 | PERCENT_NOTFOUND: '%' N O T F O U N D; 370 | PERCENT_RANK: P E R C E N T '_' R A N K; 371 | PERCENT_ROWCOUNT: '%' R O W C O U N T; 372 | PERCENT_ROWTYPE: '%' R O W T Y P E; 373 | PERCENT_TYPE: '%' T Y P E; 374 | PIPE: P I P E; 375 | PIPELINED: P I P E L I N E D; 376 | PIVOT: P I V O T; 377 | PLAN: P L A N; 378 | PLS_INTEGER: P L S '_' I N T E G E R; 379 | POSITIVE: P O S I T I V E; 380 | POSITIVEN: P O S I T I V E N; 381 | PRAGMA: P R A G M A; 382 | PRECEDING: P R E C E D I N G; 383 | PRECISION: P R E C I S I O N; 384 | PREDICTION: P R E D I C T I O N; 385 | PREDICTION_BOUNDS: P R E D I C T I O N '_' B O U N D S; 386 | PREDICTION_COST: P R E D I C T I O N '_' C O S T; 387 | PREDICTION_DETAILS: P R E D I C T I O N '_' D E T A I L S; 388 | PREDICTION_PROBABILITY: P R E D I C T I O N '_' P R O B A B I L I T Y; 389 | PREDICTION_SET: P R E D I C T I O N '_' S E T; 390 | PRESENT: P R E S E N T; 391 | PRIOR: P R I O R; 392 | PRIVATE: P R I V A T E; 393 | PROCEDURE: P R O C E D U R E; 394 | PROMPT: P R O M P T; 395 | PUBLIC: P U B L I C; 396 | RAISE: R A I S E; 397 | RANGE: R A N G E; 398 | RANK: R A N K; 399 | RATIO_TO_REPORT: R A T I O '_' T O '_' R E P O R T; 400 | RAW: R A W; 401 | READ: R E A D; 402 | REAL: R E A L; 403 | RECORD: R E C O R D; 404 | REF: R E F; 405 | REFERENCE: R E F E R E N C E; 406 | REFERENCING: R E F E R E N C I N G; 407 | REGR_: R E G R '_'; 408 | REJECT: R E J E C T; 409 | RELIES_ON: R E L I E S '_' O N; 410 | REM: R E M; 411 | REMAINDER: R E M A I N D E R; 412 | RENAME: R E N A M E; 413 | REPLACE: R E P L A C E; 414 | RESOURCE: R E S O U R C E; 415 | RESPECT: R E S P E C T; 416 | RESTRICT_REFERENCES: R E S T R I C T '_' R E F E R E N C E S; 417 | RESULT: R E S U L T; 418 | RESULT_CACHE: R E S U L T '_' C A C H E; 419 | RETURN: R E T U R N; 420 | RETURNING: R E T U R N I N G; 421 | REUSE: R E U S E; 422 | REVERSE: R E V E R S E; 423 | REVOKE: R E V O K E; 424 | RIGHT: R I G H T; 425 | ROLLBACK: R O L L B A C K; 426 | ROLLUP: R O L L U P; 427 | ROW: R O W; 428 | ROWID: R O W I D; 429 | ROWNUM: R O W N U M; 430 | ROWS: R O W S; 431 | ROW_NUMBER: R O W '_' N U M B E R; 432 | RULES: R U L E S; 433 | SAMPLE: S A M P L E; 434 | SAVE: S A V E; 435 | SAVEPOINT: S A V E P O I N T; 436 | SB1: S B '1'; 437 | SB2: S B '2'; 438 | SB4: S B '4'; 439 | SCHEMA: S C H E M A; 440 | SCHEMACHECK: S C H E M A C H E C K; 441 | SCN: S C N; 442 | SEARCH: S E A R C H; 443 | SECOND: S E C O N D; 444 | SEED: S E E D; 445 | SEGMENT: S E G M E N T; 446 | SELECT: S E L E C T; 447 | SELF: S E L F; 448 | SEPARATE: S E P A R A T E; 449 | SEQUENCE: S E Q U E N C E; 450 | SEQUENTIAL: S E Q U E N T I A L; 451 | SERIALIZABLE: S E R I A L I Z A B L E; 452 | SERIALLY_REUSABLE: S E R I A L L Y '_' R E U S A B L E; 453 | SERVERERROR: S E R V E R E R R O R; 454 | SESSION: S E S S I O N; 455 | SESSIONTIMEZONE: S E S S I O N T I M E Z O N E; 456 | SET: S E T; 457 | SETS: S E T S; 458 | SETTINGS: S E T T I N G S; 459 | SHARE: S H A R E; 460 | SHORT: S H O R T; 461 | SHOW: S H O W; 462 | SHUTDOWN: S H U T D O W N; 463 | SIBLINGS: S I B L I N G S; 464 | SIGNTYPE: S I G N T Y P E; 465 | SIMPLE_INTEGER: S I M P L E '_' I N T E G E R; 466 | SINGLE: S I N G L E; 467 | SIZE: S I Z E; 468 | SIZE_T: S I Z E '_' T; 469 | SKIP_: S K I P; // Alris: added _ (cannot declare a rule with reserved name SKIP) 470 | SMALLINT: S M A L L I N T; 471 | SNAPSHOT: S N A P S H O T; 472 | SOME: S O M E; 473 | SPARSE: S P A R S E; 474 | SPECIFICATION: S P E C I F I C A T I O N; 475 | SQL: S Q L; 476 | SQLCODE: S Q L C O D E; 477 | SQLDATA: S Q L D A T A; 478 | SQLERROR: S Q L E R R O R; 479 | SQLNAME: S Q L N A M E; 480 | SQLSTATE: S Q L S T A T E; 481 | SQL_PERCENT_ROWCOUNT: S Q L '%' R O W C O U N T; 482 | STANDALONE: S T A N D A L O N E; 483 | STANDARD: S T A N D A R D; 484 | START: S T A R T; 485 | STARTUP: S T A R T U P; 486 | STATEMENT: S T A T E M E N T; 487 | STATEMENT_ID: S T A T E M E N T '_' I D; 488 | STATIC: S T A T I C; 489 | STATISTICS: S T A T I S T I C S; 490 | STDDEV: S T D D E V; 491 | STORED: S T O R E D; 492 | STRING: S T R I N G; 493 | STRUCT: S T R U C T; 494 | STYLE: S T Y L E; 495 | SUBMULTISET: S U B M U L T I S E T; 496 | SUBPARTITION: S U B P A R T I T I O N; 497 | SUBSTITUTABLE: S U B S T I T U T A B L E; 498 | SUBTYPE: S U B T Y P E; 499 | SUCCESS: S U C C E S S; 500 | SUCCESSFUL: S U C C E S S F U L; 501 | SUM: S U M; 502 | SUSPEND: S U S P E N D; 503 | SYNONYM: S Y N O N Y M; 504 | SYSDATE: S Y S D A T E; 505 | TABAUTH: T A B A U T H; 506 | TABLE: T A B L E; 507 | TDO: T D O; 508 | THE: T H E; 509 | THEN: T H E N; 510 | TIME: T I M E; 511 | TIMESTAMP: T I M E S T A M P; 512 | TIMESTAMP_LTZ_UNCONSTRAINED: T I M E S T A M P '_' L T Z '_' U N C O N S T R A I N E D; 513 | TIMESTAMP_TZ_UNCONSTRAINED: T I M E S T A M P '_' T Z '_' U N C O N S T R A I N E D; 514 | TIMESTAMP_UNCONSTRAINED: T I M E S T A M P '_' U N C O N S T R A I N E D; 515 | TIMEZONE_ABBR: T I M E Z O N E '_' A B B R; 516 | TIMEZONE_HOUR: T I M E Z O N E '_' H O U R; 517 | TIMEZONE_MINUTE: T I M E Z O N E '_' M I N U T E; 518 | TIMEZONE_REGION: T I M E Z O N E '_' R E G I O N; 519 | TO: T O; 520 | TO_CHAR: T O '_' C H A R; 521 | TO_NUMBER: T O '_' N U M B E R; 522 | TRAILING: T R A I L I N G; 523 | TRANSAC: T R A N S A C; 524 | TRANSACTION: T R A N S A C T I O N; 525 | TRANSACTIONAL: T R A N S A C T I O N A L; 526 | TRANSLATE: T R A N S L A T E; 527 | TREAT: T R E A T; 528 | TRIGGER: T R I G G E R; 529 | TRIM: T R I M; 530 | TRUE: T R U E; 531 | TRUNCATE: T R U N C A T E; 532 | TRUSTED: T R U S T E D; 533 | TYPE: T Y P E; 534 | UB1: U B '1'; 535 | UB2: U B '2'; 536 | UB4: U B '4'; 537 | UID: U I D; 538 | UNBOUNDED: U N B O U N D E D; 539 | UNDER: U N D E R; 540 | UNION: U N I O N; 541 | UNIQUE: U N I Q U E; 542 | UNLIMITED: U N L I M I T E D; 543 | UNPIVOT: U N P I V O T; 544 | UNSIGNED: U N S I G N E D; 545 | UNTIL: U N T I L; 546 | UNTRUSTED: U N T R U S T E D; 547 | UPDATE: U P D A T E; 548 | UPDATED: U P D A T E D; 549 | UPSERT: U P S E R T; 550 | UROWID: U R O W I D; 551 | USE: U S E; 552 | USER: U S E R; 553 | USING: U S I N G; 554 | VALIDATE: V A L I D A T E; 555 | VALIST: V A L I S T; 556 | VALUE: V A L U E; 557 | VALUES: V A L U E S; 558 | VARCHAR2: V A R C H A R '2'; 559 | VARCHAR: V A R C H A R; 560 | VARIABLE: V A R I A B L E; 561 | VARIANCE: V A R I A N C E; 562 | VARRAY: V A R R A Y; 563 | VARYING: V A R Y I N G; 564 | VAR_: V A R '_'; 565 | VERSION: V E R S I O N; 566 | VERSIONS: V E R S I O N S; 567 | VIEW: V I E W; 568 | VIEWS: V I E W S; 569 | VOID: V O I D; 570 | WAIT: W A I T; 571 | WARNING: W A R N I N G; 572 | WELLFORMED: W E L L F O R M E D; 573 | WHEN: W H E N; 574 | WHENEVER: W H E N E V E R; 575 | WHERE: W H E R E; 576 | WHILE: W H I L E; 577 | WITH: W I T H; 578 | WITHIN: W I T H I N; 579 | WORK: W O R K; 580 | WRAPPED: W R A P P E D; 581 | WRITE: W R I T E; 582 | XML: X M L; 583 | XMLAGG: X M L A G G; 584 | XMLATTRIBUTES: X M L A T T R I B U T E S; 585 | XMLCAST: X M L C A S T; 586 | XMLCOLATTVAL: X M L C O L A T T V A L; 587 | XMLELEMENT: X M L E L E M E N T; 588 | XMLEXISTS: X M L E X I S T S; 589 | XMLFOREST: X M L F O R E S T; 590 | XMLNAMESPACES: X M L N A M E S P A C E S; 591 | XMLPARSE: X M L P A R S E; 592 | XMLPI: X M L P I; 593 | XMLQUERY: X M L Q U E R Y; 594 | XMLROOT: X M L R O O T; 595 | XMLSERIALIZE: X M L S E R I A L I Z E; 596 | XMLTABLE: X M L T A B L E; 597 | YEAR: Y E A R; 598 | YES: Y E S; 599 | YMINTERVAL_UNCONSTRAINED: Y M I N T E R V A L '_' U N C O N S T R A I N E D; 600 | ZONE: Z O N E; 601 | -------------------------------------------------------------------------------- /stuff/plsql_keywords.txt: -------------------------------------------------------------------------------- 1 | A 2 | ADD 3 | AGENT 4 | AGGREGATE 5 | ARRAY 6 | ATTRIBUTE 7 | AUTHID 8 | AVG 9 | BFILE_BASE 10 | BINARY 11 | BLOB_BASE 12 | BLOCK 13 | BODY 14 | BOTH 15 | BOUND 16 | BULK 17 | BYTE 18 | C 19 | CALL 20 | CALLING 21 | CASCADE 22 | CHAR 23 | CHAR_BASE 24 | CHARACTER 25 | CHARSETFORM 26 | CHARSETID 27 | CHARSET 28 | CLOB_BASE 29 | CLOSE 30 | COLLECT 31 | COMMENT 32 | COMMIT 33 | COMMITTED 34 | COMPILED 35 | CONSTANT 36 | CONSTRUCTOR 37 | CONTEXT 38 | CONVERT 39 | COUNT 40 | CURSOR 41 | CUSTOMDATUM 42 | DANGLING 43 | DATA 44 | DATE 45 | DATE_BASE 46 | DAY 47 | DEFINE 48 | DETERMINISTIC 49 | DOUBLE 50 | DURATION 51 | ELEMENT 52 | ELSIF 53 | EMPTY 54 | ESCAPE 55 | EXCEPT 56 | EXCEPTIONS 57 | EXECUTE 58 | EXIT 59 | EXTERNAL 60 | FINAL 61 | FIXED 62 | FLOAT 63 | FORALL 64 | FORCE 65 | FUNCTION 66 | GENERAL 67 | HASH 68 | HEAP 69 | HIDDEN 70 | HOUR 71 | IMMEDIATE 72 | INCLUDING 73 | INDICATOR 74 | INDICES 75 | INFINITE 76 | INSTANTIABLE 77 | INT 78 | INTERFACE 79 | INTERVAL 80 | INVALIDATE 81 | ISOLATION 82 | JAVA 83 | LANGUAGE 84 | LARGE 85 | LEADING 86 | LENGTH 87 | LEVEL 88 | LIBRARY 89 | LIKE2 90 | LIKE4 91 | LIKEC 92 | LIMIT 93 | LIMITED 94 | LOCAL 95 | LONG 96 | LOOP 97 | MAP 98 | MAX 99 | MAXLEN 100 | MEMBER 101 | MERGE 102 | MIN 103 | MINUTE 104 | MOD 105 | MODIFY 106 | MONTH 107 | MULTISET 108 | NAME 109 | NAN 110 | NATIONAL 111 | NATIVE 112 | NCHAR 113 | NEW 114 | NOCOPY 115 | NUMBER_BASE 116 | OBJECT 117 | OCICOLL 118 | OCIDATETIME 119 | OCIDATE 120 | OCIDURATION 121 | OCIINTERVAL 122 | OCILOBLOCATOR 123 | OCINUMBER 124 | OCIRAW 125 | OCIREFCURSOR 126 | OCIREF 127 | OCIROWID 128 | OCISTRING 129 | OCITYPE 130 | ONLY 131 | OPAQUE 132 | OPEN 133 | OPERATOR 134 | ORACLE 135 | ORADATA 136 | ORGANIZATION 137 | ORLANY 138 | ORLVARY 139 | OTHERS 140 | OUT 141 | OVERRIDING 142 | PACKAGE 143 | PARALLEL_ENABLE 144 | PARAMETER 145 | PARAMETERS 146 | PARTITION 147 | PASCAL 148 | PIPE 149 | PIPELINED 150 | PRAGMA 151 | PRECISION 152 | PRIVATE 153 | RAISE 154 | RANGE 155 | RAW 156 | READ 157 | RECORD 158 | REF 159 | REFERENCE 160 | REM 161 | REMAINDER 162 | RENAME 163 | RESULT 164 | RETURN 165 | RETURNING 166 | REVERSE 167 | ROLLBACK 168 | ROW 169 | SAMPLE 170 | SAVE 171 | SAVEPOINT 172 | SB1 173 | SB2 174 | SB4 175 | SECOND 176 | SEGMENT 177 | SELF 178 | SEPARATE 179 | SEQUENCE 180 | SERIALIZABLE 181 | SET 182 | SHORT 183 | SIZE_T 184 | SOME 185 | SPARSE 186 | SQLCODE 187 | SQLDATA 188 | SQLNAME 189 | SQLSTATE 190 | STANDARD 191 | STATIC 192 | STDDEV 193 | STORED 194 | STRING 195 | STRUCT 196 | STYLE 197 | SUBMULTISET 198 | SUBPARTITION 199 | SUBSTITUTABLE 200 | SUBTYPE 201 | SUM 202 | SYNONYM 203 | TDO 204 | THE 205 | TIME 206 | TIMESTAMP 207 | TIMEZONE_ABBR 208 | TIMEZONE_HOUR 209 | TIMEZONE_MINUTE 210 | TIMEZONE_REGION 211 | TRAILING 212 | TRANSAC 213 | TRANSACTIONAL 214 | TRUSTED 215 | TYPE 216 | UB1 217 | UB2 218 | UB4 219 | UNDER 220 | UNSIGNED 221 | UNTRUSTED 222 | USE 223 | USING 224 | VALIST 225 | VALUE 226 | VARIABLE 227 | VARIANCE 228 | VARRAY 229 | VARYING 230 | VOID 231 | WHILE 232 | WORK 233 | WRAPPED 234 | WRITE 235 | YEAR 236 | ZONE -------------------------------------------------------------------------------- /stuff/plsql_reserved_words.txt: -------------------------------------------------------------------------------- 1 | ALL 2 | ALTER 3 | AND 4 | ANY 5 | ARRAY 6 | ARROW 7 | AS 8 | ASC 9 | AT 10 | BEGIN 11 | BETWEEN 12 | BY 13 | CASE 14 | CHECK 15 | CLUSTERS 16 | CLUSTER 17 | COLAUTH 18 | COLUMNS 19 | COMPRESS 20 | CONNECT 21 | CRASH 22 | CREATE 23 | CURRENT 24 | DECIMAL 25 | DECLARE 26 | DEFAULT 27 | DELETE 28 | DESC 29 | DISTINCT 30 | DROP 31 | ELSE 32 | END 33 | EXCEPTION 34 | EXCLUSIVE 35 | EXISTS 36 | FETCH 37 | FORM 38 | FOR 39 | FROM 40 | GOTO 41 | GRANT 42 | GROUP 43 | HAVING 44 | IDENTIFIED 45 | IF 46 | IN 47 | INDEXES 48 | INDEX 49 | INSERT 50 | INTERSECT 51 | INTO 52 | IS 53 | LIKE 54 | LOCK 55 | MINUS 56 | MODE 57 | NOCOMPRESS 58 | NOT 59 | NOWAIT 60 | NULL 61 | OF 62 | ON 63 | OPTION 64 | OR 65 | ORDER 66 | OVERLAPS 67 | PRIOR 68 | PROCEDURE 69 | PUBLIC 70 | RANGE 71 | RECORD 72 | RESOURCE 73 | REVOKE 74 | SELECT 75 | SHARE 76 | SIZE 77 | SQL 78 | START 79 | SUBTYPE 80 | TABAUTH 81 | TABLE 82 | THEN 83 | TO 84 | TYPE 85 | UNION 86 | UNIQUE 87 | UPDATE 88 | USE 89 | VALUES 90 | VIEW 91 | VIEWS 92 | WHEN 93 | WHERE 94 | WITH -------------------------------------------------------------------------------- /stuff/prepare_keywords.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | files=(plsql_keywords.txt plsql_reserved_words.txt sql_reserved_words.txt) 4 | 5 | for file in ${files[@]}; do 6 | while read line 7 | do 8 | word=${line//\n//} 9 | spaced_word=$(printf $word | sed -e 's/\(.\)/\1 /g') 10 | 11 | let spaces_length=29-${#word} 12 | 13 | printf "%s:%$spaces_length.s%s;\n" $word "" "$spaced_word" 14 | done < $file 15 | done 16 | -------------------------------------------------------------------------------- /stuff/sql_reserved_words.txt: -------------------------------------------------------------------------------- 1 | ACCESS 2 | ADD 3 | ALL 4 | ALTER 5 | AND 6 | ANY 7 | AS 8 | ASC 9 | AUDIT 10 | BETWEEN 11 | BY 12 | CHAR 13 | CHECK 14 | CLUSTER 15 | COLUMN 16 | COLUMN_VALUE 17 | COMMENT 18 | COMPRESS 19 | CONNECT 20 | CREATE 21 | CURRENT 22 | DATE 23 | DECIMAL 24 | DEFAULT 25 | DELETE 26 | DESC 27 | DISTINCT 28 | DROP 29 | ELSE 30 | EXCLUSIVE 31 | EXISTS 32 | FILE 33 | FLOAT 34 | FOR 35 | FROM 36 | GRANT 37 | GROUP 38 | HAVING 39 | IDENTIFIED 40 | IMMEDIATE 41 | IN 42 | INCREMENT 43 | INDEX 44 | INITIAL 45 | INSERT 46 | INTEGER 47 | INTERSECT 48 | INTO 49 | IS 50 | LEVEL 51 | LIKE 52 | LOCK 53 | LONG 54 | MAXEXTENTS 55 | MINUS 56 | MLSLABEL 57 | MODE 58 | MODIFY 59 | NESTED_TABLE_ID 60 | NOAUDIT 61 | NOCOMPRESS 62 | NOT 63 | NOWAIT 64 | NULL 65 | NUMBER 66 | OF 67 | OFFLINE 68 | ON 69 | ONLINE 70 | OPTION 71 | OR 72 | ORDER 73 | PCTFREE 74 | PRIOR 75 | PUBLIC 76 | RAW 77 | RENAME 78 | RESOURCE 79 | REVOKE 80 | ROW 81 | ROWID 82 | ROWNUM 83 | ROWS 84 | SELECT 85 | SESSION 86 | SET 87 | SHARE 88 | SIZE 89 | SMALLINT 90 | START 91 | SUCCESSFUL 92 | SYNONYM 93 | SYSDATE 94 | TABLE 95 | THEN 96 | TO 97 | TRIGGER 98 | UID 99 | UNION 100 | UNIQUE 101 | UPDATE 102 | USER 103 | VALIDATE 104 | VALUES 105 | VARCHAR 106 | VARCHAR2 107 | VIEW 108 | WHENEVER 109 | WHERE 110 | WITH -------------------------------------------------------------------------------- /tests/call_graph_test/pkg1.pkb: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PACKAGE BODY scott.pkg1 2 | AS 3 | PROCEDURE internal_p1 4 | IS 5 | l_test INTEGER; 6 | 7 | FUNCTION test_fn 8 | RETURN INTEGER 9 | IS 10 | BEGIN 11 | RETURN 0; 12 | END; 13 | BEGIN 14 | l_test := test_fn; 15 | END; 16 | 17 | PROCEDURE internal_p2 18 | IS 19 | BEGIN 20 | NULL; 21 | END; 22 | 23 | PROCEDURE internal_p3 24 | IS 25 | BEGIN 26 | NULL; 27 | END; 28 | 29 | PROCEDURE p1 30 | IS 31 | BEGIN 32 | internal_p1; 33 | END; 34 | 35 | PROCEDURE p2 36 | IS 37 | BEGIN 38 | internal_p2; 39 | END; 40 | 41 | PROCEDURE p1and2 42 | IS 43 | BEGIN 44 | internal_p1; 45 | internal_p2; 46 | END; 47 | 48 | PROCEDURE p_call_p1and2 49 | IS 50 | BEGIN 51 | p1and2; 52 | 53 | internal_p3; 54 | END; 55 | END; 56 | / -------------------------------------------------------------------------------- /tests/call_graph_test/pkg1.pks: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PACKAGE scott.PKG1 2 | AS 3 | PROCEDURE p1; 4 | PROCEDURE p2; 5 | PROCEDURE p1and2; 6 | PROCEDURE p_call_p1and2; 7 | END; 8 | / -------------------------------------------------------------------------------- /tests/call_graph_test/pkg2.pkb: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PACKAGE BODY scott.pkg2 2 | AS 3 | PROCEDURE internal_p1 4 | IS 5 | BEGIN 6 | NULL; 7 | END; 8 | 9 | PROCEDURE p1 10 | IS 11 | BEGIN 12 | internal_p1; 13 | END; 14 | 15 | PROCEDURE p2 16 | IS 17 | BEGIN 18 | p1; 19 | END; 20 | 21 | PROCEDURE p3 22 | IS 23 | BEGIN 24 | p2; 25 | END; 26 | 27 | PROCEDURE p_call_pkg1 28 | IS 29 | BEGIN 30 | pkg1.p1; 31 | pkg1.p_call_p1and2; 32 | END; 33 | END; 34 | / -------------------------------------------------------------------------------- /tests/call_graph_test/pkg2.pks: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PACKAGE scott.PKG2 2 | AS 3 | PROCEDURE p_call_pkg1; 4 | PROCEDURE p1; 5 | PROCEDURE p2; 6 | PROCEDURE p3; 7 | END; 8 | / -------------------------------------------------------------------------------- /tests/call_graph_test/pkg3.pkb: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PACKAGE BODY scott.pkg3 2 | AS 3 | PROCEDURE internal_p1 4 | IS 5 | BEGIN 6 | NULL; 7 | END; 8 | 9 | PROCEDURE p1 10 | IS 11 | BEGIN 12 | internal_p1; 13 | END; 14 | 15 | PROCEDURE p2 16 | IS 17 | BEGIN 18 | p1; 19 | END; 20 | 21 | PROCEDURE p_call_pkg1 22 | IS 23 | BEGIN 24 | pkg1.p1; 25 | pkg1.p_call_p1and2; 26 | END; 27 | 28 | PROCEDURE p_call_pkg2 29 | IS 30 | BEGIN 31 | pkg2.p1; 32 | pkg2.p_call_pkg1; 33 | END; 34 | END; 35 | / -------------------------------------------------------------------------------- /tests/call_graph_test/pkg3.pks: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PACKAGE scott.PKG3 2 | AS 3 | PROCEDURE p_call_pkg1; 4 | PROCEDURE p_call_pkg2; 5 | PROCEDURE p1; 6 | PROCEDURE p2; 7 | END; 8 | / --------------------------------------------------------------------------------