Compare commits

..

468 Commits

Author SHA1 Message Date
JanUlrich c646a34745 Fehler durch Änderung von Unify beheben. Merge mit bytecode 2015-11-13 13:11:10 +01:00
JanUlrich b8c0d87056 Unify auf commit 144c31a4cb ändern 2015-11-13 12:55:34 +01:00
JanUlrich 4c908abede NewClassCreator 2015-11-13 12:23:45 +01:00
i13026 61891177a1 BytecodeTests erweitert
ASTFacotry überarbeitet
2015-11-12 14:50:27 +01:00
i13026 dc0cf0cd34 ExtendsVectorString erweitert 2015-11-11 11:11:50 +01:00
i13026 f18fcd2b12 ExtendsVecorStringTest teilweise in ASTBytecodeTest überführt 2015-11-10 19:28:47 +01:00
i13026 ecad9e138c BytecodeTest in SourceFileBytecodeTest umbenannt
ExtendsObjectTest von SourceFileBytecodeTest zu ASTBytecodeTest überführt
2015-11-10 18:26:29 +01:00
i13026 0c63695f7b ASTBytecodeTest erstellt 2015-11-10 17:54:27 +01:00
i13026 54a11c8779 Mehrere Lösungen in einer Class file 2015-11-09 09:38:49 +01:00
JanUlrich 0048d5f305 NewStatement bytecode 2015-11-06 18:27:47 +01:00
i13026 87e49a692a Vorbereitung für "Mehrere Lösungen in einer Classfile" 2015-11-06 16:42:22 +01:00
JanUlrich a221adb28c Merge branch 'bytecode' into refactoring 2015-11-06 15:19:19 +01:00
JanUlrich 1a0c76accf Anpassungen im Test 2015-11-06 15:18:43 +01:00
i13026 947d145cf1 New Instruction implementier, ArgumentList fehlt noch 2015-10-31 18:48:46 +01:00
JanUlrich 6619b73d80 Binary2 Test ändern 2015-10-30 16:37:12 +01:00
i13026 e9607e37b1 ASTFactory createClass setzt SuperType
GenericClass erhält richtigen SuperType
Tests für ? extends und ? super angelegt
2015-10-30 12:29:43 +01:00
i13026 64dce5d814 Parent von Class ist Sourcefile 2015-10-29 17:18:15 +01:00
JanUlrich 50916b5db2 SourceFile als Parent für Class.parserPostProcessing 2015-10-29 17:00:39 +01:00
JanUlrich bdbe20552e Tests zu Bytecodegenerierung anfügen 2015-10-29 15:16:19 +01:00
i13026 f077829d30 JUnit Test für Lokale Variabeln erstellt 2015-10-28 10:48:14 +01:00
i13026 ce52fd8904 ConsoleInterface an neue CompilerApi angepasst
RefType getBytecodeSignature  unterscheidet zwischen RefType und TypePlacholder
Abstrakte ByteCodeTest Klasse um getClassLoader erweitert
Alle BytecodeTypeTests angepasst
2015-10-27 15:14:52 +01:00
i13026 12093f2fc7 Signatur ist das gleiche wie Description 2015-10-27 13:27:00 +01:00
i13026 52be0a1af3 Overloading Test überarbeitet 2015-10-23 19:04:13 +02:00
JanUlrich 040a1f4088 Merge mit unify 2015-10-23 18:07:37 +02:00
i13026 0dcb36f49e JavaClassName hack entfernt 2015-10-23 16:30:07 +02:00
i13026 47361ca22c Merge branch 'bytecode' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into bytecode
# Conflicts:
#	src/de/dhbwstuttgart/syntaxtree/Class.java
2015-10-23 16:26:25 +02:00
i13026 b99f1bc3c9 JavaClassName: Hack damit Object zu java.lang.Object wird. Muss unbedingt anders gelöst werden 2015-10-23 16:23:20 +02:00
JanUlrich 36a3aeddb3 main-Methode in .jav Files möglich 2015-10-23 16:22:44 +02:00
JanUlrich ca447fd44e Merge mit unify und bytecode 2015-10-23 15:14:18 +02:00
JanUlrich 05187aa49f Merge mit bytecode 2015-10-23 14:44:55 +02:00
JanUlrich c9546d9762 Merge branch 'bytecode' into unify 2015-10-23 14:13:31 +02:00
JanUlrich eda270d451 Nachträglich Fehler beheben 2015-10-23 14:13:17 +02:00
JanUlrich 356794d753 Merge branch 'bytecode' into unify 2015-10-23 13:57:02 +02:00
JanUlrich f16171a8f6 Object zu java.lang.Object als Superklasse von Class im Standardkonstruktor ändern 2015-10-23 11:48:35 +02:00
i13026 77c06225a6 Constructor ist von Type Void 2015-10-23 10:56:56 +02:00
i13026 fab73a4d62 ASTFactory.createClass gibt eine Class statt ClassGenerator zurück 2015-10-23 10:46:55 +02:00
i13026 422f3b4144 ASTFactory createClass 2015-10-23 10:43:48 +02:00
i13026 bfb00ac1d1 ClassGenerator hat eine Map von zusätzlichen Klassen die generiert werden müssen
MyCompiler und MyCompilerApi aufgeräumt
ASTFactory Klasse angefangen
2015-10-22 20:40:33 +02:00
JanUlrich 347b06ac68 Main Test anfügen 2015-10-22 16:46:24 +02:00
JanUlrich 66b37482db Support für eindimensionale Arrays von RefTypes angefügt 2015-10-22 16:46:06 +02:00
i13026 632c2ca508 Genericklassen für Superklassen, Fieldtypes und Methodenparameter werden generiert 2015-10-20 15:58:39 +02:00
i13026 bafffe26ad Generierung von Generic Klasse auskommentiert 2015-10-20 14:07:57 +02:00
Florian Steurer edf1d817d2 implemented equal for menge 2015-10-19 11:45:49 +02:00
Florian Steurer cfc6711897 unit tests for simple types 2015-10-19 09:34:44 +02:00
Florian Steurer 9e1f417280 factories, builder and first unit test 2015-10-18 15:13:28 +02:00
Florian Steurer 4fa160529d created notes 2015-10-18 13:47:17 +02:00
Florian Steurer 7484ace724 first call to unify 2015-10-18 12:51:07 +02:00
Florian Steurer bd8a62cda7 created unit test class 2015-10-17 19:04:32 +02:00
i13026 50dda3041f Beginn der Generierung der GenericKlasse, Problem ist der Konstruktor, dieser wird auf Objekt aufgerufen und nicht auf der SUperklasse 2015-10-16 15:15:30 +02:00
i13026 6a8590ab0d FreshWildcardType muss von ObjectType ableiten, damit der Unifikationsalgorithmus funktioniert 2015-10-16 13:22:08 +02:00
i13026 1a07c186a6 generateBytecode von Class gibt eine Menge an ByteCodeResults zurück, wird benötigt um zusätzliche Klassen anzulegen 2015-10-16 10:39:34 +02:00
i13026 3a18088801 Erste Änderung an RefType
Tests für Extends angelegt
2015-10-15 22:16:18 +02:00
i13026 0a17be3c4f Abstrakter Test für BytecodeTests
TypedVectorTest angelegt: funktoniert schon
OverloadingTest angelegt: Nächstes Ziel
2015-10-15 19:12:38 +02:00
i13026 4f1c02834d Merge branch 'bytecode' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into bytecode 2015-10-15 17:46:20 +02:00
i13026 d6fb9ff2c7 ConditionTest angelegt
ForTest gefixed
2015-10-15 17:46:13 +02:00
JanUlrich 88b1c3e57c WriteLog anfügen 2015-10-15 16:28:10 +02:00
JanUlrich a541b353cd Änderungen an IFStmt 2015-10-15 16:15:13 +02:00
i13026 f23a341d72 Merge branch 'bytecode' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into bytecode 2015-10-15 14:55:30 +02:00
JanUlrich e104b2e379 Test anfügen 2015-10-15 13:56:12 +02:00
i13026 bcbe82c64e Tests für verschiedene Statements angelegt
If, IfElse Implementiert
Fehlende Interface Implementierungen mit NotImplementedException hinzugefügt
2015-10-13 19:25:51 +02:00
JanUlrich eb3db718ad Neue Testfälle in bytecode 2015-09-29 18:18:06 +02:00
JanUlrich 29dea524a5 Experimenteller Status. Änderungen an ClassSignatur Generierung 2015-09-29 00:28:59 +02:00
JanUlrich 1371220249 Fehler in TypeDeplyment behoben 2015-09-28 16:35:01 +02:00
JanUlrich 46291a6056 Bug 23 gefixt. 2015-09-24 15:26:34 +02:00
Pluemicke Martin f2c7d3b6fa Matrix_lambda.jav Matrix_lambdaTest.java hinzugefuegt 2015-09-23 22:33:54 +02:00
Pluemicke Martin 02b17b1a8f Test2 in Test.java hinzugefuegt 2015-09-23 22:17:41 +02:00
JanUlrich 0906fa2e9e Test angefügt 2015-09-23 17:32:21 +02:00
JanUlrich 61a4bc3cd7 Fehler in Lambda2_2 gefixt 2015-09-23 17:22:01 +02:00
JanUlrich c5f0e73e50 Identity implementiert 2015-09-23 15:30:35 +02:00
JanUlrich 99a7510810 Runnable gefixt 2015-09-23 12:48:08 +02:00
Martin Plümicke c1532ece13 Merge branch 'refactoring' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into refactoring 2015-09-23 10:50:51 +02:00
Martin Plümicke 84df9bd354 Id hinzugefuegt 2015-09-23 10:48:55 +02:00
JanUlrich 86e06a6e7a Erweitern des Bytecode Gen. 2015-09-22 18:43:36 +02:00
JanUlrich 296ffbe297 Fehler in FieldDeclaration behoben. Signaturen an Methoden und Klassen angefügt 2015-09-17 20:57:33 +02:00
JanUlrich a9611fdd90 Erster zusammengehackter Stand, bei dem Runnable.jav-Test funktioniert 2015-09-16 18:45:45 +02:00
JanUlrich bfe6b03605 Umstieg auf BCEL6 SourceCode. Einführen von DHBWInstructionFactory 2015-09-10 16:21:30 +02:00
JanUlrich ccd25ab865 Bytecode erweitert. BCEL6-SNAPSHOT eingebunden. 2015-09-02 17:11:32 +02:00
JanUlrich 64bed0c60d MethodCall implementiert 2015-08-27 16:36:19 +02:00
JanUlrich 133740d1f8 Merge branch 'bytecode' into refactoring 2015-08-27 13:37:45 +02:00
JanUlrich 636149d664 Merge mit Master 2015-08-27 13:37:41 +02:00
JanUlrich d0267aa960 Bytecode erweitert 2015-08-27 13:36:14 +02:00
JanUlrich 1964a64f94 Klassen für den BCELifier anfügen 2015-08-27 12:32:07 +02:00
JanUlrich 985f3e984c Fehler in Parser behoben 2015-08-26 15:08:04 +02:00
JanUlrich 2d8adb5c69 Beginn der Implementierung von Bytecode für Lambda Expression 2015-08-26 14:48:51 +02:00
JanUlrich 8d1b2c6b82 Unify Debuoutput angefügt 2015-08-04 11:06:18 +02:00
JanUlrich ae372cdd3b merge und Timer anfügen 2015-07-22 19:56:39 +02:00
JanUlrich 70b804fc4a Zeitmessung für Clone 2015-07-16 01:35:06 +02:00
Martin Plümicke fbc1bc5b5b Cloner durch Unify.deepClone in UndMenge.java ersetzt 2015-07-16 01:16:06 +02:00
JanUlrich 3601d11b0b Fehler in deepCopy behoben 2015-07-15 17:09:49 +02:00
JanUlrich 6321f1308d Nicht mehr im Subst, sondern vorm Subst klonen 2015-07-15 11:50:10 +02:00
JanUlrich c7ffabe0f0 Im Unify wird nur noch bei SUBST deepCopy angewendet. Timer implementiert zum ermitteln der Zeitaufwendungen der einzelnen Schritte im Algorithmus 2015-07-14 18:43:54 +02:00
JanUlrich e891551b4e Merge mit bytecode 2015-07-14 14:51:15 +02:00
JanUlrich 97cb020d45 Bytecode Tests anfügen 2015-07-14 14:49:46 +02:00
JanUlrich 44599246b2 FunVoidN einführen 2015-07-08 17:46:54 +02:00
JanUlrich 4f9b4c0e16 Merge mit Master 2015-07-08 16:54:39 +02:00
Fütterling, Franziska (WWI2012D) 172ea3fbee GenCode: Lambda theorethisch korrekt, hängt aber noch an einer
unbekannten NullPointerException
2015-07-08 16:43:10 +02:00
JanUlrich 2b12767764 BCEL 6.0 SNAPSHOT angefügt 2015-07-08 15:48:32 +02:00
Fütterling, Franziska (WWI2012D) 3111d51005 GenCode: Versuch LambdaExpression umzusetzen, scheitert aber bislang an
nicht importierbaren Klassen aus BCEL
2015-07-08 15:00:47 +02:00
JanUlrich 38176163d5 .log-Dateien zu gitignore hinzufügen. Filter in Unify verbessern 2015-07-08 14:23:29 +02:00
JanUlrich c3a8567e3f Filter in Unify zw. Schritt 4 und 5 einfügen 2015-07-08 10:37:26 +02:00
JanUlrich 59b574f040 Fehler in PostIncrement/UnaryExpression behoben 2015-06-26 19:42:25 +02:00
JanUlrich 442da87f48 Debug-Code einfügen für Karthesisches Produkt in Unify 2015-06-26 12:25:46 +02:00
Schubert, Julia (WWI2012D) d2f50069d2 NewArray implementiert, scheitert daran, dass der Parser keine Array
Initialisierung annimmt.
2015-06-25 23:05:51 +02:00
Fütterling, Franziska (WWI2012D) 03b0544131 GenCode: LongLit implementiert, aufgrund von Typinferenz-Problemen nicht
testbar
2015-06-25 16:20:51 +02:00
Fütterling, Franziska (WWI2012D) 5f6525db19 GenCode: FloatLit implementiert, aufgrund von Typeinferenz-Problemen
nicht testbar.
2015-06-25 16:12:18 +02:00
Fütterling, Franziska (WWI2012D) ea2aa91761 GenCode: DoubleLiteral implementiert. Aufgrund von Typinferenz-Problemen
kann ein erfolgreicher Test-Run nicht konsisten repliziert werden.
2015-06-25 16:01:24 +02:00
Fütterling, Franziska (WWI2012D) cef7c777b2 GenCode: StringLit erfolgreich getestet - Strings werden in dynamisch
in den Konstantenpool geschrieben und ausgelesen
2015-06-25 15:49:22 +02:00
Fütterling, Franziska (WWI2012D) d50206a519 GenCode: Assign kann nun zwischen Int und String switchen.
StringLit-Test ergab, dass es - wie befürchtet - Probleme mit der
korrekten Vergabe von Indizes gibt.
2015-06-25 15:35:13 +02:00
Fütterling, Franziska (WWI2012D) 5fbb4f0d61 GenCode: Reupload StringLiteral aufgrund von Merge-Problemen 2015-06-25 15:19:30 +02:00
Fütterling, Franziska (WWI2012D) b4d9cfbe0c GenCode: Reupload Assign Type-Switch wegen Mergeproblemen 2015-06-25 15:18:14 +02:00
Fikus, Evelyn (WWI2012D) 6dd922a263 Testcode umgeschrieben 2015-06-25 14:29:16 +02:00
Fütterling, Franziska (WWI2012D) c7bed0fa0e GenCode: PostIncrement umgesetzt, aufgrund von Problemen bei der
TypInferenz aber nicht testbar. Vermutlich muss der Counter/Index der
Variablen noch weiter angepasst werden.
2015-06-25 14:27:18 +02:00
Fütterling, Franziska (WWI2012D) 8bc2867eb7 GenCode für CharLiteral, momentan aufgrund einer Parser-NPE nicht
lauffähig
2015-06-23 20:28:36 +02:00
Fütterling, Franziska (WWI2012D) d028f7f14a GenCode: Assign ist jetzt dynamisch für mehrere Variablen - Anpassung
für verschiedene Typen potentiell nötig
2015-06-23 20:01:06 +02:00
Fütterling, Franziska (WWI2012D) c00e61eae6 Verbesserung von Assign: sollte jetzt auch mehrere Variablen korrekt
abspeichern - allerdings entsteht im class-File nur eine einzige.
Problem in IntLiteral etc.?
2015-06-23 16:54:22 +02:00
Schubert, Julia (WWI2012D) acdc36d23f BoolLiteral implementiert 2015-06-23 00:23:14 +02:00
Fütterling, Franziska (WWI2012D) 93f4257cdc Assign und LiteralInt enthalten eine funktionierende GenCode-Methode,
Anpassungen für mehrere Variablen evtl. nötig
2015-06-22 23:53:29 +02:00
Schubert, Julia (WWI2012D) fe960b3fe0 Object in void geändert in BoolLit 2015-06-22 16:55:11 +02:00
Fikus, Evelyn (WWI2012D) a901dd6b38 Merge branch 'bytecode' of
ssh://seminar@gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into
bytecode
2015-06-22 16:51:52 +02:00
Fikus, Evelyn (WWI2012D) cd8b85cc41 Probleme beim Pull, Versuch zu Committen bevor pull 2015-06-22 16:51:13 +02:00
Fütterling, Franziska (WWI2012D) 2820e4e5c6 Merge branch 'bytecode' of
ssh://seminar@gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into
bytecode
2015-06-22 16:49:59 +02:00
Fütterling, Franziska (WWI2012D) d9a08820e8 Idee zu Return createReturn 2015-06-22 16:47:19 +02:00
Fütterling, Franziska (WWI2012D) 1cd1aa7a50 Änderung an StringLitTest.jav -> jetzt return void 2015-06-22 16:42:03 +02:00
Schubert, Julia (WWI2012D) 39580fc15e Testcode für BoolLit geschrieben 2015-06-22 16:30:11 +02:00
Schubert, Julia (WWI2012D) 68aa427220 BCEL Test für BoolLit 2015-06-22 16:26:18 +02:00
Fikus, Evelyn (WWI2012D) 8da8eb7d28 Neuer Versuch StringLiteral 2015-06-22 16:22:12 +02:00
Fütterling, Franziska (WWI2012D) 5da4ed534d Erneuter Assign-Commit aufgrund von merge-Problemen 2015-06-22 16:14:45 +02:00
Fikus, Evelyn (WWI2012D) ad0e8643ec Update StringLiteral; Test läuft allerdings nicht durch 2015-06-22 15:18:11 +02:00
Fikus, Evelyn (WWI2012D) 614607e803 Weiterer bcel Versuch StringLiteral 2015-06-22 15:08:30 +02:00
Fikus, Evelyn (WWI2012D) 09a447cc48 Versuch bcel für StringLiteral 2015-06-22 14:49:22 +02:00
Fikus, Evelyn (WWI2012D) d96b36c5d1 Assign.java genByteCode Methode angefügt (noch leer) 2015-06-22 12:55:21 +02:00
Martin Plümicke 99c719251d Null eingefuegt 2015-06-18 12:34:09 +02:00
Pluemicke Martin 7530e01ea9 Merge branch 'bytecode' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into bytecode 2015-06-18 11:19:00 +02:00
Pluemicke Martin 6a5876d10b kleine Aenderungen 2015-06-18 11:18:56 +02:00
Martin Plümicke c7a77c0646 Weitere Testfaelle 2015-06-18 11:17:42 +02:00
JanUlrich 24671ceca4 EmptyClass Test funktionsfähig 2015-06-17 12:03:54 +02:00
JanUlrich bfac3c8145 Fehler in SuperCall beheben. StandardKonstruktor enthält nun SuperCall 2015-06-17 11:08:50 +02:00
JanUlrich 2c4f735935 ConstraintType entfernt. Constructor erbt jetzt von Methode. Fehler in Constructor.pareserPostProcessing behoben 2015-06-16 22:08:17 +02:00
JanUlrich 302d7d05f3 Merge branch 'bytecode' into refactoring 2015-06-16 17:44:45 +02:00
JanUlrich 1c2ac73dbd Standardkonstruktor enthält nun SuperCall 2015-06-16 17:44:27 +02:00
JanUlrich 4191c8d8b2 Merge 2015-06-16 15:04:38 +02:00
Fikus, Evelyn (WWI2012D) c9f1dd2449 Überall genByteCode Methode deklarieren, sodass Fehler verschwinden.
Korrektur Method.java und Constructor.java
2015-06-16 14:58:27 +02:00
Fikus, Evelyn (WWI2012D) 253ba6518b Versuch, MethodGen in Method.java zu implementieren 2015-06-16 14:23:32 +02:00
JanUlrich 3be6aef821 Merge 2015-06-16 14:23:01 +02:00
JanUlrich 62a1a9b871 Constraint Type gelöscht 2015-06-16 14:22:13 +02:00
Fikus, Evelyn (WWI2012D) c6502600cc Weitere Überlegung im Bereich Constructor / Method 2015-06-16 13:53:32 +02:00
Fikus, Evelyn (WWI2012D) e9c6170d15 Iteration über Statements innerhalb method.java 2015-06-16 13:19:01 +02:00
Fikus, Evelyn (WWI2012D) 2fac549cf5 Zusätzliche Kommentare und geringfügige Änderungen in der Überlegung 2015-06-16 13:08:11 +02:00
Fikus, Evelyn (WWI2012D) 1d9f58b196 Notizen und Codeschnipsel GenByteCode 2015-06-16 11:55:29 +02:00
JanUlrich 76b575fedc Kommentar 2015-06-10 14:12:32 +02:00
JanUlrich aa5bb3c073 Fehler im Parser behoben: castexpression und primitive Typen entfernt 2015-06-10 13:17:06 +02:00
JanUlrich 21cf019ac4 Unnötige Typen gelöscht. char, int, bool, etc. Können vom Unify-Algorithmus nicht verwertet werden 2015-06-10 11:36:40 +02:00
JanUlrich 356a229573 ConstraintsSet überarbeitet 2015-06-03 14:10:34 +02:00
JanUlrich 6bb01f012f ConstraintsSet überarbeitet 2015-06-03 14:10:12 +02:00
JanUlrich e6606d08ee ConstraintPair erbt von Pair 2015-06-03 11:27:39 +02:00
stan f3a324fb38 genByteCode für Constructor implementiert. Unfertig 2015-05-27 15:57:15 +02:00
JanUlrich 6030682400 Test für Bytecode anfügen. Beispielhaft generateBytecode-Methode in MyCompiler implementiert 2015-05-27 12:53:47 +02:00
JanUlrich 8692a01c50 BCEL-Library anfügen und Compliance auf Java 8 erhöhen 2015-05-26 21:45:47 +02:00
JanUlrich 15e9fb44b8 Trennung von KomplexeMenge und COnstraintsSet. Experimenteller Zustand 2015-05-26 21:43:05 +02:00
JanUlrich 2b6ffdef11 Java Compliance auf JRE 8 erhöhen 2015-05-26 10:13:35 +02:00
JanUlrich a6d9fdcafd BCEL-Library zu /lib/ hinzufügen 2015-05-25 19:11:40 +02:00
JanUlrich 91360af27c Merge branch 'bytecode' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-05-25 18:47:34 +02:00
Fikus, Evelyn (WWI2012D) a94d7326b1 Kleiner Formfehler korrigiert 2015-05-22 13:54:46 +02:00
Fikus, Evelyn (WWI2012D) 57350e2095 Fertige class.java ByteCode Generierung 2015-05-22 13:50:43 +02:00
Fikus, Evelyn (WWI2012D) 2b62ac43e6 21.05.15 - Konferenz Call; Class.java GenByteCode Methode - Zusatz:
Rückgabewert sollte ByteCode sein; Entsprechend muss ähnlich
JavaCodeResult Klasse eine ByteCodeResult Klasse erstellt werden...
2015-05-21 17:10:04 +02:00
JanUlrich 19d0198d2a Unify Test 2015-05-20 15:20:56 +02:00
JanUlrich fcac7fb04f toString() für OderMenge implementieren 2015-05-20 15:20:25 +02:00
JanUlrich 035851ba79 Änderungen am Logger. + Test für Filte im Unify. 2015-05-20 14:59:28 +02:00
JanUlrich 4833bfd09b Cloning Library anfügen 2015-05-13 13:59:10 +02:00
JanUlrich 28a51e0ede Javadoc anfügen 2015-05-12 19:57:14 +02:00
JanUlrich 6fc412d949 Revert "Merge branch 'bytecode'"
This reverts commit 711c0d2f79, reversing
changes made to 2b47b8e5bf.
2015-05-12 19:54:34 +02:00
JanUlrich 711c0d2f79 Merge branch 'bytecode' 2015-05-12 19:50:52 +02:00
JanUlrich 2b47b8e5bf Javadoc generieren und Aufräumen: Sämtliche codegen-Methoden und Hilfsklassen zu Generierung von Bytecode löschen. Unnötige Tests entfernen. ANTLR-Package entfernen 2015-05-12 19:49:27 +02:00
JanUlrich ae40372a8b Encoding auf UTF-8 geändert 2015-05-12 14:57:12 +02:00
JanUlrich 76ee7bb549 Veraltete Javadoc gelöscht 2015-05-12 11:40:29 +02:00
JanUlrich f5ef7bd3f5 Merge branch 'master' into bytecode 2015-05-07 14:41:31 +02:00
JanUlrich 5e5a17b265 toString zu UndMenge hinzugefügt 2015-05-07 14:41:13 +02:00
JanUlrich d343c27edb Logger angepasst. MyCompiler.getAPI erfordert nun einen Logger als Parameter. Filterung im Unify eingefügt. 2015-05-07 01:01:39 +02:00
JanUlrich 1cb335b46b ConstraintsSet umgebaut in eine KomplexeMenge von Pairs 2015-04-28 15:27:16 +02:00
JanUlrich 7ba9688702 Menge eingeführt und dadurch Vector abgelöst. KomplexeMenge eingeführt, ConstraintSet baut nun darauf auf 2015-04-22 21:40:22 +02:00
JanUlrich 144c31a4cb Bei der Generierung der FiniteClosure werden nun Beziehungen zu Superklassen, welche Importiert wurden, korrekt angefügt 2015-04-08 21:23:28 +02:00
Martin Plümicke c080f452ae Bug 18: ? ext/sup ty1 = ? ext/sup ty2 wird reduziert zu ty1 = ty2 2015-04-01 01:28:15 +02:00
JanUlrich f66150a1e7 Testfälle angepasst. 2015-03-31 17:29:29 +02:00
JanUlrich 1d7074f1c6 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-03-31 16:45:54 +02:00
Martin Plümicke a2997fdd6b Bug 16: wieder zurueckgenommen, Zusammenhangskomponenten wieder raus 2015-03-31 16:45:22 +02:00
JanUlrich 565fd1ba0c bin-Verzeichnis auf gitignore setzen 2015-03-31 16:25:34 +02:00
JanUlrich af7d478b84 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-03-31 16:19:48 +02:00
JanUlrich 03753d68b9 Aufräumen 2015-03-31 15:24:30 +02:00
JanUlrich b2f742033b Aufräumen: Statt getTypeFor wird nun nur noch TYPE aufgerufen. Die Constraintbildung in der LambdaExpression wurde geändert. Siehe Bug #12 2015-03-31 12:37:45 +02:00
Martin Plümicke 67b6d29ce8 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-03-12 12:30:20 +01:00
Martin Plümicke 385423092a Fuer TPH <. Ty' hinzugefuegt: ? ext Ty <. Ty' 2015-03-12 12:29:54 +01:00
JanUlrich 2c6bce344d TYPE erstellt bei LambdaExpression nun zwei constraints, falls die Parameter/RetType nicht vom Typ ? extends sind. Dann werden die Constraints einmal mit dem eigentlichen Typ T und einem ? extends/super T -Typ generiert 2015-03-12 12:27:43 +01:00
JanUlrich c53eff4f2c Merge branch 'refactoring' 2015-03-11 16:37:00 +01:00
Martin Plümicke 8cc1c79c67 ? ext Ty <. TPH in Unify eingefuegt 2015-03-11 16:36:05 +01:00
JanUlrich 7f2d64e73b Änderung an der Constraint Erstellung für LambdaExpressions 2015-03-11 12:39:08 +01:00
JanUlrich 3b258c3880 Object Type implementieren 2015-03-11 11:54:42 +01:00
Martin Plümicke 40bfc79948 ObjectType als Supertype von RefType, GTV und TPH eingefuegt, einige Fehler muessen noch geloest werden 2015-03-10 22:48:29 +01:00
Pluemicke Martin 6a47dfaf58 nicht lauffaehige Version 2015-03-10 22:32:29 +01:00
JanUlrich 3d2dbc8709 ObjectType eingeführt. Es muss noch Unify angepasst werden 2015-03-10 12:38:18 +01:00
JanUlrich 324fb27b6d ObjectType eingeführt. Es muss noch Unify angepasst werden 2015-03-10 12:33:52 +01:00
Dr. Martin Pluemicke f2bc4f0ffa TPH <. ? super Ty reduziert auf TPH <. Ty eingefuegt, damit BUG 7 geloest 2015-03-05 16:37:45 +01:00
Dr. Martin Pluemicke 549640dfc4 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-03-05 13:58:50 +01:00
JanUlrich 90e4c3bc96 Doku erweitert 2015-03-05 13:56:42 +01:00
Dr. Martin Pluemicke 7889783e8a Unify Bugfix Bug 5 geloest und fuer TypVar <. RefType: ? extends Ty <. RefType eingefuegt 2015-03-05 13:55:21 +01:00
JanUlrich e8538be1c2 Fehler in Umwandlung von GTV zu TPH beheben 2015-03-04 13:50:09 +01:00
JanUlrich 1ec9c3f67f Fehler in Umwandlung von RefType zu GTV in BoGTV beheben 2015-03-03 18:24:14 +01:00
JanUlrich 618847bf4f Fehlende Umwandlung von RefType zu GTV in Wildcard-Types implementieren 2015-03-03 16:59:00 +01:00
JanUlrich 0674de12c6 Overloading-Algorithmus in Klasse MethodCall auslagern 2015-03-03 11:37:04 +01:00
JanUlrich 8e59e46d57 Overloading-Algorithmus in Klasse MethodCall auslagern 2015-03-03 11:34:42 +01:00
JanUlrich a8a7ad564b Super-Aufruf implementieren 2015-02-26 17:46:04 +01:00
JanUlrich 4fd30850b5 ThisCall und SuperCall anfügen 2015-02-26 17:41:29 +01:00
JanUlrich 37e55490e1 Fehler beheben. Hat FunN den Rückgabetyp void, so wird kein ? extends void generiert 2015-02-26 16:57:43 +01:00
JanUlrich 1941fa5d64 this()-Aufruf anfügen 2015-02-26 15:50:23 +01:00
JanUlrich 5455ba803e Fehler in TYPE-Methode von Constructor beheben 2015-02-25 18:51:48 +01:00
JanUlrich da70abf954 Tests anfügen. Probleme mit Constructor beheben. 2015-02-25 18:29:44 +01:00
JanUlrich 9e99a5b20b This()-Aufruf anfügen. Änderungen an Constructor vornehmen. Keine lauffähige Version 2015-02-25 16:34:29 +01:00
JanUlrich 9261518e5a Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-02-25 13:04:26 +01:00
Dr. Martin Pluemicke c315def167 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-02-25 12:05:05 +01:00
Dr. Martin Pluemicke 748a38833d Bug fix in Unify Zeile 1339 Typecast vom 1. aufs 2. Argument verschoben. 2015-02-25 12:04:13 +01:00
JanUlrich 20b1632319 Testfälle ausgebessert 2015-02-25 11:33:06 +01:00
JanUlrich 16dd89376c GTVDeclarationContext angefügt. Dadurch Fehler beim Umwandeln von GTZ in TPH behoben 2015-02-24 17:06:14 +01:00
JanUlrich dc7d23d699 Testfälle anfügen 2015-02-24 15:26:36 +01:00
JanUlrich d72a803027 Dokumentation angefangen 2015-02-24 15:26:19 +01:00
JanUlrich dc6cd6cdd0 FieldDeclaration wurde der Typ in der TYPE methode nicht angepasst. Fehler behoben 2015-02-24 15:25:56 +01:00
Martin Plümicke 4e61ba736d alle Faelle P.OperatorSmallerExtends eingefuegt 2015-02-17 23:23:02 +01:00
Pluemicke Martin acd20842e2 oderConstraints.filterWrongConstraints(unifier); oderConstraints.unifyUndConstraints(unifier); auskommentiert 2015-02-17 22:12:31 +01:00
Pluemicke c366ef05f5 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-02-11 14:41:55 +01:00
Pluemicke 6664b819d9 Zugrifssberechtigung 2015-02-11 14:41:27 +01:00
JanUlrich 621f1c860f Karthesisches Produkt wird leer, falls einer der Teilmengen leer ist 2015-02-11 14:35:37 +01:00
Martin Plümicke 7a61324c9f ? ext/super TPH <?/= RefType/GenType und RefType/GenType <?/= ? ext/super TPH eingefuegt nicht alle Faelle getestet 2015-02-08 19:19:30 +01:00
Martin Plümicke 267083fbb4 debug Ausgabe korriegiert! 2015-02-07 15:19:10 +01:00
JanUlrich fed7519f84 Tests anfügen 2015-02-06 15:41:24 +01:00
JanUlrich 0922b9e899 Änderungen an Testfiles und Logger 2015-02-06 15:41:01 +01:00
JanUlrich f9bfe6fb44 Test geändert 2015-02-03 15:58:04 +01:00
Martin Plümicke 57f35605f6 In Unify.subunify bei P.OperatorEqual() Wildcards loeschen 2015-02-03 14:01:04 +01:00
Martin Plümicke b4c0b17cf4 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-02-03 12:26:03 +01:00
Martin Plümicke 56f69727eb In Unify.greater1 alle Bounds einer BGTV als groesserer Typ hinzugefuegt 2015-02-03 12:25:45 +01:00
JanUlrich 8aa106b38a Falsche Übernahme von BoGTV im Konstruktor von Class beheben 2015-02-03 12:24:40 +01:00
JanUlrich de4cfa2656 BoGTV fügt keine Constraints mehr hinzu. Test angefügt 2015-02-03 11:20:05 +01:00
Martin Plümicke 69bd1510ec Unify.subunify Kommentare eingefuegt 2015-01-31 14:21:02 +01:00
Martin Plümicke 1b1a690212 Unify.subunify wildcards werden entfernt, wenn sie auf beiden Seiten identisch sind 2015-01-30 16:12:25 +01:00
JanUlrich a549843f05 GenTypeTest anfügen 2015-01-30 15:37:27 +01:00
Martin Plümicke 1369161f12 Wildcard Unifikation 2015-01-30 13:52:17 +01:00
JanUlrich 91b4ff4c2f Fehler in GenericVarTest beheben 2015-01-30 13:23:29 +01:00
JanUlrich 03d1727cbf Unnötige GenericVariables nicht mehr einfügen 2015-01-28 01:26:42 +01:00
JanUlrich a579bb964f Testfälle anfügen 2015-01-27 11:10:16 +01:00
JanUlrich 6e6908d460 Fehler in parserPostProcessing behoben 2015-01-23 16:49:09 +01:00
JanUlrich 99d3ecf030 Fehler behoben, Fehler behoben, Fehler behoben. 2015-01-23 15:28:15 +01:00
JanUlrich 615d2c633e Fehler beheben 2015-01-23 13:31:52 +01:00
JanUlrich c58d706c01 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-01-20 18:33:16 +01:00
JanUlrich f1171210bc Kleine Änderungen, Fehlerbehebung 2015-01-20 18:32:51 +01:00
Dr. Martin Pluemicke cbafe352c9 Kommentar in Unify fuer weitere Arbeiten eingefuegt 2015-01-20 18:24:58 +01:00
JanUlrich d7bb282d0f Fehler behoben 2015-01-20 16:56:53 +01:00
Dr. Martin Pluemicke ffdffa8371 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-01-20 14:40:57 +01:00
Dr. Martin Pluemicke e9b2564484 Unify.java: in subst rekursiver Aufruf fuer Wildcardargumente eingefuegt 2015-01-20 14:40:05 +01:00
JanUlrich 24caa58998 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-01-20 13:36:15 +01:00
JanUlrich 3a58694a02 Einsetzen von Generischen Variablen angepasst 2015-01-20 13:35:56 +01:00
Dr. Martin Pluemicke 9ebe0d3850 Merge branch 'refactoring' 2015-01-20 11:54:32 +01:00
Martin Plümicke 6c4090bc4b in Subst = in &= umgeaendert 2015-01-18 23:22:32 +01:00
Martin Plümicke 56c5ec7e18 Bug in subst in Unfify.java gepatched 2015-01-16 22:02:05 +01:00
JanUlrich 7d4009b6ae parser.jay Fehler beheben 2015-01-16 14:48:20 +01:00
Martin Plümicke b910584c29 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2015-01-16 14:04:49 +01:00
Martin Plümicke 6057bc72a5 jay.darwin aktualisiert 2015-01-16 14:03:29 +01:00
JanUlrich 7ef990ef08 merged 2015-01-04 23:29:56 +01:00
JanUlrich b44584bc7e Tests angefügt 2015-01-04 19:34:23 +01:00
JanUlrich f20b978b14 Kleine Anpassungen 2015-01-04 19:30:37 +01:00
Pluemicke Martin 18c9464a1e Pfad von forschung aus ResearchPapers angepasst 2015-01-02 16:21:20 +01:00
Martin Plümicke e49a8463b8 merge conlict in bin/.gitignore behoben 2015-01-02 16:13:03 +01:00
Martin Plümicke a22f8c98cf merge conlict in bin/.gitignore behoben 2015-01-02 15:59:22 +01:00
Martin Plümicke e8b03d5717 Pfad in Bytecode/Classfile angepasst 2015-01-02 15:54:59 +01:00
Martin Plümicke 5b9cabb3e1 Wildcards im Subst im Unify eingefuegt Kommentare 2014-12-05 17:47:34 +01:00
JanUlrich 66da1d2638 merge 2014-12-05 17:27:17 +01:00
Martin Plümicke 4046066b7c Wildcards im Subst im Unify eingefuegt 2014-12-05 17:25:46 +01:00
JanUlrich 09d1acab93 Testfälle angefügt 2014-12-05 17:11:22 +01:00
Martin Plümicke 9861fb2f3b Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2014-12-05 16:40:56 +01:00
Martin Plümicke aca4ee05a0 Bytecode ergaenzt 2014-12-05 16:38:32 +01:00
JanUlrich e6ca6fefa2 Fehler in Karthesischem Produkt behoben 2014-11-20 02:13:01 +01:00
JanUlrich d41d3293aa Debugausgaben eingeschränkt 2014-11-04 17:01:35 +01:00
JanUlrich c1947e0810 Merge mit Änderungen am Unify 2014-11-04 13:51:48 +01:00
JanUlrich 4401414b67 Anderen Logger angefügt 2014-11-04 13:47:31 +01:00
JanUlrich 1cb66d4f88 Umstellung auf anderen Logger 2014-11-04 13:47:05 +01:00
Martin Plümicke da70cad512 Unifyaufruf aufgeteilt in Zusammenhangskomponenten in Sourcefile.java 2014-11-03 10:40:28 +01:00
JanUlrich aeef4aed34 .classpath angepasst 2014-10-13 10:42:14 +02:00
JanUlrich 36efc62cc9 Merge branch 'refactoring' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into refactoring 2014-10-13 10:39:34 +02:00
JanUlrich c62c31db6d Kleine Änderungen am Logger 2014-10-13 10:39:14 +02:00
Dr. Martin Pluemicke 3ae2d8cfa1 ANTLR Library hinzugefuegt 2014-10-09 18:05:15 +02:00
pl 80e286b05a Merge branch 'refactoring' of ssh://pl@gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into refactoring 2014-10-09 17:47:49 +02:00
JanUlrich b31f770fe3 Logger angefügt 2014-10-09 17:38:29 +02:00
JanUlrich 1141417c0b Weitere Aussonderung von Constraints durch Unify 2014-10-09 17:38:10 +02:00
JanUlrich 8723ced9b0 Merge branch 'refactoring' into bytecode 2014-10-09 13:54:55 +02:00
JanUlrich efa79da5d5 filterUndConstraints 2014-10-09 13:54:44 +02:00
JanUlrich 4e394ae12c Neuer Testfall angefügt 2014-10-09 12:01:41 +02:00
JanUlrich 26f35cfeb6 Logger angefügt 2014-10-09 12:01:16 +02:00
JanUlrich 2b33576488 Finite Closure ohne Subtypes. checkType statt TYPE 2014-10-08 19:00:17 +02:00
JanUlrich 51e0d96174 Reduziertes Testbeispiel angefügt 2014-10-07 17:47:59 +02:00
JanUlrich 383e5bd883 NullPointerException in Unify beseitigt 2014-10-07 17:47:23 +02:00
JanUlrich 81416b8bf4 Richtiger Import von Generischen Typen aus der JRE 2014-10-07 15:36:18 +02:00
JanUlrich 3db9b069c7 makeBasicAssumptions verbessert. Nimmt auch nun die Superklassen der BasicAssumptions auf 2014-10-07 10:47:52 +02:00
JanUlrich 37923779b1 In der FC_TTO werden keine T <. T Constraints mehr aufgenommen 2014-10-07 09:20:35 +02:00
JanUlrich 0fc7e18935 Merge branch 'antlr' into refactoring 2014-10-06 14:56:16 +02:00
JanUlrich ab20e2c5e8 FC enthält Supertklassen 2014-10-01 17:13:08 +02:00
JanUlrich 4c9d696905 FC enthält superklassen 2014-10-01 17:12:16 +02:00
Dr. Martin Pluemicke e9b7fdc139 Merge branch 'refactoring' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into refactoring 2014-09-18 16:34:13 +02:00
Dr. Martin Pluemicke b74f25552e neu 2014-09-18 16:33:50 +02:00
JanUlrich d636d29ab5 Problem mit der Umwandlung von generischen Variablen zu TPH behoben (noch nicht vollständig) 2014-09-18 16:26:02 +02:00
JanUlrich 7abb1f8ad6 Antlr Test angefügt 2014-09-16 17:34:26 +02:00
JanUlrich 49917239c1 GenericVarDeclarationList extends SyntaxTreeNode 2014-09-16 17:34:04 +02:00
JanUlrich 18e7b68927 JavaParser fixed 2014-09-16 11:31:15 +02:00
JanUlrich 2c0ece66b9 Merge branch 'refactoring' into antlr 2014-09-15 23:38:00 +02:00
JanUlrich 199278ac8b ANTLR Test angepasst 2014-09-15 23:37:50 +02:00
JanUlrich 250b98d679 Antlr verschoben 2014-09-15 17:03:13 +02:00
JanUlrich 88a6559401 Antlr anfügen 2014-09-14 18:39:24 +02:00
JanUlrich 6505c985e0 Konstruktor von Type muss mit Elternelement im Syntaxbaum aufgerufen werden 2014-09-14 18:38:43 +02:00
JanUlrich ca8145e4a2 GenericTypeVar setParentClass entfernt 2014-09-10 23:32:36 +02:00
JanUlrich 35b12402c7 Merge branch 'refactoring' into antlr 2014-09-09 17:48:06 +02:00
JanUlrich 45ea59e7ad Fehler in get_ParaList behoben 2014-09-09 17:47:57 +02:00
JanUlrich 81d9d3ab64 Ant_build angepasst 2014-09-09 15:30:32 +02:00
JanUlrich 330451271e Kleine Änderungen 2014-09-09 14:32:53 +02:00
JanUlrich 583dfb23e3 Probleme mit GenericTypeVar behoben 2014-09-09 11:15:10 +02:00
JanUlrich 6858092ef1 Einführung von ConstraintType 2014-09-08 15:12:47 +02:00
JanUlrich 9f97bef6cd Umstrukturierung zu de.dhbwstuttgart-Packagenamen 2014-09-05 11:49:31 +02:00
JanUlrich c90f1404ab Große Umstrukturierung 2014-09-04 16:35:44 +02:00
JanUlrich 93a6070bd4 Änderungen an Testfiles 2014-09-03 16:15:04 +02:00
JanUlrich 3d88fb479b Testfile angepasst 2014-09-03 10:42:12 +02:00
JanUlrich 3232201843 Fehler in WildcardType.printJavaCode behoben 2014-09-02 18:55:54 +02:00
JanUlrich 37d33b7a31 JavaClassName implementiert 2014-09-02 18:49:19 +02:00
JanUlrich 01c6a934ed Projekt umstrukturierung 2014-09-02 11:07:16 +02:00
JanUlrich 585ca78de8 Tests angefügt 2014-09-02 10:34:06 +02:00
JanUlrich d6c75463ca Projektstruktur ändern 2014-09-02 10:33:54 +02:00
Martin Plümicke 60c515a40d Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2014-09-02 09:44:57 +02:00
Martin Plümicke b468fdf877 Test files angefuegt 2014-09-02 09:43:36 +02:00
JanUlrich 55d40d14ad UnaryExpr verändert 2014-08-28 19:05:57 +02:00
JanUlrich 25d61b703b JavaClassName eingeführt 2014-08-28 18:42:54 +02:00
JanUlrich bd74b24500 Fehler beseitigt 2014-08-28 18:42:40 +02:00
JanUlrich 5ea3d620dc Java8 ANTLR-Parser angegfügt 2014-08-22 13:10:48 +02:00
JanUlrich d39aecff4d PrintJavaCode in PostIncExpr fixed 2014-08-14 12:25:58 +02:00
JanUlrich e7034f82ce Kleine Verbesserungen 2014-08-11 14:35:33 +02:00
JanUlrich 0aa5c06b73 Wildcards werden nun auch geparst 2014-08-07 17:13:55 +02:00
JanUlrich 7ff5b6d9db makeBasicAssumptions fixed 2014-08-07 16:09:07 +02:00
JanUlrich 63a10f4775 Fehler behoben 2014-08-07 14:26:02 +02:00
JanUlrich b9dde7b015 Parser nimmt name statt simplename für Typ 2014-08-07 12:20:11 +02:00
JanUlrich 92408cfdcc Parser typename hinzugefügt 2014-08-07 12:11:18 +02:00
JanUlrich 25195440f0 Problem mit LocalVarDecl und setType behoben 2014-08-07 11:07:11 +02:00
JanUlrich eed860f43e Fehler in GTV2TPH behoben 2014-08-05 18:02:57 +02:00
JanUlrich 18b468547d RefTypes kontrollieren bei checkType nun auch Parameterliste 2014-08-05 17:57:23 +02:00
JanUlrich c35904d216 Test added 2014-08-05 16:58:26 +02:00
JanUlrich 0357dd0903 JavaCodeResult equals implementiert 2014-08-05 14:30:52 +02:00
Sascha Speidel 5c80215516 Andis letzter Stand 2014-08-05 14:24:58 +02:00
JanUlrich 69668434da Code aufgeräumt 2014-08-05 12:34:09 +02:00
JanUlrich 2925926e58 Einsetzen von GenericTypeVars an das Ende einer GenericTypeVarList verbessert 2014-07-31 15:15:33 +02:00
JanUlrich dbf493424e Fehler bei der Einsetzung von GenericVarDeclarations beheben 2014-07-23 17:24:08 +02:00
JanUlrich f51b5d5b7c Class fügt Assumptions von Paralist richtig hinzu 2014-07-17 20:17:59 +02:00
JanUlrich 038e65970c Tests anfügen 2014-07-16 18:40:03 +02:00
JanUlrich 42c47fbe86 Tests angefügt 2014-07-16 18:39:06 +02:00
JanUlrich 45d176aed2 Fehler beseitigen 2014-07-16 18:38:55 +02:00
JanUlrich 26d3a89fd9 Fixed insert Type 2014-07-16 16:50:21 +02:00
JanUlrich df67185b45 Fehler beim Umwandeln von Generischen Variablen zu TPH beseitigt 2014-07-16 16:40:49 +02:00
JanUlrich f059e0b9b8 Einsetzen von generischen Variablen verbessern 2014-07-16 14:35:12 +02:00
JanUlrich 694899e73f Einsetzen von generischen Variablen 2014-07-16 10:33:34 +02:00
JanUlrich 0327894686 Code aufgeräumt 2014-07-09 16:04:33 +02:00
JanUlrich bbb3cf76d9 Parser geändert 2014-07-09 15:07:40 +02:00
JanUlrich 053edc0f73 Merge branch 'master' into refactoring 2014-07-09 10:54:08 +02:00
JanUlrich 8c7d453472 gitignore update 2014-07-09 10:52:59 +02:00
JanUlrich 39bcd6702b Änderungen am Lexer 2014-07-09 10:52:23 +02:00
Martin Plümicke 8030b1edf9 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2014-07-09 10:49:55 +02:00
Martin Plümicke 97ec87a358 JLex geadded 2014-07-09 10:49:25 +02:00
JanUlrich d5258d2d09 Änderungen am Parser 2014-07-02 10:00:17 +02:00
JanUlrich 2ce0fd4dcd SourcePatchPoint eingeführt 2014-06-25 17:31:04 +02:00
JanUlrich edfa85df7f Einsetzen von Generics geändert. Unvollständiger Zustand 2014-06-25 17:30:31 +02:00
JanUlrich eec8e4d1a8 Generics werden eingesetzt. Unvollständiger Zustand 2014-06-20 11:18:45 +02:00
JanUlrich 1f55b81b02 Änderungen am TypeInsertSet. Momentan werden keine Generics eingesetzt 2014-06-19 19:40:13 +02:00
JanUlrich 370bb8913b TODOS bereinigt 2014-06-18 14:06:23 +02:00
JanUlrich 4000695736 BoundedGenerics werden nun auch mit einbezogen 2014-06-18 13:37:17 +02:00
JanUlrich 863f8ec2ec Problem mit Generischen Variabeln in Klassendeklarationen gelöst 2014-06-18 11:53:39 +02:00
JanUlrich 05f4dbbff3 GenericVarAssumption eingeführt 2014-06-18 11:30:14 +02:00
JanUlrich 27c4a61ed3 Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2014-06-18 09:06:25 +02:00
JanUlrich 5979835783 GenericVarAssumption eingeführt 2014-06-18 09:06:08 +02:00
JanUlrich 2151c4550b Backup 2014-06-10 20:23:01 +02:00
JanUlrich 4a67a4a58e Object wird standardmäßig importiert. TestFiles angefügt 2014-05-07 21:57:29 +02:00
JanUlrich c6ddc8036d Einsetzen von Generischen Variablen überarbeitet 2014-05-07 13:01:14 +02:00
JanUlrich ef641065e2 Backup 2014-05-07 09:36:31 +02:00
JanUlrich 5c6a61f2ef Testfiles added. Tests fixed. Operator TypeExpr fixed 2014-05-07 08:10:55 +02:00
JanUlrich ab4d26103e Tests angefügt 2014-04-28 17:21:27 +02:00
JanUlrich 6a98115361 Typen werden vor dem Unifizieren nochmals kontrolliert 2014-04-28 08:26:11 +02:00
JanUlrich 1a655943ed Test angefügt 2014-04-28 07:40:49 +02:00
JanUlrich 2511d95a9f getDescription von FormalParameter angepasst 2014-04-26 20:10:18 +02:00
JanUlrich 9aea618525 SyntaxTreeNode wird zum ermitteln der TIPs zusätzlich durchlaufen 2014-04-26 19:33:26 +02:00
JanUlrich 183d8f43ee Test angefügt. Neues Problem: Nicht alle Generischen Variablen werden eingesetzt 2014-04-26 18:30:25 +02:00
JanUlrich 64d01e8ee2 Einsetzen von generischen Typen gefixt 2014-04-26 17:41:53 +02:00
JanUlrich d053ce0b08 Test angefügt 2014-04-26 16:20:16 +02:00
JanUlrich fab7522def Fehler in Testcases behoben. RefTyp.hashCode() angefügt 2014-04-24 13:01:24 +02:00
JanUlrich e7db1e7494 Operator unterstützt jetzt auch Double und Float statt nur Integer als Typ 2014-04-24 12:42:10 +02:00
JanUlrich ce61fdf3c7 Bug-fixes; GenericTypeVar kann von mehreren Klassen per extends abhängen. 2014-04-24 01:53:35 +02:00
JanUlrich 36fd915248 weitere Testcases eingefügt 2014-04-23 17:59:59 +02:00
JanUlrich fd5aafb0eb Operator mit TypeExpr versehen 2014-04-23 17:59:39 +02:00
JanUlrich c9477705cc Typen in Parameterlisten von Lambda Ausdrücken werden nicht mehr eingesetzt 2014-04-23 15:19:56 +02:00
JanUlrich b2e79b35f3 Dateien vergessen 2014-04-23 14:36:50 +02:00
JanUlrich db4442628b Bugfix 2014-04-23 14:36:26 +02:00
JanUlrich eab2c7ef93 Neuimplementierung von automatischer Einsetzung der benötigten Generischen Variablen durch TypeInsertSet 2014-04-23 12:05:57 +02:00
JanUlrich 258c172f80 Modifikation am Parser. Auch Felder sind Generisc. 2014-04-16 17:34:35 +02:00
JanUlrich 1005dabacb GenerischeTypvariablen werden beim Einsetzen in den Quelltext mit eingesetzt 2014-04-16 16:02:16 +02:00
JanUlrich 87e4f2fd36 TypeinferenceException überarbeitet 2014-04-15 14:56:20 +02:00
JanUlrich 0345dceb8e Problem mit String Literal behoben 2014-04-15 12:07:42 +02:00
JanUlrich f0ef3017b9 Fixed Tests. Doppelte TypeAssumptions beseitigt 2014-04-14 18:05:24 +02:00
JanUlrich 61e9c953c9 fixed getChildren() 2014-04-09 15:54:20 +02:00
JanUlrich 5316b6ca51 Import Test funktioniert jetzt 2014-04-09 14:12:55 +02:00
JanUlrich 8d4213511d Backup-commit 2014-04-03 10:35:25 +02:00
JanUlrich 38f4a1351f MakeBasicAssumptionsFromJRE geändert 2014-04-01 21:38:53 +02:00
JanUlrich 8e7776dc4c GTV2TPH eingeführt. Beim Anfügen eines SingleConstraints werden GenericTypeVars nun durch Typeplaceholder ausgetauscht. 2014-03-28 18:36:08 +01:00
JanUlrich b432c74ec4 Fehler in SourceFile behoben 2014-03-27 16:51:57 +01:00
JanUlrich c65774492e Obsolete Klassen gelöscht. Alle Fehlermeldungen im src-Ordner behoben 2014-03-27 16:50:36 +01:00
JanUlrich 9784a10f84 Fehler beseitigt. wandleRefType2GenericVariables überarbeitet. getChildren()-Methode für alle Statements implementiert 2014-03-27 16:43:07 +01:00
JanUlrich b6e2d75174 FunNInterface N = 1-6 zu den BasicAssumptions hinzugefügt 2014-03-26 23:28:17 +01:00
JanUlrich 69af867293 Tests angefügt 2014-03-26 02:33:47 +01:00
JanUlrich 0e19e996c1 createTypeInsertPoint-Methode eingeführt 2014-03-25 04:41:07 +01:00
JanUlrich c738e5c0de FileOutputStream zu OutputStream geändert 2014-03-24 18:01:26 +01:00
Martin Plümicke 157c83d9a4 Anpassungen fuer jvmdisassembler 2014-03-24 15:32:13 +01:00
JanUlrich 9990892e5b Librarys pushen 2014-03-24 15:07:02 +01:00
JanUlrich fae741c658 Fehler in der TypeInsertSet.equals() methode behoben 2014-03-24 13:59:21 +01:00
JanUlrich 7031839f52 TypeInsertSet.equals() verbessert. TypinferenceResult.getTypeInsertPoints() liefert keine doppelten InsertSets mehr zurück 2014-03-21 16:34:16 +01:00
JanUlrich f16a9345eb Fehler in Overloading im Bezug auf FunNInterface behoben 2014-03-20 11:49:37 +01:00
JanUlrich ddb9ef6d7d Fehlerhaftes RefType erstellen von Klassen gefixt 2014-03-20 11:35:57 +01:00
JanUlrich 947be154ea Fehler behoben 2014-03-20 02:42:44 +01:00
JanUlrich 5b141bbb5d Merge mit master. LocalVarDecl.declType entfernt 2014-03-19 15:53:02 +01:00
JanUlrich 7defd01db8 Änderungen an typeReconstruction in SourceFile. Die Constraints aller Klassen einer SourceFile werden nun gemeinsam Unifiziert und jede Klasse aus dem SourceFile erhält das selbe ResultSet. Tests angefügt. 2014-03-19 15:14:50 +01:00
JanUlrich 38698d04fd ConstuctorAssumption angefügt 2014-03-18 20:19:13 +01:00
JanUlrich d4b9ea9a73 ConstuctorAssumption angefügt 2014-03-18 20:18:57 +01:00
JanUlrich 9d361072e3 Test angefügt 2014-03-18 14:26:07 +01:00
JanUlrich 2fb5413548 Parsen von typisierten Felddeklarationen ist jetzt möglich. 2014-03-18 14:04:31 +01:00
JanUlrich 59106a7e7b Methodenparameter können nun auch inferiert werden 2014-03-18 13:38:47 +01:00
JanUlrich 75f9a74c44 Parser tests angefügt 2014-03-17 20:05:12 +01:00
JanUlrich dbda805fa5 SyntaxTreeNode.equal verbessert 2014-03-17 17:55:55 +01:00
JanUlrich 94aae83ca8 SyntaxTreeNode.equals() implementiert 2014-03-14 16:34:25 +01:00
JanUlrich 40346b2a0b Neue Klasse für Interface eingeführt 2014-03-14 14:09:03 +01:00
JanUlrich 977e777878 Starte mit der Einführung von Interfaces 2014-03-13 01:21:52 +01:00
JanUlrich 8060278e3f Kleine Änderungen an Tests 2014-03-13 01:21:02 +01:00
JanUlrich d7e6a7848d Bytecodegenerierung angepasst. Tests erstellt 2014-03-12 18:28:30 +01:00
JanUlrich 931e90e7f2 Erster Bytecodegeneration-Test angefügt. codegen()-Methode angepasst 2014-03-12 16:32:50 +01:00
JanUlrich 5d57179364 SyntaxTreeNode.getDescription() angefügt 2014-03-12 15:27:26 +01:00
JanUlrich b29fa03782 ParameterInsertTest added 2014-03-10 15:56:17 +01:00
JanUlrich eef38bff42 MethodTypeInsertTest angefügt. TypeInsertTester verbessert 2014-03-09 14:12:48 +01:00
JanUlrich c5eb3a5711 MethodTypeInsertTest angefügt 2014-03-09 13:03:30 +01:00
JanUlrich 4786345f7b Felder (Field) müssen nun immer mit einem Offset initialisiert werden. Fehler behoben. Parser modifiziert. VariableTypeInsertTest läuft erfolgreich 2014-03-09 12:10:03 +01:00
JanUlrich 1872b8aac4 TypeInsertTests angefügt 2014-03-09 11:44:12 +01:00
JanUlrich 9ced1b4827 Funktion parse(sourceCode) angefügt. SourceFile enthält nicht mehr das Feld filename 2014-03-07 22:05:10 +01:00
JanUlrich a39a9273a1 Ä 2014-02-22 05:43:20 +01:00
JanUlrich b891ad4580 FunNMethode implementiert 2014-02-22 04:58:49 +01:00
JanUlrich 282b068552 Begeonnen mit Implementierung von getChildren() 2014-02-19 23:04:48 +01:00
JanUlrich e33b9fd76e weitere Fehler behoben 2014-02-19 17:32:43 +01:00
JanUlrich bf341ab4f3 createTypeAssumptions für Field generiert 2014-02-19 14:16:28 +01:00
JanUlrich e31725f255 Fehler in LocalVarAssumption behoben 2014-02-19 06:09:59 +01:00
JanUlrich 8d26f06092 Constructor implementiert 2014-02-19 05:20:54 +01:00
JanUlrich d397002960 Overloading an neue Assumptions angepasst 2014-02-18 17:47:40 +01:00
JanUlrich c242061541 TypeAssumptions überarbeitet. Neue AssumptionTypes angefügt. CType... Assumptions werden abgelöst 2014-02-14 17:31:55 +01:00
JanUlrich 95d7553482 InstVarDecl gelöscht. Weitere Verbesserungen. Keine Lauffähige Version 2014-02-12 22:10:33 +01:00
JanUlrich 605c554ffb parserPostProcessing implementiert 2014-02-12 02:12:12 +01:00
JanUlrich 8cbd22f562 SyntaxTreeNode angefügt. SourceFile steht nun nur noch für eine Java-Datei nicht mehr für mehrere. 2014-02-11 16:30:38 +01:00
JanUlrich 31473630f8 Backup 2014-02-11 02:47:39 +01:00
JanUlrich 7a556fbafb TPH.fresh() kann nicht mehr ohne die Übergabe eines TypeReplacementListeners erfolgen. Keine Lauffähige Version 2014-02-10 17:44:20 +01:00
JanUlrich 3cd6b2f792 Weitere obsolete Methoden entfernt. TypeInsertPoint angefügt 2014-02-10 04:25:14 +01:00
JanUlrich bda8dbe671 CTypeResultSet umbenannt und nicht gebrauchte Funktionen entfernt 2014-02-09 18:52:04 +01:00
JanUlrich 971fb4ad65 Starte mit Löschen alter Typeinferenzalgorithmen 2014-02-09 16:07:31 +01:00
JanUlrich 7ec923c4bb Stand vom 9.11.2013 angefügt 2014-02-05 13:38:34 +01:00
JanUlrich 218684dd24 Kopie aus dem CVS 2014-02-04 17:44:03 +01:00
JanUlrich 9626e0e14e gitignore added. CVS-Ordner ignorieren sowie class und package dateien 2014-02-04 17:42:14 +01:00
JanUlrich 64c652da71 Java und jav files 2013-10-18 13:33:46 +02:00
Martin Plümicke dd7d0edbfe Merge branch 'master' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore 2013-01-01 02:57:01 +01:00
Martin Plümicke 47b5b2a288 1. BUG 15: TPH1 <. ? super TPH2 führt zu TPH1 <. TPH2 und zu Eq1 einzugefuegt 1. BUG 16: Unify in Zusammenhangskomponenten aufgeteit, muss wieder zurueckgenommen werden 2013-01-01 02:56:34 +01:00
3045 changed files with 539271 additions and 43599 deletions
Executable
+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="BCEL"/>
<classpathentry excluding=".classpath|.cvsignore|.externalToolBuilders/|.project|.settings/|Papers/|bin/|doc/|examples/|lib/|notizen/|src/|test/|tools/|BCEL/" including="log4j.xml" kind="src" path=""/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
<classpathentry kind="lib" path="lib/junit-4.0.jar" sourcepath="/home/janulrich/.m2/repository/junit/junit/4.0/junit-4.0-sources.jar"/>
<classpathentry kind="lib" path="lib/cloning.jar"/>
<classpathentry kind="lib" path="lib/guava-10.0.1.jar"/>
<classpathentry kind="lib" path="lib/commons-bcel6-6.0-SNAPSHOT.jar" sourcepath="/home/janulrich/Development/intellijworkspace/bcel/src/main/java"/>
<classpathentry kind="lib" path="lib/bcel-6.0-SNAPSHOT.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>
Executable
+12
View File
@@ -0,0 +1,12 @@
bin
*.class
output*
JavaLexer.java
JavaParser.java
*.~*~
*.aux
*.dvi
*.log
y.output
Bytecode
JavaParserBuilder.launch
+21
View File
@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType">
<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/>
<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/>
<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/JavaCompilerCore"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="JavaCompilerCore"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_BUILDER_ENABLED" value="false"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/JavaCompilerCore/tools/AntParserBuilderWindows.xml}"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="incremental,clean"/>
<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/>
<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/JavaCompilerCore/tools}"/>
</launchConfiguration>
-9
View File
@@ -1,9 +0,0 @@
#
# https://help.github.com/articles/dealing-with-line-endings/
#
# Linux start script should use lf
/gradlew text eol=lf
# These are Windows script files and should use crlf
*.bat text eol=crlf
-28
View File
@@ -10,31 +10,3 @@ bin
*.jar
*.war
*.ear
# IDEs
.classpath
*.iml
.idea/
/target/
.DS_Store
.project
.settings/
/target/
#
manually/
logFiles/**
!logFiles/.gitkeep
src/main/java/de/dhbwstuttgart/parser/antlr/
src/main/java/de/dhbwstuttgart/sat/asp/parser/antlr/
#GRADLE
# Ignore Gradle project-specific cache directory
.gradle
# Ignore Gradle build output directory
build
Executable
+31
View File
@@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>JavaCompilerCore</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.ui.externaltools.ExternalToolBuilder</name>
<triggers>clean,full,incremental,</triggers>
<arguments>
<dictionary>
<key>LaunchConfigHandle</key>
<value>&lt;project&gt;/.externalToolBuilders/JavaParserBuilder.launch</value>
</dictionary>
<dictionary>
<key>incclean</key>
<value>true</value>
</dictionary>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>
@@ -0,0 +1,2 @@
eclipse.preferences.version=1
filesCopiedToWebInfLib=
+5
View File
@@ -0,0 +1,5 @@
eclipse.preferences.version=1
encoding//src/de/dhbwstuttgart/core/MyCompiler.java=UTF-8
encoding//src/de/dhbwstuttgart/syntaxtree/statement/LambdaExpression.java=UTF-8
encoding//src/de/dhbwstuttgart/typeinference/SingleConstraint.java=UTF-8
encoding//src/de/dhbwstuttgart/typeinference/UndConstraint.java=UTF-8
+13
View File
@@ -0,0 +1,13 @@
eclipse.preferences.version=1
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.8
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.8
+4
View File
@@ -0,0 +1,4 @@
#Sun Jul 27 10:21:29 CEST 2008
eclipse.preferences.version=1
instance/org.eclipse.core.net/org.eclipse.core.net.hasMigrated=true
internal.default.compliance=default
+6
View File
@@ -0,0 +1,6 @@
package bcelifier;
public class BooleanValue {
Boolean c = true;
Boolean b = c.booleanValue();
}
+63
View File
@@ -0,0 +1,63 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class BooleanValueCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public BooleanValueCreator() {
_cg = new ClassGen("bcelifier.BooleanValue", "java.lang.Object", "BooleanValue.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createFields();
createMethod_0();
_cg.getJavaClass().dump(out);
}
private void createFields() {
FieldGen field;
field = new FieldGen(0, new ObjectType("java.lang.Boolean"), "c", _cp);
_cg.addField(field.getField());
field = new FieldGen(0, new ObjectType("java.lang.Boolean"), "b", _cp);
_cg.addField(field.getField());
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.BooleanValue", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(new PUSH(_cp, 1));
il.append(_factory.createInvoke("java.lang.Boolean", "valueOf", new ObjectType("java.lang.Boolean"), new Type[] { Type.BOOLEAN }, Constants.INVOKESTATIC));
il.append(_factory.createFieldAccess("bcelifier.BooleanValue", "c", new ObjectType("java.lang.Boolean"), Constants.PUTFIELD));
InstructionHandle ih_12 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createFieldAccess("bcelifier.BooleanValue", "c", new ObjectType("java.lang.Boolean"), Constants.GETFIELD));
il.append(_factory.createInvoke("java.lang.Boolean", "booleanValue", Type.BOOLEAN, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
il.append(_factory.createInvoke("java.lang.Boolean", "valueOf", new ObjectType("java.lang.Boolean"), new Type[] { Type.BOOLEAN }, Constants.INVOKESTATIC));
il.append(_factory.createFieldAccess("bcelifier.BooleanValue", "b", new ObjectType("java.lang.Boolean"), Constants.PUTFIELD));
InstructionHandle ih_26 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.BooleanValueCreator creator = new bcelifier.BooleanValueCreator();
creator.create(new FileOutputStream("bcelifier.BooleanValue.class"));
}
}
+11
View File
@@ -0,0 +1,11 @@
package bcelifier;
public class FieldDeclaration {
Integer field = methode();
Integer methode()
{
return field;
}
}
@@ -0,0 +1,68 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class FieldDeclarationCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public FieldDeclarationCreator() {
_cg = new ClassGen("bcelifier.FieldDeclaration", "java.lang.Object", "FieldDeclaration.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createFields();
createMethod_0();
createMethod_1();
_cg.getJavaClass().dump(out);
}
private void createFields() {
FieldGen field;
field = new FieldGen(0, new ObjectType("java.lang.Integer"), "field", _cp);
_cg.addField(field.getField());
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.FieldDeclaration", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("bcelifier.FieldDeclaration", "methode", new ObjectType("java.lang.Integer"), Type.NO_ARGS, Constants.INVOKEVIRTUAL));
il.append(_factory.createFieldAccess("bcelifier.FieldDeclaration", "field", new ObjectType("java.lang.Integer"), Constants.PUTFIELD));
InstructionHandle ih_12 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
private void createMethod_1() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(0, new ObjectType("java.lang.Integer"), Type.NO_ARGS, new String[] { }, "methode", "bcelifier.FieldDeclaration", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createFieldAccess("bcelifier.FieldDeclaration", "field", new ObjectType("java.lang.Integer"), Constants.GETFIELD));
InstructionHandle ih_4 = il.append(_factory.createReturn(Type.OBJECT));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.FieldDeclarationCreator creator = new bcelifier.FieldDeclarationCreator();
creator.create(new FileOutputStream("bcelifier.FieldDeclaration.class"));
}
}
Binary file not shown.
+7
View File
@@ -0,0 +1,7 @@
package bcelifier;
public class IntLiteral {
Integer methode(){
return 50000;
}
}
+56
View File
@@ -0,0 +1,56 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class IntLiteralCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public IntLiteralCreator() {
_cg = new ClassGen("bcelifier.IntLiteral", "java.lang.Object", "IntLiteral.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createMethod_0();
createMethod_1();
_cg.getJavaClass().dump(out);
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.IntLiteral", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
private void createMethod_1() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(0, new ObjectType("java.lang.Integer"), Type.NO_ARGS, new String[] { }, "methode", "bcelifier.IntLiteral", il, _cp);
InstructionHandle ih_0 = il.append(new PUSH(_cp, 50000));
il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
InstructionHandle ih_5 = il.append(_factory.createReturn(Type.OBJECT));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.IntLiteralCreator creator = new bcelifier.IntLiteralCreator();
creator.create(new FileOutputStream("bcelifier.IntLiteral.class"));
}
}
+43
View File
@@ -0,0 +1,43 @@
package bcelifier;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.OpenOption;
import java.nio.file.Path;
import org.apache.commons.bcel6.classfile.ClassFormatException;
import org.apache.commons.bcel6.classfile.ClassParser;
import org.apache.commons.bcel6.classfile.JavaClass;
import org.apache.commons.bcel6.util.BCELifier;
public class JavaToBCEL {
public final static String rootDirectory = System.getProperty("user.dir")+"/BCEL/bcelifier/";
public static void main(String args[]){
new JavaToBCEL();
}
public JavaToBCEL(){
try {
//new BCELifier(new ClassParser(rootDirectory+"Lambda1.class").parse(), new FileOutputStream(new File(rootDirectory+"Lambda1Creator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"This.class").parse(), new FileOutputStream(new File(rootDirectory+"ThisCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"IntLiteral.class").parse(), new FileOutputStream(new File(rootDirectory+"IntLiteralCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"MethodCall.class").parse(), new FileOutputStream(new File(rootDirectory+"MethodCallCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"FieldDeclaration.class").parse(), new FileOutputStream(new File(rootDirectory+"FieldDeclarationCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"Null.class").parse(), new FileOutputStream(new File(rootDirectory+"NullCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"LocalVarAccess.class").parse(), new FileOutputStream(new File(rootDirectory+"LocalVarAccessCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"Wildcard.class").parse(), new FileOutputStream(new File(rootDirectory+"WildcardCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"BooleanValue.class").parse(), new FileOutputStream(new File(rootDirectory+"BooleanValueCreator.java"))).start();
new BCELifier(new ClassParser(rootDirectory+"NewClass.class").parse(), new FileOutputStream(new File(rootDirectory+"NewClassCreator.java"))).start();
} catch (ClassFormatException | IOException e) {
e.printStackTrace();
}
}
}
Binary file not shown.
Binary file not shown.
+8
View File
@@ -0,0 +1,8 @@
package bcelifier;
public class Lambda1 {
Runnable methode(){
return ()->System.out.println(this);
}
}
View File
+10
View File
@@ -0,0 +1,10 @@
package bcelifier;
public class LocalVarAccess {
Integer methode(Integer i){
Integer var;
var = 10 + i;
return var;
}
}
+61
View File
@@ -0,0 +1,61 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class LocalVarAccessCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public LocalVarAccessCreator() {
_cg = new ClassGen("bcelifier.LocalVarAccess", "java.lang.Object", "LocalVarAccess.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createMethod_0();
createMethod_1();
_cg.getJavaClass().dump(out);
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.LocalVarAccess", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
private void createMethod_1() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(0, new ObjectType("java.lang.Integer"), new Type[] { new ObjectType("java.lang.Integer") }, new String[] { "arg0" }, "methode", "bcelifier.LocalVarAccess", il, _cp);
InstructionHandle ih_0 = il.append(new PUSH(_cp, 10));
il.append(_factory.createLoad(Type.OBJECT, 1));
il.append(_factory.createInvoke("java.lang.Integer", "intValue", Type.INT, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
il.append(InstructionConstants.IADD);
il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
il.append(_factory.createStore(Type.OBJECT, 2));
InstructionHandle ih_11 = il.append(_factory.createLoad(Type.OBJECT, 2));
InstructionHandle ih_12 = il.append(_factory.createReturn(Type.OBJECT));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.LocalVarAccessCreator creator = new bcelifier.LocalVarAccessCreator();
creator.create(new FileOutputStream("bcelifier.LocalVarAccess.class"));
}
}
Binary file not shown.
+12
View File
@@ -0,0 +1,12 @@
package bcelifier;
public class MethodCall {
void methode(){
}
void methode2(Runnable r){
methode();
r.run();
}
}
+70
View File
@@ -0,0 +1,70 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class MethodCallCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public MethodCallCreator() {
_cg = new ClassGen("bcelifier.MethodCall", "java.lang.Object", "MethodCall.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createMethod_0();
createMethod_1();
createMethod_2();
_cg.getJavaClass().dump(out);
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.MethodCall", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
private void createMethod_1() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(0, Type.VOID, Type.NO_ARGS, new String[] { }, "methode", "bcelifier.MethodCall", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
private void createMethod_2() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(0, Type.VOID, new Type[] { new ObjectType("java.lang.Runnable") }, new String[] { "arg0" }, "methode2", "bcelifier.MethodCall", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("bcelifier.MethodCall", "methode", Type.VOID, Type.NO_ARGS, Constants.INVOKEVIRTUAL));
InstructionHandle ih_4 = il.append(_factory.createLoad(Type.OBJECT, 1));
il.append(_factory.createInvoke("java.lang.Runnable", "run", Type.VOID, Type.NO_ARGS, Constants.INVOKEINTERFACE));
InstructionHandle ih_10 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.MethodCallCreator creator = new bcelifier.MethodCallCreator();
creator.create(new FileOutputStream("bcelifier.MethodCall.class"));
}
}
+10
View File
@@ -0,0 +1,10 @@
package bcelifier;
public class NewClass {
public NewClass(Integer i){}
void methode2(){
new NewClass(1);
}
}
+60
View File
@@ -0,0 +1,60 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class NewClassCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public NewClassCreator() {
_cg = new ClassGen("bcelifier.NewClass", "java.lang.Object", "NewClass.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createMethod_0();
createMethod_1();
_cg.getJavaClass().dump(out);
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, new Type[] { new ObjectType("java.lang.Integer") }, new String[] { "arg0" }, "<init>", "bcelifier.NewClass", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
private void createMethod_1() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(0, Type.VOID, Type.NO_ARGS, new String[] { }, "methode2", "bcelifier.NewClass", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createNew("bcelifier.NewClass"));
il.append(InstructionConstants.DUP);
il.append(new PUSH(_cp, 1));
il.append(_factory.createInvoke("java.lang.Integer", "valueOf", new ObjectType("java.lang.Integer"), new Type[] { Type.INT }, Constants.INVOKESTATIC));
il.append(_factory.createInvoke("bcelifier.NewClass", "<init>", Type.VOID, new Type[] { new ObjectType("java.lang.Integer") }, Constants.INVOKESPECIAL));
il.append(InstructionConstants.POP);
InstructionHandle ih_12 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.NewClassCreator creator = new bcelifier.NewClassCreator();
creator.create(new FileOutputStream("bcelifier.NewClass.class"));
}
}
+7
View File
@@ -0,0 +1,7 @@
package bcelifier;
public class Null {
Integer i = null;
}
+53
View File
@@ -0,0 +1,53 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class NullCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public NullCreator() {
_cg = new ClassGen("bcelifier.Null", "java.lang.Object", "Null.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createFields();
createMethod_0();
_cg.getJavaClass().dump(out);
}
private void createFields() {
FieldGen field;
field = new FieldGen(0, new ObjectType("java.lang.Integer"), "i", _cp);
_cg.addField(field.getField());
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.Null", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(InstructionConstants.ACONST_NULL);
il.append(_factory.createFieldAccess("bcelifier.Null", "i", new ObjectType("java.lang.Integer"), Constants.PUTFIELD));
InstructionHandle ih_9 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.NullCreator creator = new bcelifier.NullCreator();
creator.create(new FileOutputStream("bcelifier.Null.class"));
}
}
Binary file not shown.
+8
View File
@@ -0,0 +1,8 @@
package bcelifier;
public class This {
This methode(){
return this;
}
}
+55
View File
@@ -0,0 +1,55 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class ThisCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public ThisCreator() {
_cg = new ClassGen("bcelifier.This", "java.lang.Object", "This.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createMethod_0();
createMethod_1();
_cg.getJavaClass().dump(out);
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.This", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
private void createMethod_1() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(0, new ObjectType("bcelifier.This"), Type.NO_ARGS, new String[] { }, "methode", "bcelifier.This", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
InstructionHandle ih_1 = il.append(_factory.createReturn(Type.OBJECT));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.ThisCreator creator = new bcelifier.ThisCreator();
creator.create(new FileOutputStream("bcelifier.This.class"));
}
}
+5
View File
@@ -0,0 +1,5 @@
package bcelifier;
public class Wildcard<A> {
Wildcard<? super String> a;
}
+50
View File
@@ -0,0 +1,50 @@
package bcelifier;
import org.apache.commons.bcel6.generic.*;
import org.apache.commons.bcel6.classfile.*;
import org.apache.commons.bcel6.*;
import java.io.*;
public class WildcardCreator implements Constants {
private InstructionFactory _factory;
private ConstantPoolGen _cp;
private ClassGen _cg;
public WildcardCreator() {
_cg = new ClassGen("bcelifier.Wildcard", "java.lang.Object", "Wildcard.java", ACC_PUBLIC | ACC_SUPER, new String[] { });
_cp = _cg.getConstantPool();
_factory = new InstructionFactory(_cg, _cp);
}
public void create(OutputStream out) throws IOException {
createFields();
createMethod_0();
_cg.getJavaClass().dump(out);
}
private void createFields() {
FieldGen field;
field = new FieldGen(0, new ObjectType("bcelifier.Wildcard"), "a", _cp);
_cg.addField(field.getField());
}
private void createMethod_0() {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(ACC_PUBLIC, Type.VOID, Type.NO_ARGS, new String[] { }, "<init>", "bcelifier.Wildcard", il, _cp);
InstructionHandle ih_0 = il.append(_factory.createLoad(Type.OBJECT, 0));
il.append(_factory.createInvoke("java.lang.Object", "<init>", Type.VOID, Type.NO_ARGS, Constants.INVOKESPECIAL));
InstructionHandle ih_4 = il.append(_factory.createReturn(Type.VOID));
method.setMaxStack();
method.setMaxLocals();
_cg.addMethod(method.getMethod());
il.dispose();
}
public static void main(String[] args) throws Exception {
bcelifier.WildcardCreator creator = new bcelifier.WildcardCreator();
creator.create(new FileOutputStream("bcelifier.Wildcard.class"));
}
}
+76
View File
@@ -0,0 +1,76 @@
\begin{thebibliography}{CMP00}
\bibitem[B{\"a}u05]{JB05}
J{\"o}rg B{\"a}uerle.
\newblock {\em Typinferenz in \textsf{Java}}.
\newblock Studienarbeit, BA Stuttgart/Horb, 2005.
\newblock (in german).
\bibitem[CMP00]{CMP2000}
Emmanuel Chailloux, Pascal Manoury, and Bruno Pagano.
\newblock {\em D\'eveloppement d'applications avec Objective Caml}.
\newblock O'Reilly, avril 2000.
\newblock in french, translation http://caml.inria.fr/oreilly-book.
\bibitem[Lit98]{VL98}
Vassily Litvinov.
\newblock Constraint-based polymorphism in {Cecil}: Towards a practical and
static type system.
\newblock In {\em {OOPSLA} '98 Conference Proceedings}, volume 33(10), pages
388--411, 1998.
\bibitem[Mel05]{MM05}
Markus Melzer.
\newblock {\em Integration der \textsf{Java}--Typeinferenz in eine
Programmierumgebung}.
\newblock Studienarbeit, BA Stuttgart/Horb, 2005.
\newblock Studienarbeit (in german).
\bibitem[Ode02]{MO02}
Martin Odersky.
\newblock Inferred type instantiation for {GJ}.
\newblock Note sent to the types mailing list, January 2002.
\bibitem[Ott04]{TO04}
Thomas Ott.
\newblock {\em Typinferenz in \textsf{Java}}.
\newblock Studienarbeit, BA Stuttgart/Horb, 2004.
\newblock (in german).
\bibitem[OZZ01]{OZZ01}
Martin Odersky, Christoph Zenger, and Matthias Zenger.
\newblock Colored local type inference.
\newblock {\em ACM SIG{\-}PLAN Notices}, 36(3):41--53, 2001.
\bibitem[PC94]{PC94}
John Plevyak and Andrew~A. Chien.
\newblock Precise concrete type inference for object-oriented languages.
\newblock In {\em Proceedings of the ninth annual conference on Object-oriented
programming systems, language, and applications}, pages 324--340. ACM Press,
1994.
\bibitem[Pl{\"u}04]{Plue04_1}
Martin Pl{\"u}micke.
\newblock Type unification in \textsf{Generic--Java}.
\newblock In Michael Kohlhase, editor, {\em Proceedings of 18th {I}nternational
{W}orkshop on {U}nification ({U}{N}{I}{F}'04)}, July 2004.
\newblock {\tt http://www.faculty.iu-bremen.de/mkohlhase/event/unif04}.
\bibitem[PS91]{PS91}
Jens Palsberg and Michael~I. Schwartzbach.
\newblock Object-oriented type inference.
\newblock {\em Proceedings of OOPSLA'91, ACM SIGPLAN Sixth Annual Conference on
Object-Oriented Programming Systems, Languages and Applications}, pages
146--161, October 1991.
\bibitem[PS94]{PS94}
Jens Palsberg and Michael~I. Schwartzbach.
\newblock {\em Object-oriented type systems}.
\newblock John Wiley \& Sons, 1994.
\bibitem[PT00]{PT00}
Benjamin~C. Pierce and David~N. Turner.
\newblock Local type inference.
\newblock {\em ACM Trans. Program. Lang. Syst.}, 22(1):1--44, 2000.
\end{thebibliography}
BIN
View File
Binary file not shown.
+140
View File
@@ -0,0 +1,140 @@
\documentclass[11pt]{article}
\setlength{\unitlength}{1 true cm}
\setlength{\oddsidemargin}{0 true mm}
\setlength{\evensidemargin}{\oddsidemargin}
\setlength{\textwidth}{160 true mm}
\setlength{\parindent}{5 true mm}
\setlength{\topmargin}{1 true mm}
\setlength{\headheight}{12 true pt}
\setlength{\headsep}{20 true pt}
\setlength{\textheight}{240 true mm}
\setlength{\footskip}{15 true mm}
\setlength{\voffset}{-10 true mm}
%\setlength{\footheight}{5 true mm}
\usepackage{prolog}
\title{Type--Inference in \javafive}
\author{J\"org B\"auerle, Markus Melzer, Martin Pl\"umicke\medskip\\
\small
University of Cooperative Education Stuttgart\\
%Department of Information Technology\\
%Florianstra{\ss}e 15\\
%D--72160 Horb\\
%tel. +49-7451-521142\\
%fax. +49-7451-521190\\
\small m.pluemicke@ba-horb.de
}
\begin{document}
\bibliographystyle{alpha}
\maketitle
\section{Overview}
We have developed for \javafive a type inference system. This means that the
user can write programs without any type annotations and the system determines
the correct types. We have implemented a prototype for this
system. Furthermore we have implemented a plugin for the integrated development
environment \eclipse.
\section{The Type Inference Algorithm}
Since then type inference in \oldjava similar languages is known as the
automatic parameter instantiation in polymorphic methods (local type inference)
\cite{PT00,OZZ01,MO02}. It is proved that this type inference is
unsound. Some techniques are presented, which solve these unsoundness.
We extend these approaches to a global variant, where additionally
the types of method parameters, methods' return types and the
types of local variables are determined automatically. The input of the algorithm
are only the types of the fields of the respective classes.
The type inference algorithm traverses the programming code as an abstract syntax
tree and forms sets of type inequations. As it is known that even the local
type inference is unsound, it is obvious that our approach is also unsound. We
deal with this problem, as we allow different type assumptions for the
parameters, the return type, the local variables, and the expressions of each
method, respectively. During traversing the set of type assumptions is adapted, such
that the set contains exactly the assumptions, which are possible assumptions at
the respective position during the traverse. The adaption is done by solving the
inequations as far as possible by a type unification algorithm
\cite{Plue04_1}. The type unification is not unitary but finitary. This means
that each unification step reduces the set of type assumptions if there is no
solution for one set of inequations. On the other hand the set of type assumptions is extended, if
there is more than one solution for a set of inequations.
The result of the type inference algorithm is the set of all correct
combinations of types of the parameters, the return type, and the local
variables.
After the type inference step during the compilation, there are two possibilities. Either for each
combination of types of each method, byte code could be built,
respectively. This would lead to the property that method names, which are
declared only once, could be overloaded.
On the other hand one combination could
be selected. Then, for this combination of types byte code would be built. We
implemented the second possibility (cp. section \ref{sec:IDE}).
Furthermore, we have done comparisons to other type inference
approaches. We considered the
type system of \textsf{Cecil} \cite{VL98}, which is a static type system
providing type checking and local type inference. Furthermore we considered a
type system for a language oriented at \textsf{Smalltalk} \cite{PS91,
PS94}. In this approach the types are computed by a least fixed point derivation.
In \cite{PC94} type inference for the language \textsf{Concurrent Aggregates} is
described, which contains a data flow analysis. Finally, we considered the type
system of \textsf{ocaml} \cite{CMP2000}. The approach of this type system
differs from our's, as \textsf{ocaml} allows higher-order functions.
\section{Implementation}
We have done the implementation in \oldjava. The implementation consists of two
parts. First we describe the implementation of the type unification
algorithm. Then we present the implementation of the actual type inference via
code traverse.
\subsection{Type Unification}
The implementation of the type unification \cite{TO04} contains as the main
datastructure a Menge of type term pairs. The algorithm itself is
implemented as an extension of the usual unification algorithm. Pairs of
the form $a \olsub ty$ respectively $ty \olsub a$, where $a$ is a variable and
$ty$ is a term but no variable, generate multiple solutions.
\subsection{Type Inference}
The idea of the implementation of the actual type inference algorithm
\cite{JB05} is that each construct in a \javafive program (method, parameter,
return type, variable,
expression) get first a variable as its type assumption. Then, for each variable a
type is determined by the algorithm.
There are two main datastructures.
The first one represents type assumptions for methods, fields, and
variables. During runtime a set of instances of this
datastructure represent the different possibilities of type assumptions. The
second main datastructure represents the substitutions of the variables to types,
calculated step by step.
During runtime each construct of the abstract syntax tree is registered
as a listener by the corresponding type variable. These registrations finally allow
to substitute the variables in the abstract syntax tree by the
calculated types.
\section{Integrated Development Environment (IDE)}
\label{sec:IDE}
For \javafive without explicite type declaration a plugin for \eclipse is
developed \cite{MM05}. The IDE allows to show all different correct
possibilities to give types to the methods, parameters, return types, and local
variables, which are determined by the type inference algorithm. Then, the user
can select the favored type for each construct step by step. Finally, the
selected types are substituted in the respective constructs of the abstract syntax
tree.
\section{Summary and Outlook}
We have developed a system, which allows to give typeless \javafive
programs. The system calculates the correct types. The soundness problem is
solved such that all different possibilities are determined and the user
himself decides, which type should be used.
In the moment only a subset of \javafive is implemented. Interfaces and
F--bounded type parameters are not implemented yet. This should be done
henceforth.
\bibliography{martin,SE}
\end{document}
+2310
View File
File diff suppressed because it is too large Load Diff
+708
View File
@@ -0,0 +1,708 @@
\usepackage{float}
\usepackage{color}
\usepackage{xspace_spezial}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{alltt}
\usepackage{fancybox}
\usepackage{stmaryrd}
\usepackage{verbatim}
\usepackage{epsfig}
\usepackage{multicol}
\newlength{\textwid}
\setlength{\textwid}{\textwidth}
\addtolength{\textwid}{-4ex}
\newlength{\textfighei}
\setlength{\textfighei}{\textheight}
\addtolength{\textfighei}{-10ex}
\DeclareSymbolFont{blackboard}{OT1}{bbm}{m}{sl}
\DeclareMathSymbol{\IR}{0}{blackboard}{"52}
\DeclareMathSymbol{\IN}{0}{blackboard}{"4E}
\DeclareMathSymbol{\IF}{0}{blackboard}{"46}
\DeclareMathSymbol{\IP}{0}{blackboard}{"50}
\DeclareMathSymbol{\IK}{0}{blackboard}{"4D}
\DeclareMathSymbol{\IZ}{0}{blackboard}{"5A}
\DeclareMathSymbol{\IQ}{0}{blackboard}{"51}
\DeclareMathSymbol{\IC}{0}{blackboard}{"43}
\parindent 0mm
\renewcommand{\unlhd}{<}
%\renewcommand{\lhd}{<\!\!|}
%\renewcommand{\rhd}{|\!\!>}
\definecolor{blue}{rgb}{0,0,1}
\definecolor{red}{rgb}{1,0,0}
\definecolor{green}{rgb}{0,1,0.3}
\definecolor{bluered}{rgb}{1,0,1}
\definecolor{bluegreen}{rgb}{1,0.3,0}
\newcommand{\red}[1]{\textcolor{red}{#1}}
\newcommand{\blue}[1]{\textcolor{blue}{#1}}
\newcommand{\green}[1]{\textcolor{green}{#1}}
\newcommand{\bluered}[1]{\textcolor{bluered}{#1}}
\newcommand{\bluegreen}[1]{\textcolor{bluegreen}{#1}}
\reversemarginpar
\newcommand{\commentary}[1]{\marginpar[\tiny #1]{\tiny #1}}
%\newcommand{\commentaryforKlaeren}[1]{\marginpar[\tiny #1]{\tiny #1}}
%\newcommand{\commentary}[1]{}
\newcommand{\commentaryforKlaeren}[1]{}
%
% figure - Einstellungen
%
\def\textfraction{0}
\def\topfraction{1.5}
\def\bottomfraction{1}
\def\floatpagefraction{1.0}
%\def\dbltopfraction{1}
%\def\dblfloatpagefraction{1.0}
\newcommand{\indexentry}[2]{\item[] #1 \dotfill #2\qquad\qquad\vspace{-0.8em}}
\newcommand{\sub}{\textrm{\,$\sqsubseteq$\,}\xspace}
\newcommand{\nsub}{\text{\,$\not\sqsubseteq$\,}\xspace}
\newcommand{\ecap}{\mbox{$\,\sqcap\,$}}
\newcommand{\ecup}{\mbox{$\,\sqcup\,$}}
\newcommand{\pre}{\mbox{$\,\preceq\,$}}
\newcommand{\botam}{{\{\, \bot,\ \amalg \,\}}\xspace}
%
% Substitutions
%
\newcommand{\subst}{\textrm{$\expbf{subst}{\normaltset}$}}
%
% Signaturen
%
\def\einf#1#2{\mbox{$(#1,~#2)$}\xspace}
\newcommand{\sig}{\einf{\normalbtermset}{\Theta}}
\newcommand{\typesig}{\einf{BTV}{TC}\xspace}
\newcommand{\einsig}{\einf{\normaltermset}{F}\xspace}
\newcommand{\msig}{\einsig}
\newcommand{\mssig}{\einf{\equivtermset}{F_{ms}}\xspace}
\newcommand{\ossig}{\einf{\normaltset, \sub}{F_{os}}\xspace}
\def\einfm#1#2{\langle #1,\ #2 \rangle}
%\def\pos#1#2{\einf{#1,\ \sqsubseteq}{#2}}
\def\pos#1#2#3{\einf{#1,\ #2}{#3}}
\def\posm#1#2{\pos{#1}{#2}}
\def\posSO#1{\pos{#1}{F}}
\def\posSIG#1{\pos{S}{#1}}
\newcommand{\posig}{\pos{\normaltset}{\olsub}{\Sigma}}
\newcommand{\posigM}{\pos{\normaltset}{\olsub}{M}}
%\newcommand{\posig}{\pos{S}{\Sigma}}
\newcommand{\overposig}{\pos{\overline{S}}{\overline{\Sigma}}}
\def\fsf#1#2#3{\mbox{$#1^{(#2,#3)}$}\xspace}
\def\Sigmaa#1#2{\fsf{F}{#1}{#2}\xspace}
\newcommand{\Sigmaws}{\Sigmaa{w}{s}}
\newcommand{\Sigmawt}{\Sigmaa{w}{\theta}}
\def\set#1{\{\,#1 \,\}}
\newcommand{\termset}[3]{\textrm{$\exp{#1_{#2}}{#3}$}\xspace}
\newcommand{\normaltset}{\termset{T}{\Theta}{TV}}
\newcommand{\normaltermset}{\termset{T}{\Theta}{TV}}
\newcommand{\normalbtermset}{\termset{T}{TC}{BTV}}
\newcommand{\equivtermset}{\textrm{$\exp{T_{\Theta_{\sim}}}{TV}$}\xspace}
\newcommand{\equiva}[1]{[#1]_{\sim}}
\newcommand{\popoSIG}[1]{\einf{\normaltset,~\sqsubseteq}{#1}}
\newcommand{\poposig}{\popoSIG{F}}
%\newcommand{\poss}{polymorphically order-sorted signature\xspace}
%\newcommand{\posa}{polymorphically order-sorted algebra\xspace}
\newcommand{\polyosalg}{\textrm{\rm \textbf{PolyOSAlg}$_{\SigO}$}}
\newcommand{\polyalg}{\textrm{\rm \textbf{PolyAlg}$_{\SigM}$}}
\newcommand{\SigO}{\textrm{$\Sigma_{\textit{os}}$}\xspace}
\newcommand{\FuO}{\textrm{$F$}\xspace}
\newcommand{\SigM}{\textrm{$\Sigma_{\textit{ms}}$}\xspace}
\newcommand{\FuM}{\textrm{$F$}\xspace}
\newcommand{\Sig}{\textrm{$\Sigma$}\xspace}
\newcommand{\SigE}{\textrm{$\Sigma_{\textit{ext}}$}\xspace}
\newcommand{\objprogram}{\textrm{$<\Sig, \, E>$}\xspace}
%
% Algebren
%
\let\oldsqsubseteq=\sqsubseteq
\renewcommand{\sqsubseteq}{\leq}
\def\alg#1#2{\textrm{{\rm (}$#1;#2${\rm )}}\xspace}
\def\algm#1#2{(#1;#2)}
\def\algME#1{\alg{#1}{\alpha}}
\def\algABB#1{\alg{A}{#1}}
\def\algebra{\alg{A}{\alpha}}
\def\termalg{\mbox{$\algm{T_{\text{\rm posig}}}{\iota}$}}
\def\termalgm#1{\algm{T_{\text{#1}}}{\iota_{\text{#1}}}}
\def\OStermsetvar#1{\textrm{$T_{\SigO}#1$}\xspace}
\def\OStermset{\OStermsetvar{(V)}}
\def\OStset{\OStermsetvar{}\xspace}
\def\OStermsettypevar#1#2{\textrm{$T^{#1}_{\SigO}#2$}\xspace}
\def\OStermsettype#1{\OStermsettypevar{#1}{(V)}}
\def\ops{\exp{Ops}{A}}
\def\exp#1#2{#1(\,#2\,)\xspace}
%\def\exptt#1#2{\exp{\text{\tt #1}}{\text{\tt #2}}}
\def\exptt#1#2{\exp{\mbox{$\mathtt{#1}$}}{\mbox{$\mathtt{#2}$}}}
\def\expsyn#1#2{\exp{\syn{#1}}{\syn{#2}}}
\def\expbf#1#2{\exp{\text{\bf #1}}{#2}}
\def\expsf#1#2{\exp{\text{\sf #1}}{#2}}
\def\exptype#1#2{#1\textrm{{\tt <}}#2\textrm{{\tt >}}\xspace}
\def\exptypett#1#2{\mathtt{#1}\textrm{{\tt <}}\mathtt{#2}\textrm{{\tt >}}\xspace}
\def\smalltt#1{\texttt{\small #1}}
\def\term{\textrm{$\exp{f}{t_1, \ \ldots \ ,t_n}$}\xspace}
\def\hverbandm#1#2{\textrm{$(#1,~#2)$}}
\def\partord#1#2{\hverbandm{#1}{#2}\xspace}
\def\eval#1{eval_{\left<#1\right>}\xspace}
\def\evalA{$\eval{\algm{A}{\alpha}}$\xspace}
\def\la#1#2{\mbox{$\lambda#1.#2$}\xspace}
\def\set#1{\{\, #1 \,\}}
\newcommand{\inletters}[1]{
\ifx\the
first
\fi}
%\newcommand{\olsub}{\textrm{$\, \ol{\sqsubseteq} \,$}\xspace}
\newcommand{\olsub}{\textrm{$\, \leq^\ast \,$}\xspace}
\newcommand{\olsubprime}{\textrm{$\, \ol{\sqsubseteq}' \,$}\xspace}
\newcommand{\nolsub}{\textrm{$\, \not\sqsubseteq^* \,$}\xspace}
\newcommand{\hverband}{\partord{S}{\sqsubseteq}\xspace}
\newcommand{\qverband}{\partord{\exp{\ol{T}_{\Theta}}{V}}{\olsub}}
\newcommand{\cloqverband}{\partord{\exp{T_{\Theta}}{V}}{\olsub}}
\newcommand{\hord}{\mbox{$(S,~\sqsubseteq)$}\xspace}
\def\einschr#1{|_{#1}}
%\newcommand{\lsem}{[\hspace*{-0.3ex}[}
%\newcommand{\rsem}{]\hspace*{-0.3ex}]}
\newcommand{\lsem}{\llbracket\hspace{.5ex}}
\newcommand{\rsem}{\hspace{.5ex}\rrbracket}
\newcommand{\lsemm}{\lsem}
\newcommand{\rsemm}{\rsem}
\newcommand{\semantic}[1]{\lsem #1 \rsem\xspace}
\newcommand{\ol}[1]{\overline{#1}}
\newcommand{\ul}[1]{\underline{#1}}
\newcommand{\dps}{\displaystyle}
\newcommand{\sema}[3]{{\cal #1}_{#2}\semantic{#3}}
\newcommand{\sem}[2]{\sema{#1}{}{#2}\xspace}
%
% Programming languages
%
\newcommand{\haskell}{\textsf{Haskell}\xspace}
\newcommand{\gofer}{\textsf{Gofer}\xspace}
\newcommand{\objp}{\mbox{\textsf{OBJ--P}}\xspace}
\newcommand{\java}{\mbox{\textsf{G--JAVA}}\xspace}
\newcommand{\oldjava}{\mbox{\textsf{JAVA}}\xspace}
\newcommand{\javafive}{\mbox{\textsf{JAVA 5.0}}\xspace}
\newcommand{\eclipse}{\mbox{\textsf{eclipse}}\xspace}
\newcommand{\pizza}{\mbox{\textsf{PIZZA}}\xspace}
\newcommand{\gj}{\mbox{\textsf{GJ}}\xspace}
\newcommand{\sml}{\mbox{\textsf{SML}}\xspace}
\newcommand{\ocaml}{\textsf{OCAML}}
\newcommand{\obj}{\mbox{\textsf{OBJ--3}}\xspace}
\newcommand{\objtwo}{\mbox{\textsf{OBJ--2}}\xspace}
\def\pot#1{{\cal P}(\, #1 \,)\xspace}
\def\partf{\overset{\text{\tiny part}}{\longrightarrow}\xspace}
%
% Deduktionssystem
%
\newcommand{\byrule}[1]{\raisebox{1.5ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\byruleok}[1]{\raisebox{1.5ex}[0ex][0ex]{{{\rm \small #1}}}}
\newcommand{\byrulewb}[1]{\raisebox{2.5ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\byruleokwb}[1]{\raisebox{2.5ex}[0ex][0ex]{{{\rm \small #1}}}}
\newcommand{\byrulesli}[1]{\raisebox{3.0ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\inter}[1]{\bigwedge \hspace{-.55em} \bigwedge_{#1}}
%
% ARRAY WITH ARGUMENTS
%
\newcommand{\sarray}[2]{\begin{array}[t]{#1} #2 \end{array}}
\newcommand{\sarrayt}[2]{\begin{array}[t]{#1} #2 \end{array}}
\newcommand{\sarrayb}[2]{\begin{array}[b]{#1} #2 \end{array}}
\newcommand{\sarrayo}[2]{\begin{array}{#1} #2 \end{array}}
%
% INFERENCE RULES
%
\newcommand{\byrulenew}[1]{\raisebox{2.1ex}[0ex][0ex]{{{\rm [{\bf \small #1}]}}}}
\newcommand{\postcond}[1]{\raisebox{2.1ex}[0ex][0ex]{#1}}
\newcommand{\lef}[1]{\multicolumn{1}{@{}l}{#1}}
\newcommand{\ri}[1]{\multicolumn{1}{r@{}}{#1}}
\newcommand{\ce}[1]{\multicolumn{1}{@{}c}{#1}}
\newcommand{\axiom}[2]{\textrm{[}\textbf{\small #1}\textrm{]} & \lef{#2}}
\newcommand{\irule}[4]{& \sarray{c}{#2}\vspace{1ex}\\\cline{2-2}
\vspace{-2ex}\\ \byrulenew{#1} & \sarray{c}{#3} & \postcond{$#4$}}
\newcommand{\irulealign}[6]{& \sarray{#2}{#3}\vspace{1ex}\\\cline{2-2}
\vspace{-2ex}\\ \byrulenew{#1} & \sarray{#4}{#5} & \postcond{$#6$}}
\newenvironment{irules}{$\begin{array}{lcl}}{\end{array}$}
%
% Kategorien
%
\newcommand{\funs}[1]{\mbox{$F^S_{ERR}$(\, #1 \,)}\xspace}
\newcommand{\funa}[1]{\mbox{$F^A_{ERR}$(\, #1 \,)}\xspace}
\newcommand{\funh}[1]{\mbox{$F^H_{ERR}(\, #1 \,)$}\xspace}
%
% Typherleitungen
%
%\let\oldrhd=\rhd
%\newcommand{\rder}{\hspace*{0.5ex} \rhd_{\textrm{\tiny $\Sig$}} \hspace{0.5ex}}
\newcommand{\rder}{\hspace*{0.5ex} \rhd \hspace{0.5ex}}
%\newcommand{\lder}{\hspace*{0.5ex} \lhd_{\textrm{\tiny $\Sig$}} \hspace*{0.5ex}}
\newcommand{\lder}{\hspace*{0.5ex} \lhd \hspace*{0.5ex}}
\newcommand{\rderStmt}{\hspace*{0.5ex} \rhd_{Stmt} \hspace*{0.5ex}}
\newcommand{\rderExpr}{\hspace*{0.5ex} \rhd_{Expr} \hspace*{0.5ex}}
\newcommand{\rderIdent}{\hspace*{0.5ex} \rhd_{Id} \hspace*{0.5ex}}
\let\oldblacktriangleright=\blacktriangleright
%\newcommand{\fder}{\hspace*{1ex} \textrm{$\blacktriangleright_{\textsl{\tiny \hspace{-1ex}\Sig}}$}}
\newcommand{\fder}{\hspace*{1ex} \textrm{$\blacktriangleright$}}
\newcommand{\newtheo}[3]{\newtheorem{#1}[defhalbordnung]{#2}
\begin{#1} {\rm #3} \label{#1} \end{#1}}
\newcommand{\der}[2]{\mbox{$#1 \rhd\ #2$}\xspace}
\newcommand{\derl}[2]{#1 \lhd_{\textrm{\tiny $\Sig$}} #2\xspace}
\newcommand{\derr}[2]{#1 \rhd_{\textrm{\tiny \hspace{-1ex}$\Sig$}} #2\xspace}
\newcommand{\derf}[3]{( \, #1, \, #2 \, ) \fder #3\xspace}
\newcommand{\deri}[1]{\der{A}{K}{#1}\xspace}
\newcommand{\derif}[1]{\derf{A}{K}{D}{#1}\xspace}
\newcommand{\arity}[3]{\textrm{$\alpha^{(#1,#2)}_{#3}$}\xspace}
\newcommand{\coarity}[2]{\textrm{$\beta^{(#1,#2)}$}\xspace}
\newcommand{\sodaprg}{\textrm{$(\,\textsl{csig},\ D\,)$\xspace}}
%
% Typen
%
\newcommand{\typ}[3]{\textrm{$ #1 \times \ldots \times #2 \rightarrow #3$}\xspace}
\newcommand{\syn}[1]{{\rm \texttt{\small #1}}}
\newcommand{\sigmatyp}{\typ{\sigma_1}{\sigma_n}{\sigma}\xspace}
\newcommand{\sigmadef}{\mbox{$\sigma_1 \times \ldots \times \sigma_n$}\xspace}
\newcommand{\tautyp}{\typ{\tau_1}{\tau_n}{\tau}\xspace}
\newcommand{\tautypsup}[1]{\typ{\tau^{#1}_1}{\tau^{#1}_n}{\tau^{#1}}\xspace}
\newcommand{\taudef}{\mbox{$\tau_1 \times \ldots \times \tau_n$}\xspace}
\newcommand{\thetatyp}{\typ{\theta_1}{\theta_n}{\theta_0}\xspace}
\newcommand{\type}{\text{$\text{TYPE}(\,S,\ V\,)$}\xspace}
\newcommand{\typea}{\text{$\text{TYPE}_T(\,S,\ V\,)$}\xspace}
\newcommand{\ptype}{{\rm \expsf{Type}{\normalbtermset}}\xspace}
\newcommand{\ptypea}{\text{$\text{TYPE}_T(\,\Theta,\ V\,)$}\xspace}
\newcommand{\types}{\text{$\text{TYPE}_s(\,S,\ \Gamma\,)$}\xspace}
\newcommand{\epsbox}[2]{
%\begin{center}
\setlength{\fboxsep}{4mm}
\fbox{\epsfxsize=#1 \epsfbox{#2}}
%\end{center}
}
\newcommand{\epsxybox}[3]{
\begin{minipage}[t]{#1}
\setlength{\fboxsep}{4mm}
\fbox{\epsfysize=#2 \epsfbox{#3}}
\end{minipage}}
\newenvironment{program}{\begin{alltt}\small}
{\normalsize\end{alltt}\vspace*{-1em}}
\floatstyle{plain}
\newfloat{soda}{htp}{lop}
\floatname{soda}{SODA-Program}
%\sodaprog
% 1. width
% 2. figure
% 3. file
\newcommand{\sodaprog}[3]{
\begin{figure}%[#2]
%\begin{center}
\begin{Sbox}
\begin{minipage}{#1}
\small
\begin{alltt}
\verbatiminput{#3.soda}
\end{alltt}
\normalsize
\end{minipage}
\end{Sbox}
\setlength{\fboxsep}{2mm}
\fbox{\TheSbox}
%\end{center}
\caption{SODA module \texttt{#3}}
\label{fig:#3}
\end{figure}
}
%
% Theorem
%
\newcommand{\QED}{\rule{1.1ex}{1.1ex}}
%\newenvironment{proof}{\par \bigskip \noindent {\bf Proof:}
% }{\mbox{ } \hfill \QED \par \smallskip}
%\newenvironment{remark}{\par \bigskip \noindent {\bf Remark}
% }{\par \smallskip}
%\newtheorem{definition}{Definition}[section]
%\newtheorem{example}[definition]{Example}
%\newtheorem{theorem}[definition]{Theorem}
%\newtheorem{corollary}[definition]{Corollary}
%\newtheorem{lemma}[definition]{Lemma}
%\newtheorem{algorithm}[definition]{Algorithm}
%\newenvironment{abstract}{\small \begin{center} {\bf Abstract}\\[2ex]
%\begin{minipage}{0.85\textwidth}}{\end{minipage} \end{center}}
\newenvironment{Zusammenfassung}{\small \begin{center} {\bf Zusammenfassung}\\[2ex]
\begin{minipage}{0.85\textwidth}}{\end{minipage} \end{center}}
\newlength{\level}
\newlength{\wid}
%\newcommand{\thelb}{
\def\notunlhd{\mathrel{\unlhd\!\!\!\!\!\mid}}
\def\In#1#2{#1 \! \in \! #2}
\def\Leq#1#2#3{#1 \! \leqslant \! #2 \! \leqslant \! #3}
\def\Lequ#1#2#3{#1 \leqslant #2 \leqslant #3}
\newcommand{\ma}[1]{\text{``}#1\text{''}\xspace}
\newcommand{\ttm}[1]{\mbox{\tt #1}\xspace}
\newcommand{\ret}[2]{\ttm{r}^{\ttm{\footnotesize #1}}_{\ttm{\footnotesize #2}}\xspace}
\newcommand{\retm}[2]{\ttm{r}^{#1}_{#2}\xspace}
\newcommand{\re}[2]{\displaystyle r^{#1}_{#2}\xspace}
\newlength{\qwert}
%\newcommand{\htext}[1]{\settowidth{\qwert}{#1} \addtolength{\qwert}{-0.65ex} \hspace*{\qwert}}
\newcommand{\htext}[1]{\settowidth{\qwert}{#1} \hspace*{\qwert}}
\newcommand{\leng}[1]{\settowidth{\qwert}{#1} \qwert}
\newcommand{\ldo}{, \ldots , }
%
% Algorithmus
%
\newcommand{\nll}{\newline\hspace*{\level}}
\newcommand{\nlevel}{\addtolength{\level}{0.4cm}}
\newcommand{\llevel}{\addtolength{\level}{-0.4cm}}
\newcommand{\ifc}[1]{\textbf{if} \nlevel #1 \llevel}
\newcommand{\elsifc}[1]{\textbf{elsif} \nlevel #1 \llevel}
\newcommand{\foreachc}[2]{\textbf{foreach} #1 \nlevel #2 \llevel}
\newcommand{\thenc}[1]{\textbf{then} \nlevel #1 \llevel}
\newcommand{\ifthenc}[2]{\textbf{if} #1 \textbf{then} \nlevel #2 \llevel}
\newcommand{\elsec}[1]{\textbf{else} \nlevel #1 \llevel}
\newcommand{\eifc}{\textbf{endif}\\}
\newcommand{\casec}[2]{\fbox{\textbf{case} #1}\ \nlevel \nlevel #2 \llevel \llevel}
\newcommand{\letc}[2]{\textbf{let} \nlevel \\ #1 = \nlevel #2 \llevel \llevel}
\newcommand{\letbf}[1]{\textbf{let} \nlevel \\ #1 \llevel}
\newcommand{\inc}[1]{\textbf{in} \nlevel #1 \llevel \nopagebreak\\ \textbf{end}}
\newcommand{\lam}[2]{\textbf{fn } #1 \textrm{$\, \Rightarrow \,$} #2}
\newcommand{\inputc}[1]{\nll \textbf{Input:} \nlevel #1 \llevel}
\newcommand{\outputc}[1]{\nll \textbf{Output:} \nlevel #1 \llevel}
%\newcommand{\letforeachc}[3]{\textbf{let-foreach} \nlevel #1:\\ \ul{#2} = \nlevel #3 \llevel \llevel}
\newcommand{\letforeachc}[3]{\textbf{let-foreach} \nlevel #1:\\ #2 = \nlevel #3 \llevel \llevel}
%\newcommand{\letuc}[2]{\textbf{let} \nlevel \\ \ul{#1} = \nlevel #2 \llevel \llevel}
\newcommand{\letuc}[2]{\textbf{let} \nlevel \\ #1 = \nlevel #2 \llevel \llevel}
\newcommand{\letoeq}[3]{\textbf{let} \nlevel \\ #1 #2 \nlevel #3 \llevel \llevel}
\newcommand{\letoeqol}[3]{\nlevel \\ #1 #2 \nlevel #3 \llevel \llevel}
%\newcommand{\letu}[2]{\nlevel\\ \ul{#1} = \nlevel #2 \llevel\llevel}
\newcommand{\letu}[2]{\nlevel\\ #1 = \nlevel #2 \llevel\llevel}
\newcommand{\letnc}[2]{\nlevel\\ #1 = \nlevel #2 \llevel\llevel}
\newcommand{\misc}[1]{\nlevel\\ #1 \llevel}
\newcommand{\least}{\textrm{$\top$}\xspace}
\newenvironment{algocommands}{
\setlength{\level}{2mm}
\renewcommand{\\}{\nll}
\noindent
}{\renewcommand{\\}{\newline}
\vspace{1ex}
}
\newenvironment{algo}{\begin{algorithm} \rm %\mbox{}\\
\begin{algocommands}
}{\end{algocommands}
\end{algorithm}
}
\newenvironment{boxedalgo}{
\begin{Sbox}
\begin{minipage}{\textwid}
\begin{algo}
}{\end{algo}
\end{minipage}
\end{Sbox}
\fbox{\TheSbox}
}
\newenvironment{Liste}{\begin{list}{\textbf{--}}{
\setlength{\parsep}{0pt plus0.0ex}
\setlength{\labelwidth}{2ex}
\setlength{\itemsep}{0pt}
\setlength{\leftmargin}{\labelsep +\labelwidth}
}}{\normalsize \end{list}}
\newcounter{ficall}
\setcounter{ficall}{0}
\newcommand{\ficall}[1]{\addtocounter{ficall}{1}\subsubsection*{(\theficall) \
#1}
\setcounter{secall}{0}
\setcounter{thicall}{0}
\setcounter{focall}{0}
\setcounter{fifcall}{0}
\setcounter{sixcall}{0}
\setcounter{sevcall}{0}
\setcounter{eigcall}{0}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcommand{\reficall}[1]{\subsubsection*{(\theficall) \
#1}}
\newcounter{fifinum}
\newcommand{\finumset}{\setcounter{fifinum}{\value{ficall}}}
\newcommand{\finum}{\thefifinum}
\newcounter{fifinumold}
\newcommand{\finumoldset}{
\setcounter{fifinumold}{\value{fifinum}}
}
\newcommand{\finumold}{\thesefinumold}
\newcounter{secall}
\setcounter{secall}{0}
\newcounter{sefinum}\newcounter{sesenum}
\newcommand{\senumset}{\setcounter{sefinum}{\value{ficall}}\setcounter{sesenum}{\value{secall}}}
\newcommand{\secall}[1]{\addtocounter{secall}{1}\subsubsection*{(\theficall.\thesecall) \ #1}
\setcounter{thicall}{0}
\setcounter{focall}{0}
\setcounter{fifcall}{0}
\setcounter{sixcall}{0}
\setcounter{sevcall}{0}
\setcounter{eigcall}{0}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcommand{\resecall}[1]{\subsubsection*{(\theficall.\thesecall) \ #1}}
\newcommand{\senum}{\thesefinum.\thesesenum}
\newcounter{sefinumold}
\newcounter{sesenumold}
\newcommand{\senumoldset}{
\setcounter{sefinumold}{\value{sefinum}}
\setcounter{sesenumold}{\value{sesenum}}
}
\newcommand{\senumold}{\thesefinumold.\thesesenumold}
\newcounter{thicall}
\setcounter{thicall}{0}
\newcounter{thifinum}\newcounter{thisenum}\newcounter{thithinum}
\newcommand{\thinumset}{\setcounter{thifinum}{\value{ficall}}\setcounter{thisenum}{\value{secall}}\setcounter{thithinum}{\value{thicall}}}
\newcommand{\thicall}[1]{\addtocounter{thicall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall) \ #1}
\setcounter{focall}{0}
\setcounter{fifcall}{0}
\setcounter{sixcall}{0}
\setcounter{sevcall}{0}
\setcounter{eigcall}{0}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcommand{\rethicall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall) \ #1}}
\newcommand{\thinum}{\thethifinum.\thethisenum.\thethithinum}
\newcounter{focall}
\setcounter{focall}{0}
\newcounter{fofinum}\newcounter{fosenum}\newcounter{fothinum}\newcounter{fofonum}
\newcommand{\focall}[1]{\addtocounter{focall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall) \ #1}
\setcounter{fifcall}{0}
\setcounter{sixcall}{0}
\setcounter{sevcall}{0}
\setcounter{eigcall}{0}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcommand{\fonumset}{\setcounter{fofinum}{\value{ficall}}\setcounter{fosenum}{\value{secall}}\setcounter{fothinum}{\value{thicall}}\setcounter{fofonum}{\value{focall}}}
\newcommand{\fonum}{\thefofinum.\thefosenum.\thefothinum.\thefofonum}
\newcommand{\refocall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall) \ #1}}
\newcounter{fifcall}
\setcounter{fifcall}{0}
\newcommand{\fifcall}[1]{\addtocounter{fifcall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall) \ #1}
\setcounter{sixcall}{0}
\setcounter{sevcall}{0}
\setcounter{eigcall}{0}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcounter{fiffinum}\newcounter{fifsenum}\newcounter{fifthinum}\newcounter{fiffonum}\newcounter{fiffifnum}
\newcommand{\fifnumset}{\setcounter{fiffinum}{\value{ficall}}\setcounter{fifsenum}{\value{secall}}\setcounter{fifthinum}{\value{thicall}}\setcounter{fiffonum}{\value{focall}}\setcounter{fiffifnum}{\value{fifcall}}}
\newcommand{\fifnum}{\thefiffinum.\thefifsenum.\thefifthinum.\thefiffonum.\thefiffifnum}
\newcommand{\refifcall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall) \ #1}}
\newcounter{fiffinumold}
\newcounter{fifsenumold}
\newcounter{fifthinumold}
\newcounter{fiffonumold}
\newcounter{fiffifnumold}
\newcommand{\fifnumoldset}{
\setcounter{fiffinumold}{\value{fiffinum}}
\setcounter{fifsenumold}{\value{fifsenum}}
\setcounter{fifthinumold}{\value{fifthinum}}
\setcounter{fiffonumold}{\value{fiffonum}}
\setcounter{fiffifnumold}{\value{fiffifnum}}
}
\newcommand{\fifnumold}{\thefiffinumold.\thefifsenumold.\thefifthinumold.\thefiffonumold.\thefiffifnumold}
\newcounter{fiffinumoldold}
\newcounter{fifsenumoldold}
\newcounter{fifthinumoldold}
\newcounter{fiffonumoldold}
\newcounter{fiffifnumoldold}
\newcommand{\fifnumoldoldset}{
\setcounter{fiffinumoldold}{\value{fiffinum}}
\setcounter{fifsenumoldold}{\value{fifsenum}}
\setcounter{fifthinumoldold}{\value{fifthinum}}
\setcounter{fiffonumoldold}{\value{fiffonum}}
\setcounter{fiffifnumoldold}{\value{fiffifnum}}
}
\newcommand{\fifnumoldold}{\thefiffinumoldold.\thefifsenumoldold.\thefifthinumoldold.\thefiffonumoldold.\thefiffifnumoldold}
\newcounter{sixcall}
\setcounter{sixcall}{0}
\newcommand{\sixcall}[1]{\addtocounter{sixcall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall) \ #1}
\setcounter{sevcall}{0}
\setcounter{eigcall}{0}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcounter{sixfinum}
\newcounter{sixsenum}
\newcounter{sixthinum}
\newcounter{sixfonum}
\newcounter{sixfifnum}
\newcounter{sixsixnum}
\newcommand{\sixnumset}{
\setcounter{sixfinum}{\value{ficall}}
\setcounter{sixsenum}{\value{secall}}
\setcounter{sixthinum}{\value{thicall}}
\setcounter{sixfonum}{\value{focall}}
\setcounter{sixfifnum}{\value{fifcall}}
\setcounter{sixsixnum}{\value{sixcall}}
}
\newcommand{\sixnum}{\thesixfinum.\thesixsenum.\thesixthinum.\thesixfonum.\thesixfifnum.\thesixsixnum}
\newcommand{\resixcall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall) \ #1}}
\newcounter{sevcall}
\setcounter{sevcall}{0}
\newcommand{\sevcall}[1]{\addtocounter{sevcall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall) \ #1}
\setcounter{eigcall}{0}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcounter{sevfinum}
\newcounter{sevsenum}
\newcounter{sevthinum}
\newcounter{sevfonum}
\newcounter{sevfifnum}
\newcounter{sevsixnum}
\newcounter{sevsevnum}
\newcommand{\sevnumset}{
\setcounter{sevfinum}{\value{ficall}}
\setcounter{sevsenum}{\value{secall}}
\setcounter{sevthinum}{\value{thicall}}
\setcounter{sevfonum}{\value{focall}}
\setcounter{sevfifnum}{\value{fifcall}}
\setcounter{sevsixnum}{\value{sixcall}}
\setcounter{sevsevnum}{\value{sevcall}}
}
\newcommand{\sevnum}{\thesevfinum.\thesevsenum.\thesevthinum.\thesevfonum.\thesevfifnum.\thesevsixnum.\thesevsevnum}
\newcommand{\resevcall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall) \ #1}}
\newcounter{eigcall}
\newcounter{eigfinum}\newcounter{eigsenum}\newcounter{eigthinum}\newcounter{eigfonum}\newcounter{eigfifnum}\newcounter{eigsixnum}\newcounter{eigsevnum}\newcounter{eigeignum}
\setcounter{eigcall}{0}
\newcommand{\eignumset}{\setcounter{eigfinum}{\value{ficall}}\setcounter{eigsenum}{\value{secall}}\setcounter{eigthinum}{\value{thicall}}\setcounter{eigfonum}{\value{focall}}\setcounter{eigfifnum}{\value{fifcall}}\setcounter{eigsixnum}{\value{sixcall}}\setcounter{eigsevnum}{\value{sevcall}}\setcounter{eigeignum}{\value{eigcall}}}
\newcommand{\eignum}{\theeigfinum.\theeigsenum.\theeigthinum.\theeigfonum.\theeigfifnum.\theeigsixnum.\theeigsevnum.\theeigeignum}
\newcommand{\eigcall}[1]{\addtocounter{eigcall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall.\theeigcall) \ #1}
\setcounter{nicall}{0}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcommand{\reeigcall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall.\theeigcall) \ #1}}
\newcounter{nicall}
\newcounter{nifinum}\newcounter{nisenum}\newcounter{nithinum}\newcounter{nifonum}\newcounter{nififnum}\newcounter{nisixnum}\newcounter{nisevnum}\newcounter{nieignum}\newcounter{nininum}
\setcounter{nicall}{0}
\newcommand{\ninumset}{\setcounter{nifinum}{\value{ficall}}\setcounter{nisenum}{\value{secall}}\setcounter{nithinum}{\value{thicall}}\setcounter{nifonum}{\value{focall}}\setcounter{nififnum}{\value{fifcall}}\setcounter{nisixnum}{\value{sixcall}}\setcounter{nisevnum}{\value{sevcall}}\setcounter{nieignum}{\value{eigcall}}\setcounter{nininum}{\value{nicall}}}
\newcommand{\ninum}{\thenifinum.\thenisenum.\thenithinum.\thenifonum.\thenififnum.\thenisixnum.\thenisevnum.\thenieignum.\thenininum}
\newcommand{\nicall}[1]{\addtocounter{nicall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall.\theeigcall.\thenicall)
\ #1}
\setcounter{tencall}{0}
\setcounter{elecall}{0}
}
\newcommand{\renicall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall.\theeigcall.\thenicall)
\ #1}}
\newcounter{nifinumold}
\newcounter{nisenumold}
\newcounter{nithinumold}
\newcounter{nifonumold}
\newcounter{nififnumold}
\newcounter{nisixnumold}
\newcounter{nisevnumold}
\newcounter{nieignumold}
\newcounter{nininumold}
\newcommand{\ninumoldset}{
\setcounter{nifinumold}{\value{nifinum}}
\setcounter{nisenumold}{\value{nisenum}}
\setcounter{nithinumold}{\value{nithinum}}
\setcounter{nifonumold}{\value{nifonum}}
\setcounter{nififnumold}{\value{nififnum}}
\setcounter{nisixnumold}{\value{nisixnum}}
\setcounter{nisevnumold}{\value{nisevnum}}
\setcounter{nieignumold}{\value{nieignum}}
\setcounter{nininumold}{\value{nininum}}
}
\newcommand{\ninumold}{\thenifinumold.\thenisenumold.\thenithinumold.\thenifonumold.\thenififnumold.\thenisixnumold.\thenisevnumold.\thenieignumold.\thenininumold}
\newcounter{tencall}
\setcounter{tencall}{0}
\newcommand{\tencall}[1]{\addtocounter{tencall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall.\theeigcall.\thenicall.\thetencall)
\ #1}
\setcounter{elecall}{0}
}
\newcommand{\retencall}[1]{\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall.\theeigcall.\thenicall.\thetencall)
\ #1}}
\newcounter{tenfinum}
\newcounter{tensenum}
\newcounter{tenthinum}
\newcounter{tenfonum}
\newcounter{tenfifnum}
\newcounter{tensixnum}
\newcounter{tensevnum}
\newcounter{teneignum}
\newcounter{tenninum}
\newcounter{tentennum}
\newcommand{\tennumset}{
\setcounter{tenfinum}{\value{ficall}}
\setcounter{tensenum}{\value{secall}}
\setcounter{tenthinum}{\value{thicall}}
\setcounter{tenfonum}{\value{focall}}
\setcounter{tenfifnum}{\value{fifcall}}
\setcounter{tensixnum}{\value{sixcall}}
\setcounter{tensevnum}{\value{sevcall}}
\setcounter{teneignum}{\value{eigcall}}
\setcounter{tenninum}{\value{nicall}}
\setcounter{tentennum}{\value{tencall}}}
\newcommand{\tennum}{\thetenfinum.\thetensenum.\thetenthinum.\thetenfonum.\thetenfifnum.\thetensixnum.\thetensevnum.\theteneignum.\thetenninum.\thetentennum}
\newcounter{elecall}
\setcounter{elecall}{0}
\newcommand{\elecall}[1]{\addtocounter{elecall}{1}\subsubsection*{(\theficall.\thesecall.\thethicall.\thefocall.\thefifcall.\thesixcall.\thesevcall.\theeigcall.\thenicall.\thetencall.\theelecall) \ #1}}
\newcounter{elefinum}
\newcounter{elesenum}
\newcounter{elethinum}
\newcounter{elefonum}
\newcounter{elefifnum}
\newcounter{elesixnum}
\newcounter{elesevnum}
\newcounter{eleeignum}
\newcounter{eleninum}
\newcounter{eletennum}
\newcounter{eleelenum}
\newcommand{\elenumset}{
\setcounter{elefinum}{\value{ficall}}
\setcounter{elesenum}{\value{secall}}
\setcounter{elethinum}{\value{thicall}}
\setcounter{elefonum}{\value{focall}}
\setcounter{elefifnum}{\value{fifcall}}
\setcounter{elesixnum}{\value{sixcall}}
\setcounter{elesevnum}{\value{sevcall}}
\setcounter{eleeignum}{\value{eigcall}}
\setcounter{eleninum}{\value{nicall}}
\setcounter{eletennum}{\value{tencall}}
\setcounter{eleelenum}{\value{elecall}}
}
\newcommand{\elenum}{\theelefinum.\theelesenum.\theelethinum.\theelefonum.\theelefifnum.\theelesixnum.\theelesevnum.\theeleeignum.\theeleninum.\theeletennum.\theeleelenum}
+2
View File
@@ -0,0 +1,2 @@
Nächste Aufgaben:
+1028
View File
File diff suppressed because it is too large Load Diff
+201
View File
@@ -0,0 +1,201 @@
THROW=44
STATIC=38
INTERFACE=28
AND_ASSIGN=93
BREAK=4
BYTE=5
ELSE=15
IF=22
ENUM=16
SUB=82
BANG=69
LPAREN=57
DOT=65
CASE=6
AT=101
LINE_COMMENT=105
StringLiteral=55
ELLIPSIS=102
LBRACK=61
PUBLIC=35
THROWS=45
NullLiteral=56
RSHIFT_ASSIGN=98
LBRACE=59
GOTO=23
SUB_ASSIGN=90
SEMI=63
CHAR=8
ASSIGN=66
COMMENT=104
IMPORT=25
BITOR=86
CATCH=7
MUL_ASSIGN=91
DOUBLE=14
PROTECTED=34
LONG=29
COMMA=64
BITAND=85
PRIVATE=33
CONTINUE=11
DIV=84
FloatingPointLiteral=52
LE=74
CharacterLiteral=54
VOLATILE=49
EXTENDS=17
INSTANCEOF=26
NEW=31
ADD=81
LT=68
CLASS=9
DO=13
FINALLY=19
Identifier=100
CONST=10
PACKAGE=32
OR_ASSIGN=94
TRY=47
IntegerLiteral=51
SYNCHRONIZED=42
MUL=83
FOR=21
FINAL=18
RPAREN=58
CARET=87
URSHIFT_ASSIGN=99
BOOLEAN=3
NOTEQUAL=76
RBRACK=62
RBRACE=60
AND=77
THIS=43
SWITCH=41
VOID=48
TRANSIENT=46
INC=79
FLOAT=20
NATIVE=30
DIV_ASSIGN=92
BooleanLiteral=53
ABSTRACT=1
STRICTFP=39
INT=27
QUESTION=71
RETURN=36
LSHIFT_ASSIGN=97
ADD_ASSIGN=89
WS=103
GE=75
SUPER=40
OR=78
DEC=80
MOD=88
XOR_ASSIGN=95
ASSERT=2
EQUAL=73
IMPLEMENTS=24
COLON=72
GT=67
SHORT=37
MOD_ASSIGN=96
WHILE=50
TILDE=70
DEFAULT=12
'import'=25
'-'=82
')'=58
'super'=40
'else'=15
'%'=88
'!'=69
'>'=67
'public'=35
'=='=73
'--'=80
'|'=86
'['=61
':'=72
'...'=102
'throw'=44
'case'=6
'.'=65
'this'=43
'*'=83
'switch'=41
'synchronized'=42
'&'=85
'double'=14
'break'=4
'short'=37
'<='=74
'enum'=16
'try'=47
'?'=71
'if'=22
'extends'=17
'goto'=23
'}'=60
'instanceof'=26
';'=63
'||'=78
'>>='=98
'class'=9
'return'=36
'&='=93
'catch'=7
'native'=30
'continue'=11
'strictfp'=39
'/'=84
'*='=91
'+'=81
'final'=18
'protected'=34
'static'=38
'@'=101
'transient'=46
'~'=70
'assert'=2
']'=62
'<'=68
'++'=79
'>>>='=99
'>='=75
'long'=29
'boolean'=3
'const'=10
'abstract'=1
'implements'=24
'volatile'=49
'throws'=45
'/='=92
','=64
'-='=90
'do'=13
'package'=32
'('=57
'null'=56
'int'=27
'|='=94
'for'=21
'^'=87
'<<='=97
'='=66
'byte'=5
'&&'=77
'^='=95
'void'=48
'while'=50
'{'=59
'float'=20
'!='=76
'new'=31
'char'=8
'finally'=19
'interface'=28
'%='=96
'private'=33
'+='=89
'default'=12
File diff suppressed because it is too large Load Diff
+515
View File
@@ -0,0 +1,515 @@
// Generated from Java8.g4 by ANTLR 4.4
import org.antlr.v4.runtime.Lexer;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenStream;
import org.antlr.v4.runtime.*;
import org.antlr.v4.runtime.atn.*;
import org.antlr.v4.runtime.dfa.DFA;
import org.antlr.v4.runtime.misc.*;
@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"})
public class Java8Lexer extends Lexer {
static { RuntimeMetaData.checkVersion("4.4", RuntimeMetaData.VERSION); }
protected static final DFA[] _decisionToDFA;
protected static final PredictionContextCache _sharedContextCache =
new PredictionContextCache();
public static final int
ABSTRACT=1, ASSERT=2, BOOLEAN=3, BREAK=4, BYTE=5, CASE=6, CATCH=7, CHAR=8,
CLASS=9, CONST=10, CONTINUE=11, DEFAULT=12, DO=13, DOUBLE=14, ELSE=15,
ENUM=16, EXTENDS=17, FINAL=18, FINALLY=19, FLOAT=20, FOR=21, IF=22, GOTO=23,
IMPLEMENTS=24, IMPORT=25, INSTANCEOF=26, INT=27, INTERFACE=28, LONG=29,
NATIVE=30, NEW=31, PACKAGE=32, PRIVATE=33, PROTECTED=34, PUBLIC=35, RETURN=36,
SHORT=37, STATIC=38, STRICTFP=39, SUPER=40, SWITCH=41, SYNCHRONIZED=42,
THIS=43, THROW=44, THROWS=45, TRANSIENT=46, TRY=47, VOID=48, VOLATILE=49,
WHILE=50, IntegerLiteral=51, FloatingPointLiteral=52, BooleanLiteral=53,
CharacterLiteral=54, StringLiteral=55, NullLiteral=56, LPAREN=57, RPAREN=58,
LBRACE=59, RBRACE=60, LBRACK=61, RBRACK=62, SEMI=63, COMMA=64, DOT=65,
ASSIGN=66, GT=67, LT=68, BANG=69, TILDE=70, QUESTION=71, COLON=72, EQUAL=73,
LE=74, GE=75, NOTEQUAL=76, AND=77, OR=78, INC=79, DEC=80, ADD=81, SUB=82,
MUL=83, DIV=84, BITAND=85, BITOR=86, CARET=87, MOD=88, ADD_ASSIGN=89,
SUB_ASSIGN=90, MUL_ASSIGN=91, DIV_ASSIGN=92, AND_ASSIGN=93, OR_ASSIGN=94,
XOR_ASSIGN=95, MOD_ASSIGN=96, LSHIFT_ASSIGN=97, RSHIFT_ASSIGN=98, URSHIFT_ASSIGN=99,
Identifier=100, AT=101, ELLIPSIS=102, WS=103, COMMENT=104, LINE_COMMENT=105;
public static String[] modeNames = {
"DEFAULT_MODE"
};
public static final String[] tokenNames = {
"'\\u0000'", "'\\u0001'", "'\\u0002'", "'\\u0003'", "'\\u0004'", "'\\u0005'",
"'\\u0006'", "'\\u0007'", "'\b'", "'\t'", "'\n'", "'\\u000B'", "'\f'",
"'\r'", "'\\u000E'", "'\\u000F'", "'\\u0010'", "'\\u0011'", "'\\u0012'",
"'\\u0013'", "'\\u0014'", "'\\u0015'", "'\\u0016'", "'\\u0017'", "'\\u0018'",
"'\\u0019'", "'\\u001A'", "'\\u001B'", "'\\u001C'", "'\\u001D'", "'\\u001E'",
"'\\u001F'", "' '", "'!'", "'\"'", "'#'", "'$'", "'%'", "'&'", "'''",
"'('", "')'", "'*'", "'+'", "','", "'-'", "'.'", "'/'", "'0'", "'1'",
"'2'", "'3'", "'4'", "'5'", "'6'", "'7'", "'8'", "'9'", "':'", "';'",
"'<'", "'='", "'>'", "'?'", "'@'", "'A'", "'B'", "'C'", "'D'", "'E'",
"'F'", "'G'", "'H'", "'I'", "'J'", "'K'", "'L'", "'M'", "'N'", "'O'",
"'P'", "'Q'", "'R'", "'S'", "'T'", "'U'", "'V'", "'W'", "'X'", "'Y'",
"'Z'", "'['", "'\\'", "']'", "'^'", "'_'", "'`'", "'a'", "'b'", "'c'",
"'d'", "'e'", "'f'", "'g'", "'h'", "'i'"
};
public static final String[] ruleNames = {
"ABSTRACT", "ASSERT", "BOOLEAN", "BREAK", "BYTE", "CASE", "CATCH", "CHAR",
"CLASS", "CONST", "CONTINUE", "DEFAULT", "DO", "DOUBLE", "ELSE", "ENUM",
"EXTENDS", "FINAL", "FINALLY", "FLOAT", "FOR", "IF", "GOTO", "IMPLEMENTS",
"IMPORT", "INSTANCEOF", "INT", "INTERFACE", "LONG", "NATIVE", "NEW", "PACKAGE",
"PRIVATE", "PROTECTED", "PUBLIC", "RETURN", "SHORT", "STATIC", "STRICTFP",
"SUPER", "SWITCH", "SYNCHRONIZED", "THIS", "THROW", "THROWS", "TRANSIENT",
"TRY", "VOID", "VOLATILE", "WHILE", "IntegerLiteral", "DecimalIntegerLiteral",
"HexIntegerLiteral", "OctalIntegerLiteral", "BinaryIntegerLiteral", "IntegerTypeSuffix",
"DecimalNumeral", "Digits", "Digit", "NonZeroDigit", "DigitOrUnderscore",
"Underscores", "HexNumeral", "HexDigits", "HexDigit", "HexDigitOrUnderscore",
"OctalNumeral", "OctalDigits", "OctalDigit", "OctalDigitOrUnderscore",
"BinaryNumeral", "BinaryDigits", "BinaryDigit", "BinaryDigitOrUnderscore",
"FloatingPointLiteral", "DecimalFloatingPointLiteral", "ExponentPart",
"ExponentIndicator", "SignedInteger", "Sign", "FloatTypeSuffix", "HexadecimalFloatingPointLiteral",
"HexSignificand", "BinaryExponent", "BinaryExponentIndicator", "BooleanLiteral",
"CharacterLiteral", "SingleCharacter", "StringLiteral", "StringCharacters",
"StringCharacter", "EscapeSequence", "OctalEscape", "UnicodeEscape", "ZeroToThree",
"NullLiteral", "LPAREN", "RPAREN", "LBRACE", "RBRACE", "LBRACK", "RBRACK",
"SEMI", "COMMA", "DOT", "ASSIGN", "GT", "LT", "BANG", "TILDE", "QUESTION",
"COLON", "EQUAL", "LE", "GE", "NOTEQUAL", "AND", "OR", "INC", "DEC", "ADD",
"SUB", "MUL", "DIV", "BITAND", "BITOR", "CARET", "MOD", "ADD_ASSIGN",
"SUB_ASSIGN", "MUL_ASSIGN", "DIV_ASSIGN", "AND_ASSIGN", "OR_ASSIGN", "XOR_ASSIGN",
"MOD_ASSIGN", "LSHIFT_ASSIGN", "RSHIFT_ASSIGN", "URSHIFT_ASSIGN", "Identifier",
"JavaLetter", "JavaLetterOrDigit", "AT", "ELLIPSIS", "WS", "COMMENT",
"LINE_COMMENT"
};
public Java8Lexer(CharStream input) {
super(input);
_interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache);
}
@Override
public String getGrammarFileName() { return "Java8.g4"; }
@Override
public String[] getTokenNames() { return tokenNames; }
@Override
public String[] getRuleNames() { return ruleNames; }
@Override
public String getSerializedATN() { return _serializedATN; }
@Override
public String[] getModeNames() { return modeNames; }
@Override
public ATN getATN() { return _ATN; }
@Override
public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 140: return JavaLetter_sempred((RuleContext)_localctx, predIndex);
case 141: return JavaLetterOrDigit_sempred((RuleContext)_localctx, predIndex);
}
return true;
}
private boolean JavaLetterOrDigit_sempred(RuleContext _localctx, int predIndex) {
switch (predIndex) {
case 2: return Character.isJavaIdentifierPart(_input.LA(-1));
case 3: return Character.isJavaIdentifierPart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)));
}
return true;
}
private boolean JavaLetter_sempred(RuleContext _localctx, int predIndex) {
switch (predIndex) {
case 0: return Character.isJavaIdentifierStart(_input.LA(-1));
case 1: return Character.isJavaIdentifierStart(Character.toCodePoint((char)_input.LA(-2), (char)_input.LA(-1)));
}
return true;
}
public static final String _serializedATN =
"\3\u0430\ud6d1\u8206\uad2d\u4417\uaef1\u8d80\uaadd\2k\u042e\b\1\4\2\t"+
"\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
"\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
"\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+
"\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+
"\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+
"`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+
"k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+
"w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+
"\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+
"\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+
"\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+
"\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092\t\u0092"+
"\4\u0093\t\u0093\4\u0094\t\u0094\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3"+
"\3\3\3\3\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\4\3\5\3\5\3\5"+
"\3\5\3\5\3\5\3\6\3\6\3\6\3\6\3\6\3\7\3\7\3\7\3\7\3\7\3\b\3\b\3\b\3\b\3"+
"\b\3\b\3\t\3\t\3\t\3\t\3\t\3\n\3\n\3\n\3\n\3\n\3\n\3\13\3\13\3\13\3\13"+
"\3\13\3\13\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\r\3\r"+
"\3\r\3\r\3\16\3\16\3\16\3\17\3\17\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3"+
"\20\3\20\3\20\3\21\3\21\3\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3"+
"\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\24\3\24\3\24\3\24\3\24\3\24\3"+
"\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\27\3\27\3"+
"\27\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3"+
"\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3"+
"\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3"+
"\35\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3"+
"\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3"+
"\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3#\3#\3#\3#\3$\3$\3$\3$\3$\3"+
"$\3$\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3&\3\'\3\'\3\'\3\'\3\'\3\'\3"+
"\'\3(\3(\3(\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3)\3)\3*\3*\3*\3*\3*\3*\3*\3"+
"+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3-\3-\3-\3-\3-\3"+
"-\3.\3.\3.\3.\3.\3.\3.\3/\3/\3/\3/\3/\3/\3/\3/\3/\3/\3\60\3\60\3\60\3"+
"\60\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3\62\3"+
"\62\3\63\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\5\64\u0281\n\64"+
"\3\65\3\65\5\65\u0285\n\65\3\66\3\66\5\66\u0289\n\66\3\67\3\67\5\67\u028d"+
"\n\67\38\38\58\u0291\n8\39\39\3:\3:\3:\5:\u0298\n:\3:\3:\3:\5:\u029d\n"+
":\5:\u029f\n:\3;\3;\7;\u02a3\n;\f;\16;\u02a6\13;\3;\5;\u02a9\n;\3<\3<"+
"\5<\u02ad\n<\3=\3=\3>\3>\5>\u02b3\n>\3?\6?\u02b6\n?\r?\16?\u02b7\3@\3"+
"@\3@\3@\3A\3A\7A\u02c0\nA\fA\16A\u02c3\13A\3A\5A\u02c6\nA\3B\3B\3C\3C"+
"\5C\u02cc\nC\3D\3D\5D\u02d0\nD\3D\3D\3E\3E\7E\u02d6\nE\fE\16E\u02d9\13"+
"E\3E\5E\u02dc\nE\3F\3F\3G\3G\5G\u02e2\nG\3H\3H\3H\3H\3I\3I\7I\u02ea\n"+
"I\fI\16I\u02ed\13I\3I\5I\u02f0\nI\3J\3J\3K\3K\5K\u02f6\nK\3L\3L\5L\u02fa"+
"\nL\3M\3M\3M\5M\u02ff\nM\3M\5M\u0302\nM\3M\5M\u0305\nM\3M\3M\3M\5M\u030a"+
"\nM\3M\5M\u030d\nM\3M\3M\3M\5M\u0312\nM\3M\3M\3M\5M\u0317\nM\3N\3N\3N"+
"\3O\3O\3P\5P\u031f\nP\3P\3P\3Q\3Q\3R\3R\3S\3S\3S\5S\u032a\nS\3T\3T\5T"+
"\u032e\nT\3T\3T\3T\5T\u0333\nT\3T\3T\5T\u0337\nT\3U\3U\3U\3V\3V\3W\3W"+
"\3W\3W\3W\3W\3W\3W\3W\5W\u0347\nW\3X\3X\3X\3X\3X\3X\3X\3X\5X\u0351\nX"+
"\3Y\3Y\3Z\3Z\5Z\u0357\nZ\3Z\3Z\3[\6[\u035c\n[\r[\16[\u035d\3\\\3\\\5\\"+
"\u0362\n\\\3]\3]\3]\3]\5]\u0368\n]\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\3^\5"+
"^\u0375\n^\3_\3_\3_\3_\3_\3_\3_\3`\3`\3a\3a\3a\3a\3a\3b\3b\3c\3c\3d\3"+
"d\3e\3e\3f\3f\3g\3g\3h\3h\3i\3i\3j\3j\3k\3k\3l\3l\3m\3m\3n\3n\3o\3o\3"+
"p\3p\3q\3q\3r\3r\3r\3s\3s\3s\3t\3t\3t\3u\3u\3u\3v\3v\3v\3w\3w\3w\3x\3"+
"x\3x\3y\3y\3y\3z\3z\3{\3{\3|\3|\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080"+
"\3\u0081\3\u0081\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084"+
"\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0086\3\u0086\3\u0086\3\u0087"+
"\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0089\3\u0089\3\u0089\3\u008a"+
"\3\u008a\3\u008a\3\u008a\3\u008b\3\u008b\3\u008b\3\u008b\3\u008c\3\u008c"+
"\3\u008c\3\u008c\3\u008c\3\u008d\3\u008d\7\u008d\u03f4\n\u008d\f\u008d"+
"\16\u008d\u03f7\13\u008d\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e\3\u008e"+
"\5\u008e\u03ff\n\u008e\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f"+
"\5\u008f\u0407\n\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091\3\u0091"+
"\3\u0092\6\u0092\u0410\n\u0092\r\u0092\16\u0092\u0411\3\u0092\3\u0092"+
"\3\u0093\3\u0093\3\u0093\3\u0093\7\u0093\u041a\n\u0093\f\u0093\16\u0093"+
"\u041d\13\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0093\3\u0094\3\u0094"+
"\3\u0094\3\u0094\7\u0094\u0428\n\u0094\f\u0094\16\u0094\u042b\13\u0094"+
"\3\u0094\3\u0094\3\u041b\2\u0095\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23"+
"\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31"+
"\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60"+
"_\61a\62c\63e\64g\65i\2k\2m\2o\2q\2s\2u\2w\2y\2{\2}\2\177\2\u0081\2\u0083"+
"\2\u0085\2\u0087\2\u0089\2\u008b\2\u008d\2\u008f\2\u0091\2\u0093\2\u0095"+
"\2\u0097\66\u0099\2\u009b\2\u009d\2\u009f\2\u00a1\2\u00a3\2\u00a5\2\u00a7"+
"\2\u00a9\2\u00ab\2\u00ad\67\u00af8\u00b1\2\u00b39\u00b5\2\u00b7\2\u00b9"+
"\2\u00bb\2\u00bd\2\u00bf\2\u00c1:\u00c3;\u00c5<\u00c7=\u00c9>\u00cb?\u00cd"+
"@\u00cfA\u00d1B\u00d3C\u00d5D\u00d7E\u00d9F\u00dbG\u00ddH\u00dfI\u00e1"+
"J\u00e3K\u00e5L\u00e7M\u00e9N\u00ebO\u00edP\u00efQ\u00f1R\u00f3S\u00f5"+
"T\u00f7U\u00f9V\u00fbW\u00fdX\u00ffY\u0101Z\u0103[\u0105\\\u0107]\u0109"+
"^\u010b_\u010d`\u010fa\u0111b\u0113c\u0115d\u0117e\u0119f\u011b\2\u011d"+
"\2\u011fg\u0121h\u0123i\u0125j\u0127k\3\2\30\4\2NNnn\3\2\63;\4\2ZZzz\5"+
"\2\62;CHch\3\2\629\4\2DDdd\3\2\62\63\4\2GGgg\4\2--//\6\2FFHHffhh\4\2R"+
"Rrr\4\2))^^\4\2$$^^\n\2$$))^^ddhhppttvv\3\2\62\65\6\2&&C\\aac|\4\2\2\u0101"+
"\ud802\udc01\3\2\ud802\udc01\3\2\udc02\ue001\7\2&&\62;C\\aac|\5\2\13\f"+
"\16\17\"\"\4\2\f\f\17\17\u043c\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t"+
"\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2"+
"\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2"+
"\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2"+
"+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2"+
"\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2"+
"C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3"+
"\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2"+
"\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2"+
"\u0097\3\2\2\2\2\u00ad\3\2\2\2\2\u00af\3\2\2\2\2\u00b3\3\2\2\2\2\u00c1"+
"\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9\3\2\2"+
"\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2\2\2\u00d3"+
"\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db\3\2\2"+
"\2\2\u00dd\3\2\2\2\2\u00df\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2\2\2\u00e5"+
"\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed\3\2\2"+
"\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2\2\2\u00f7"+
"\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2\2\2\u00fd\3\2\2\2\2\u00ff\3\2\2"+
"\2\2\u0101\3\2\2\2\2\u0103\3\2\2\2\2\u0105\3\2\2\2\2\u0107\3\2\2\2\2\u0109"+
"\3\2\2\2\2\u010b\3\2\2\2\2\u010d\3\2\2\2\2\u010f\3\2\2\2\2\u0111\3\2\2"+
"\2\2\u0113\3\2\2\2\2\u0115\3\2\2\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011f"+
"\3\2\2\2\2\u0121\3\2\2\2\2\u0123\3\2\2\2\2\u0125\3\2\2\2\2\u0127\3\2\2"+
"\2\3\u0129\3\2\2\2\5\u0132\3\2\2\2\7\u0139\3\2\2\2\t\u0141\3\2\2\2\13"+
"\u0147\3\2\2\2\r\u014c\3\2\2\2\17\u0151\3\2\2\2\21\u0157\3\2\2\2\23\u015c"+
"\3\2\2\2\25\u0162\3\2\2\2\27\u0168\3\2\2\2\31\u0171\3\2\2\2\33\u0179\3"+
"\2\2\2\35\u017c\3\2\2\2\37\u0183\3\2\2\2!\u0188\3\2\2\2#\u018d\3\2\2\2"+
"%\u0195\3\2\2\2\'\u019b\3\2\2\2)\u01a3\3\2\2\2+\u01a9\3\2\2\2-\u01ad\3"+
"\2\2\2/\u01b0\3\2\2\2\61\u01b5\3\2\2\2\63\u01c0\3\2\2\2\65\u01c7\3\2\2"+
"\2\67\u01d2\3\2\2\29\u01d6\3\2\2\2;\u01e0\3\2\2\2=\u01e5\3\2\2\2?\u01ec"+
"\3\2\2\2A\u01f0\3\2\2\2C\u01f8\3\2\2\2E\u0200\3\2\2\2G\u020a\3\2\2\2I"+
"\u0211\3\2\2\2K\u0218\3\2\2\2M\u021e\3\2\2\2O\u0225\3\2\2\2Q\u022e\3\2"+
"\2\2S\u0234\3\2\2\2U\u023b\3\2\2\2W\u0248\3\2\2\2Y\u024d\3\2\2\2[\u0253"+
"\3\2\2\2]\u025a\3\2\2\2_\u0264\3\2\2\2a\u0268\3\2\2\2c\u026d\3\2\2\2e"+
"\u0276\3\2\2\2g\u0280\3\2\2\2i\u0282\3\2\2\2k\u0286\3\2\2\2m\u028a\3\2"+
"\2\2o\u028e\3\2\2\2q\u0292\3\2\2\2s\u029e\3\2\2\2u\u02a0\3\2\2\2w\u02ac"+
"\3\2\2\2y\u02ae\3\2\2\2{\u02b2\3\2\2\2}\u02b5\3\2\2\2\177\u02b9\3\2\2"+
"\2\u0081\u02bd\3\2\2\2\u0083\u02c7\3\2\2\2\u0085\u02cb\3\2\2\2\u0087\u02cd"+
"\3\2\2\2\u0089\u02d3\3\2\2\2\u008b\u02dd\3\2\2\2\u008d\u02e1\3\2\2\2\u008f"+
"\u02e3\3\2\2\2\u0091\u02e7\3\2\2\2\u0093\u02f1\3\2\2\2\u0095\u02f5\3\2"+
"\2\2\u0097\u02f9\3\2\2\2\u0099\u0316\3\2\2\2\u009b\u0318\3\2\2\2\u009d"+
"\u031b\3\2\2\2\u009f\u031e\3\2\2\2\u00a1\u0322\3\2\2\2\u00a3\u0324\3\2"+
"\2\2\u00a5\u0326\3\2\2\2\u00a7\u0336\3\2\2\2\u00a9\u0338\3\2\2\2\u00ab"+
"\u033b\3\2\2\2\u00ad\u0346\3\2\2\2\u00af\u0350\3\2\2\2\u00b1\u0352\3\2"+
"\2\2\u00b3\u0354\3\2\2\2\u00b5\u035b\3\2\2\2\u00b7\u0361\3\2\2\2\u00b9"+
"\u0367\3\2\2\2\u00bb\u0374\3\2\2\2\u00bd\u0376\3\2\2\2\u00bf\u037d\3\2"+
"\2\2\u00c1\u037f\3\2\2\2\u00c3\u0384\3\2\2\2\u00c5\u0386\3\2\2\2\u00c7"+
"\u0388\3\2\2\2\u00c9\u038a\3\2\2\2\u00cb\u038c\3\2\2\2\u00cd\u038e\3\2"+
"\2\2\u00cf\u0390\3\2\2\2\u00d1\u0392\3\2\2\2\u00d3\u0394\3\2\2\2\u00d5"+
"\u0396\3\2\2\2\u00d7\u0398\3\2\2\2\u00d9\u039a\3\2\2\2\u00db\u039c\3\2"+
"\2\2\u00dd\u039e\3\2\2\2\u00df\u03a0\3\2\2\2\u00e1\u03a2\3\2\2\2\u00e3"+
"\u03a4\3\2\2\2\u00e5\u03a7\3\2\2\2\u00e7\u03aa\3\2\2\2\u00e9\u03ad\3\2"+
"\2\2\u00eb\u03b0\3\2\2\2\u00ed\u03b3\3\2\2\2\u00ef\u03b6\3\2\2\2\u00f1"+
"\u03b9\3\2\2\2\u00f3\u03bc\3\2\2\2\u00f5\u03be\3\2\2\2\u00f7\u03c0\3\2"+
"\2\2\u00f9\u03c2\3\2\2\2\u00fb\u03c4\3\2\2\2\u00fd\u03c6\3\2\2\2\u00ff"+
"\u03c8\3\2\2\2\u0101\u03ca\3\2\2\2\u0103\u03cc\3\2\2\2\u0105\u03cf\3\2"+
"\2\2\u0107\u03d2\3\2\2\2\u0109\u03d5\3\2\2\2\u010b\u03d8\3\2\2\2\u010d"+
"\u03db\3\2\2\2\u010f\u03de\3\2\2\2\u0111\u03e1\3\2\2\2\u0113\u03e4\3\2"+
"\2\2\u0115\u03e8\3\2\2\2\u0117\u03ec\3\2\2\2\u0119\u03f1\3\2\2\2\u011b"+
"\u03fe\3\2\2\2\u011d\u0406\3\2\2\2\u011f\u0408\3\2\2\2\u0121\u040a\3\2"+
"\2\2\u0123\u040f\3\2\2\2\u0125\u0415\3\2\2\2\u0127\u0423\3\2\2\2\u0129"+
"\u012a\7c\2\2\u012a\u012b\7d\2\2\u012b\u012c\7u\2\2\u012c\u012d\7v\2\2"+
"\u012d\u012e\7t\2\2\u012e\u012f\7c\2\2\u012f\u0130\7e\2\2\u0130\u0131"+
"\7v\2\2\u0131\4\3\2\2\2\u0132\u0133\7c\2\2\u0133\u0134\7u\2\2\u0134\u0135"+
"\7u\2\2\u0135\u0136\7g\2\2\u0136\u0137\7t\2\2\u0137\u0138\7v\2\2\u0138"+
"\6\3\2\2\2\u0139\u013a\7d\2\2\u013a\u013b\7q\2\2\u013b\u013c\7q\2\2\u013c"+
"\u013d\7n\2\2\u013d\u013e\7g\2\2\u013e\u013f\7c\2\2\u013f\u0140\7p\2\2"+
"\u0140\b\3\2\2\2\u0141\u0142\7d\2\2\u0142\u0143\7t\2\2\u0143\u0144\7g"+
"\2\2\u0144\u0145\7c\2\2\u0145\u0146\7m\2\2\u0146\n\3\2\2\2\u0147\u0148"+
"\7d\2\2\u0148\u0149\7{\2\2\u0149\u014a\7v\2\2\u014a\u014b\7g\2\2\u014b"+
"\f\3\2\2\2\u014c\u014d\7e\2\2\u014d\u014e\7c\2\2\u014e\u014f\7u\2\2\u014f"+
"\u0150\7g\2\2\u0150\16\3\2\2\2\u0151\u0152\7e\2\2\u0152\u0153\7c\2\2\u0153"+
"\u0154\7v\2\2\u0154\u0155\7e\2\2\u0155\u0156\7j\2\2\u0156\20\3\2\2\2\u0157"+
"\u0158\7e\2\2\u0158\u0159\7j\2\2\u0159\u015a\7c\2\2\u015a\u015b\7t\2\2"+
"\u015b\22\3\2\2\2\u015c\u015d\7e\2\2\u015d\u015e\7n\2\2\u015e\u015f\7"+
"c\2\2\u015f\u0160\7u\2\2\u0160\u0161\7u\2\2\u0161\24\3\2\2\2\u0162\u0163"+
"\7e\2\2\u0163\u0164\7q\2\2\u0164\u0165\7p\2\2\u0165\u0166\7u\2\2\u0166"+
"\u0167\7v\2\2\u0167\26\3\2\2\2\u0168\u0169\7e\2\2\u0169\u016a\7q\2\2\u016a"+
"\u016b\7p\2\2\u016b\u016c\7v\2\2\u016c\u016d\7k\2\2\u016d\u016e\7p\2\2"+
"\u016e\u016f\7w\2\2\u016f\u0170\7g\2\2\u0170\30\3\2\2\2\u0171\u0172\7"+
"f\2\2\u0172\u0173\7g\2\2\u0173\u0174\7h\2\2\u0174\u0175\7c\2\2\u0175\u0176"+
"\7w\2\2\u0176\u0177\7n\2\2\u0177\u0178\7v\2\2\u0178\32\3\2\2\2\u0179\u017a"+
"\7f\2\2\u017a\u017b\7q\2\2\u017b\34\3\2\2\2\u017c\u017d\7f\2\2\u017d\u017e"+
"\7q\2\2\u017e\u017f\7w\2\2\u017f\u0180\7d\2\2\u0180\u0181\7n\2\2\u0181"+
"\u0182\7g\2\2\u0182\36\3\2\2\2\u0183\u0184\7g\2\2\u0184\u0185\7n\2\2\u0185"+
"\u0186\7u\2\2\u0186\u0187\7g\2\2\u0187 \3\2\2\2\u0188\u0189\7g\2\2\u0189"+
"\u018a\7p\2\2\u018a\u018b\7w\2\2\u018b\u018c\7o\2\2\u018c\"\3\2\2\2\u018d"+
"\u018e\7g\2\2\u018e\u018f\7z\2\2\u018f\u0190\7v\2\2\u0190\u0191\7g\2\2"+
"\u0191\u0192\7p\2\2\u0192\u0193\7f\2\2\u0193\u0194\7u\2\2\u0194$\3\2\2"+
"\2\u0195\u0196\7h\2\2\u0196\u0197\7k\2\2\u0197\u0198\7p\2\2\u0198\u0199"+
"\7c\2\2\u0199\u019a\7n\2\2\u019a&\3\2\2\2\u019b\u019c\7h\2\2\u019c\u019d"+
"\7k\2\2\u019d\u019e\7p\2\2\u019e\u019f\7c\2\2\u019f\u01a0\7n\2\2\u01a0"+
"\u01a1\7n\2\2\u01a1\u01a2\7{\2\2\u01a2(\3\2\2\2\u01a3\u01a4\7h\2\2\u01a4"+
"\u01a5\7n\2\2\u01a5\u01a6\7q\2\2\u01a6\u01a7\7c\2\2\u01a7\u01a8\7v\2\2"+
"\u01a8*\3\2\2\2\u01a9\u01aa\7h\2\2\u01aa\u01ab\7q\2\2\u01ab\u01ac\7t\2"+
"\2\u01ac,\3\2\2\2\u01ad\u01ae\7k\2\2\u01ae\u01af\7h\2\2\u01af.\3\2\2\2"+
"\u01b0\u01b1\7i\2\2\u01b1\u01b2\7q\2\2\u01b2\u01b3\7v\2\2\u01b3\u01b4"+
"\7q\2\2\u01b4\60\3\2\2\2\u01b5\u01b6\7k\2\2\u01b6\u01b7\7o\2\2\u01b7\u01b8"+
"\7r\2\2\u01b8\u01b9\7n\2\2\u01b9\u01ba\7g\2\2\u01ba\u01bb\7o\2\2\u01bb"+
"\u01bc\7g\2\2\u01bc\u01bd\7p\2\2\u01bd\u01be\7v\2\2\u01be\u01bf\7u\2\2"+
"\u01bf\62\3\2\2\2\u01c0\u01c1\7k\2\2\u01c1\u01c2\7o\2\2\u01c2\u01c3\7"+
"r\2\2\u01c3\u01c4\7q\2\2\u01c4\u01c5\7t\2\2\u01c5\u01c6\7v\2\2\u01c6\64"+
"\3\2\2\2\u01c7\u01c8\7k\2\2\u01c8\u01c9\7p\2\2\u01c9\u01ca\7u\2\2\u01ca"+
"\u01cb\7v\2\2\u01cb\u01cc\7c\2\2\u01cc\u01cd\7p\2\2\u01cd\u01ce\7e\2\2"+
"\u01ce\u01cf\7g\2\2\u01cf\u01d0\7q\2\2\u01d0\u01d1\7h\2\2\u01d1\66\3\2"+
"\2\2\u01d2\u01d3\7k\2\2\u01d3\u01d4\7p\2\2\u01d4\u01d5\7v\2\2\u01d58\3"+
"\2\2\2\u01d6\u01d7\7k\2\2\u01d7\u01d8\7p\2\2\u01d8\u01d9\7v\2\2\u01d9"+
"\u01da\7g\2\2\u01da\u01db\7t\2\2\u01db\u01dc\7h\2\2\u01dc\u01dd\7c\2\2"+
"\u01dd\u01de\7e\2\2\u01de\u01df\7g\2\2\u01df:\3\2\2\2\u01e0\u01e1\7n\2"+
"\2\u01e1\u01e2\7q\2\2\u01e2\u01e3\7p\2\2\u01e3\u01e4\7i\2\2\u01e4<\3\2"+
"\2\2\u01e5\u01e6\7p\2\2\u01e6\u01e7\7c\2\2\u01e7\u01e8\7v\2\2\u01e8\u01e9"+
"\7k\2\2\u01e9\u01ea\7x\2\2\u01ea\u01eb\7g\2\2\u01eb>\3\2\2\2\u01ec\u01ed"+
"\7p\2\2\u01ed\u01ee\7g\2\2\u01ee\u01ef\7y\2\2\u01ef@\3\2\2\2\u01f0\u01f1"+
"\7r\2\2\u01f1\u01f2\7c\2\2\u01f2\u01f3\7e\2\2\u01f3\u01f4\7m\2\2\u01f4"+
"\u01f5\7c\2\2\u01f5\u01f6\7i\2\2\u01f6\u01f7\7g\2\2\u01f7B\3\2\2\2\u01f8"+
"\u01f9\7r\2\2\u01f9\u01fa\7t\2\2\u01fa\u01fb\7k\2\2\u01fb\u01fc\7x\2\2"+
"\u01fc\u01fd\7c\2\2\u01fd\u01fe\7v\2\2\u01fe\u01ff\7g\2\2\u01ffD\3\2\2"+
"\2\u0200\u0201\7r\2\2\u0201\u0202\7t\2\2\u0202\u0203\7q\2\2\u0203\u0204"+
"\7v\2\2\u0204\u0205\7g\2\2\u0205\u0206\7e\2\2\u0206\u0207\7v\2\2\u0207"+
"\u0208\7g\2\2\u0208\u0209\7f\2\2\u0209F\3\2\2\2\u020a\u020b\7r\2\2\u020b"+
"\u020c\7w\2\2\u020c\u020d\7d\2\2\u020d\u020e\7n\2\2\u020e\u020f\7k\2\2"+
"\u020f\u0210\7e\2\2\u0210H\3\2\2\2\u0211\u0212\7t\2\2\u0212\u0213\7g\2"+
"\2\u0213\u0214\7v\2\2\u0214\u0215\7w\2\2\u0215\u0216\7t\2\2\u0216\u0217"+
"\7p\2\2\u0217J\3\2\2\2\u0218\u0219\7u\2\2\u0219\u021a\7j\2\2\u021a\u021b"+
"\7q\2\2\u021b\u021c\7t\2\2\u021c\u021d\7v\2\2\u021dL\3\2\2\2\u021e\u021f"+
"\7u\2\2\u021f\u0220\7v\2\2\u0220\u0221\7c\2\2\u0221\u0222\7v\2\2\u0222"+
"\u0223\7k\2\2\u0223\u0224\7e\2\2\u0224N\3\2\2\2\u0225\u0226\7u\2\2\u0226"+
"\u0227\7v\2\2\u0227\u0228\7t\2\2\u0228\u0229\7k\2\2\u0229\u022a\7e\2\2"+
"\u022a\u022b\7v\2\2\u022b\u022c\7h\2\2\u022c\u022d\7r\2\2\u022dP\3\2\2"+
"\2\u022e\u022f\7u\2\2\u022f\u0230\7w\2\2\u0230\u0231\7r\2\2\u0231\u0232"+
"\7g\2\2\u0232\u0233\7t\2\2\u0233R\3\2\2\2\u0234\u0235\7u\2\2\u0235\u0236"+
"\7y\2\2\u0236\u0237\7k\2\2\u0237\u0238\7v\2\2\u0238\u0239\7e\2\2\u0239"+
"\u023a\7j\2\2\u023aT\3\2\2\2\u023b\u023c\7u\2\2\u023c\u023d\7{\2\2\u023d"+
"\u023e\7p\2\2\u023e\u023f\7e\2\2\u023f\u0240\7j\2\2\u0240\u0241\7t\2\2"+
"\u0241\u0242\7q\2\2\u0242\u0243\7p\2\2\u0243\u0244\7k\2\2\u0244\u0245"+
"\7|\2\2\u0245\u0246\7g\2\2\u0246\u0247\7f\2\2\u0247V\3\2\2\2\u0248\u0249"+
"\7v\2\2\u0249\u024a\7j\2\2\u024a\u024b\7k\2\2\u024b\u024c\7u\2\2\u024c"+
"X\3\2\2\2\u024d\u024e\7v\2\2\u024e\u024f\7j\2\2\u024f\u0250\7t\2\2\u0250"+
"\u0251\7q\2\2\u0251\u0252\7y\2\2\u0252Z\3\2\2\2\u0253\u0254\7v\2\2\u0254"+
"\u0255\7j\2\2\u0255\u0256\7t\2\2\u0256\u0257\7q\2\2\u0257\u0258\7y\2\2"+
"\u0258\u0259\7u\2\2\u0259\\\3\2\2\2\u025a\u025b\7v\2\2\u025b\u025c\7t"+
"\2\2\u025c\u025d\7c\2\2\u025d\u025e\7p\2\2\u025e\u025f\7u\2\2\u025f\u0260"+
"\7k\2\2\u0260\u0261\7g\2\2\u0261\u0262\7p\2\2\u0262\u0263\7v\2\2\u0263"+
"^\3\2\2\2\u0264\u0265\7v\2\2\u0265\u0266\7t\2\2\u0266\u0267\7{\2\2\u0267"+
"`\3\2\2\2\u0268\u0269\7x\2\2\u0269\u026a\7q\2\2\u026a\u026b\7k\2\2\u026b"+
"\u026c\7f\2\2\u026cb\3\2\2\2\u026d\u026e\7x\2\2\u026e\u026f\7q\2\2\u026f"+
"\u0270\7n\2\2\u0270\u0271\7c\2\2\u0271\u0272\7v\2\2\u0272\u0273\7k\2\2"+
"\u0273\u0274\7n\2\2\u0274\u0275\7g\2\2\u0275d\3\2\2\2\u0276\u0277\7y\2"+
"\2\u0277\u0278\7j\2\2\u0278\u0279\7k\2\2\u0279\u027a\7n\2\2\u027a\u027b"+
"\7g\2\2\u027bf\3\2\2\2\u027c\u0281\5i\65\2\u027d\u0281\5k\66\2\u027e\u0281"+
"\5m\67\2\u027f\u0281\5o8\2\u0280\u027c\3\2\2\2\u0280\u027d\3\2\2\2\u0280"+
"\u027e\3\2\2\2\u0280\u027f\3\2\2\2\u0281h\3\2\2\2\u0282\u0284\5s:\2\u0283"+
"\u0285\5q9\2\u0284\u0283\3\2\2\2\u0284\u0285\3\2\2\2\u0285j\3\2\2\2\u0286"+
"\u0288\5\177@\2\u0287\u0289\5q9\2\u0288\u0287\3\2\2\2\u0288\u0289\3\2"+
"\2\2\u0289l\3\2\2\2\u028a\u028c\5\u0087D\2\u028b\u028d\5q9\2\u028c\u028b"+
"\3\2\2\2\u028c\u028d\3\2\2\2\u028dn\3\2\2\2\u028e\u0290\5\u008fH\2\u028f"+
"\u0291\5q9\2\u0290\u028f\3\2\2\2\u0290\u0291\3\2\2\2\u0291p\3\2\2\2\u0292"+
"\u0293\t\2\2\2\u0293r\3\2\2\2\u0294\u029f\7\62\2\2\u0295\u029c\5y=\2\u0296"+
"\u0298\5u;\2\u0297\u0296\3\2\2\2\u0297\u0298\3\2\2\2\u0298\u029d\3\2\2"+
"\2\u0299\u029a\5}?\2\u029a\u029b\5u;\2\u029b\u029d\3\2\2\2\u029c\u0297"+
"\3\2\2\2\u029c\u0299\3\2\2\2\u029d\u029f\3\2\2\2\u029e\u0294\3\2\2\2\u029e"+
"\u0295\3\2\2\2\u029ft\3\2\2\2\u02a0\u02a8\5w<\2\u02a1\u02a3\5{>\2\u02a2"+
"\u02a1\3\2\2\2\u02a3\u02a6\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2"+
"\2\2\u02a5\u02a7\3\2\2\2\u02a6\u02a4\3\2\2\2\u02a7\u02a9\5w<\2\u02a8\u02a4"+
"\3\2\2\2\u02a8\u02a9\3\2\2\2\u02a9v\3\2\2\2\u02aa\u02ad\7\62\2\2\u02ab"+
"\u02ad\5y=\2\u02ac\u02aa\3\2\2\2\u02ac\u02ab\3\2\2\2\u02adx\3\2\2\2\u02ae"+
"\u02af\t\3\2\2\u02afz\3\2\2\2\u02b0\u02b3\5w<\2\u02b1\u02b3\7a\2\2\u02b2"+
"\u02b0\3\2\2\2\u02b2\u02b1\3\2\2\2\u02b3|\3\2\2\2\u02b4\u02b6\7a\2\2\u02b5"+
"\u02b4\3\2\2\2\u02b6\u02b7\3\2\2\2\u02b7\u02b5\3\2\2\2\u02b7\u02b8\3\2"+
"\2\2\u02b8~\3\2\2\2\u02b9\u02ba\7\62\2\2\u02ba\u02bb\t\4\2\2\u02bb\u02bc"+
"\5\u0081A\2\u02bc\u0080\3\2\2\2\u02bd\u02c5\5\u0083B\2\u02be\u02c0\5\u0085"+
"C\2\u02bf\u02be\3\2\2\2\u02c0\u02c3\3\2\2\2\u02c1\u02bf\3\2\2\2\u02c1"+
"\u02c2\3\2\2\2\u02c2\u02c4\3\2\2\2\u02c3\u02c1\3\2\2\2\u02c4\u02c6\5\u0083"+
"B\2\u02c5\u02c1\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6\u0082\3\2\2\2\u02c7"+
"\u02c8\t\5\2\2\u02c8\u0084\3\2\2\2\u02c9\u02cc\5\u0083B\2\u02ca\u02cc"+
"\7a\2\2\u02cb\u02c9\3\2\2\2\u02cb\u02ca\3\2\2\2\u02cc\u0086\3\2\2\2\u02cd"+
"\u02cf\7\62\2\2\u02ce\u02d0\5}?\2\u02cf\u02ce\3\2\2\2\u02cf\u02d0\3\2"+
"\2\2\u02d0\u02d1\3\2\2\2\u02d1\u02d2\5\u0089E\2\u02d2\u0088\3\2\2\2\u02d3"+
"\u02db\5\u008bF\2\u02d4\u02d6\5\u008dG\2\u02d5\u02d4\3\2\2\2\u02d6\u02d9"+
"\3\2\2\2\u02d7\u02d5\3\2\2\2\u02d7\u02d8\3\2\2\2\u02d8\u02da\3\2\2\2\u02d9"+
"\u02d7\3\2\2\2\u02da\u02dc\5\u008bF\2\u02db\u02d7\3\2\2\2\u02db\u02dc"+
"\3\2\2\2\u02dc\u008a\3\2\2\2\u02dd\u02de\t\6\2\2\u02de\u008c\3\2\2\2\u02df"+
"\u02e2\5\u008bF\2\u02e0\u02e2\7a\2\2\u02e1\u02df\3\2\2\2\u02e1\u02e0\3"+
"\2\2\2\u02e2\u008e\3\2\2\2\u02e3\u02e4\7\62\2\2\u02e4\u02e5\t\7\2\2\u02e5"+
"\u02e6\5\u0091I\2\u02e6\u0090\3\2\2\2\u02e7\u02ef\5\u0093J\2\u02e8\u02ea"+
"\5\u0095K\2\u02e9\u02e8\3\2\2\2\u02ea\u02ed\3\2\2\2\u02eb\u02e9\3\2\2"+
"\2\u02eb\u02ec\3\2\2\2\u02ec\u02ee\3\2\2\2\u02ed\u02eb\3\2\2\2\u02ee\u02f0"+
"\5\u0093J\2\u02ef\u02eb\3\2\2\2\u02ef\u02f0\3\2\2\2\u02f0\u0092\3\2\2"+
"\2\u02f1\u02f2\t\b\2\2\u02f2\u0094\3\2\2\2\u02f3\u02f6\5\u0093J\2\u02f4"+
"\u02f6\7a\2\2\u02f5\u02f3\3\2\2\2\u02f5\u02f4\3\2\2\2\u02f6\u0096\3\2"+
"\2\2\u02f7\u02fa\5\u0099M\2\u02f8\u02fa\5\u00a5S\2\u02f9\u02f7\3\2\2\2"+
"\u02f9\u02f8\3\2\2\2\u02fa\u0098\3\2\2\2\u02fb\u02fc\5u;\2\u02fc\u02fe"+
"\7\60\2\2\u02fd\u02ff\5u;\2\u02fe\u02fd\3\2\2\2\u02fe\u02ff\3\2\2\2\u02ff"+
"\u0301\3\2\2\2\u0300\u0302\5\u009bN\2\u0301\u0300\3\2\2\2\u0301\u0302"+
"\3\2\2\2\u0302\u0304\3\2\2\2\u0303\u0305\5\u00a3R\2\u0304\u0303\3\2\2"+
"\2\u0304\u0305\3\2\2\2\u0305\u0317\3\2\2\2\u0306\u0307\7\60\2\2\u0307"+
"\u0309\5u;\2\u0308\u030a\5\u009bN\2\u0309\u0308\3\2\2\2\u0309\u030a\3"+
"\2\2\2\u030a\u030c\3\2\2\2\u030b\u030d\5\u00a3R\2\u030c\u030b\3\2\2\2"+
"\u030c\u030d\3\2\2\2\u030d\u0317\3\2\2\2\u030e\u030f\5u;\2\u030f\u0311"+
"\5\u009bN\2\u0310\u0312\5\u00a3R\2\u0311\u0310\3\2\2\2\u0311\u0312\3\2"+
"\2\2\u0312\u0317\3\2\2\2\u0313\u0314\5u;\2\u0314\u0315\5\u00a3R\2\u0315"+
"\u0317\3\2\2\2\u0316\u02fb\3\2\2\2\u0316\u0306\3\2\2\2\u0316\u030e\3\2"+
"\2\2\u0316\u0313\3\2\2\2\u0317\u009a\3\2\2\2\u0318\u0319\5\u009dO\2\u0319"+
"\u031a\5\u009fP\2\u031a\u009c\3\2\2\2\u031b\u031c\t\t\2\2\u031c\u009e"+
"\3\2\2\2\u031d\u031f\5\u00a1Q\2\u031e\u031d\3\2\2\2\u031e\u031f\3\2\2"+
"\2\u031f\u0320\3\2\2\2\u0320\u0321\5u;\2\u0321\u00a0\3\2\2\2\u0322\u0323"+
"\t\n\2\2\u0323\u00a2\3\2\2\2\u0324\u0325\t\13\2\2\u0325\u00a4\3\2\2\2"+
"\u0326\u0327\5\u00a7T\2\u0327\u0329\5\u00a9U\2\u0328\u032a\5\u00a3R\2"+
"\u0329\u0328\3\2\2\2\u0329\u032a\3\2\2\2\u032a\u00a6\3\2\2\2\u032b\u032d"+
"\5\177@\2\u032c\u032e\7\60\2\2\u032d\u032c\3\2\2\2\u032d\u032e\3\2\2\2"+
"\u032e\u0337\3\2\2\2\u032f\u0330\7\62\2\2\u0330\u0332\t\4\2\2\u0331\u0333"+
"\5\u0081A\2\u0332\u0331\3\2\2\2\u0332\u0333\3\2\2\2\u0333\u0334\3\2\2"+
"\2\u0334\u0335\7\60\2\2\u0335\u0337\5\u0081A\2\u0336\u032b\3\2\2\2\u0336"+
"\u032f\3\2\2\2\u0337\u00a8\3\2\2\2\u0338\u0339\5\u00abV\2\u0339\u033a"+
"\5\u009fP\2\u033a\u00aa\3\2\2\2\u033b\u033c\t\f\2\2\u033c\u00ac\3\2\2"+
"\2\u033d\u033e\7v\2\2\u033e\u033f\7t\2\2\u033f\u0340\7w\2\2\u0340\u0347"+
"\7g\2\2\u0341\u0342\7h\2\2\u0342\u0343\7c\2\2\u0343\u0344\7n\2\2\u0344"+
"\u0345\7u\2\2\u0345\u0347\7g\2\2\u0346\u033d\3\2\2\2\u0346\u0341\3\2\2"+
"\2\u0347\u00ae\3\2\2\2\u0348\u0349\7)\2\2\u0349\u034a\5\u00b1Y\2\u034a"+
"\u034b\7)\2\2\u034b\u0351\3\2\2\2\u034c\u034d\7)\2\2\u034d\u034e\5\u00b9"+
"]\2\u034e\u034f\7)\2\2\u034f\u0351\3\2\2\2\u0350\u0348\3\2\2\2\u0350\u034c"+
"\3\2\2\2\u0351\u00b0\3\2\2\2\u0352\u0353\n\r\2\2\u0353\u00b2\3\2\2\2\u0354"+
"\u0356\7$\2\2\u0355\u0357\5\u00b5[\2\u0356\u0355\3\2\2\2\u0356\u0357\3"+
"\2\2\2\u0357\u0358\3\2\2\2\u0358\u0359\7$\2\2\u0359\u00b4\3\2\2\2\u035a"+
"\u035c\5\u00b7\\\2\u035b\u035a\3\2\2\2\u035c\u035d\3\2\2\2\u035d\u035b"+
"\3\2\2\2\u035d\u035e\3\2\2\2\u035e\u00b6\3\2\2\2\u035f\u0362\n\16\2\2"+
"\u0360\u0362\5\u00b9]\2\u0361\u035f\3\2\2\2\u0361\u0360\3\2\2\2\u0362"+
"\u00b8\3\2\2\2\u0363\u0364\7^\2\2\u0364\u0368\t\17\2\2\u0365\u0368\5\u00bb"+
"^\2\u0366\u0368\5\u00bd_\2\u0367\u0363\3\2\2\2\u0367\u0365\3\2\2\2\u0367"+
"\u0366\3\2\2\2\u0368\u00ba\3\2\2\2\u0369\u036a\7^\2\2\u036a\u0375\5\u008b"+
"F\2\u036b\u036c\7^\2\2\u036c\u036d\5\u008bF\2\u036d\u036e\5\u008bF\2\u036e"+
"\u0375\3\2\2\2\u036f\u0370\7^\2\2\u0370\u0371\5\u00bf`\2\u0371\u0372\5"+
"\u008bF\2\u0372\u0373\5\u008bF\2\u0373\u0375\3\2\2\2\u0374\u0369\3\2\2"+
"\2\u0374\u036b\3\2\2\2\u0374\u036f\3\2\2\2\u0375\u00bc\3\2\2\2\u0376\u0377"+
"\7^\2\2\u0377\u0378\7w\2\2\u0378\u0379\5\u0083B\2\u0379\u037a\5\u0083"+
"B\2\u037a\u037b\5\u0083B\2\u037b\u037c\5\u0083B\2\u037c\u00be\3\2\2\2"+
"\u037d\u037e\t\20\2\2\u037e\u00c0\3\2\2\2\u037f\u0380\7p\2\2\u0380\u0381"+
"\7w\2\2\u0381\u0382\7n\2\2\u0382\u0383\7n\2\2\u0383\u00c2\3\2\2\2\u0384"+
"\u0385\7*\2\2\u0385\u00c4\3\2\2\2\u0386\u0387\7+\2\2\u0387\u00c6\3\2\2"+
"\2\u0388\u0389\7}\2\2\u0389\u00c8\3\2\2\2\u038a\u038b\7\177\2\2\u038b"+
"\u00ca\3\2\2\2\u038c\u038d\7]\2\2\u038d\u00cc\3\2\2\2\u038e\u038f\7_\2"+
"\2\u038f\u00ce\3\2\2\2\u0390\u0391\7=\2\2\u0391\u00d0\3\2\2\2\u0392\u0393"+
"\7.\2\2\u0393\u00d2\3\2\2\2\u0394\u0395\7\60\2\2\u0395\u00d4\3\2\2\2\u0396"+
"\u0397\7?\2\2\u0397\u00d6\3\2\2\2\u0398\u0399\7@\2\2\u0399\u00d8\3\2\2"+
"\2\u039a\u039b\7>\2\2\u039b\u00da\3\2\2\2\u039c\u039d\7#\2\2\u039d\u00dc"+
"\3\2\2\2\u039e\u039f\7\u0080\2\2\u039f\u00de\3\2\2\2\u03a0\u03a1\7A\2"+
"\2\u03a1\u00e0\3\2\2\2\u03a2\u03a3\7<\2\2\u03a3\u00e2\3\2\2\2\u03a4\u03a5"+
"\7?\2\2\u03a5\u03a6\7?\2\2\u03a6\u00e4\3\2\2\2\u03a7\u03a8\7>\2\2\u03a8"+
"\u03a9\7?\2\2\u03a9\u00e6\3\2\2\2\u03aa\u03ab\7@\2\2\u03ab\u03ac\7?\2"+
"\2\u03ac\u00e8\3\2\2\2\u03ad\u03ae\7#\2\2\u03ae\u03af\7?\2\2\u03af\u00ea"+
"\3\2\2\2\u03b0\u03b1\7(\2\2\u03b1\u03b2\7(\2\2\u03b2\u00ec\3\2\2\2\u03b3"+
"\u03b4\7~\2\2\u03b4\u03b5\7~\2\2\u03b5\u00ee\3\2\2\2\u03b6\u03b7\7-\2"+
"\2\u03b7\u03b8\7-\2\2\u03b8\u00f0\3\2\2\2\u03b9\u03ba\7/\2\2\u03ba\u03bb"+
"\7/\2\2\u03bb\u00f2\3\2\2\2\u03bc\u03bd\7-\2\2\u03bd\u00f4\3\2\2\2\u03be"+
"\u03bf\7/\2\2\u03bf\u00f6\3\2\2\2\u03c0\u03c1\7,\2\2\u03c1\u00f8\3\2\2"+
"\2\u03c2\u03c3\7\61\2\2\u03c3\u00fa\3\2\2\2\u03c4\u03c5\7(\2\2\u03c5\u00fc"+
"\3\2\2\2\u03c6\u03c7\7~\2\2\u03c7\u00fe\3\2\2\2\u03c8\u03c9\7`\2\2\u03c9"+
"\u0100\3\2\2\2\u03ca\u03cb\7\'\2\2\u03cb\u0102\3\2\2\2\u03cc\u03cd\7-"+
"\2\2\u03cd\u03ce\7?\2\2\u03ce\u0104\3\2\2\2\u03cf\u03d0\7/\2\2\u03d0\u03d1"+
"\7?\2\2\u03d1\u0106\3\2\2\2\u03d2\u03d3\7,\2\2\u03d3\u03d4\7?\2\2\u03d4"+
"\u0108\3\2\2\2\u03d5\u03d6\7\61\2\2\u03d6\u03d7\7?\2\2\u03d7\u010a\3\2"+
"\2\2\u03d8\u03d9\7(\2\2\u03d9\u03da\7?\2\2\u03da\u010c\3\2\2\2\u03db\u03dc"+
"\7~\2\2\u03dc\u03dd\7?\2\2\u03dd\u010e\3\2\2\2\u03de\u03df\7`\2\2\u03df"+
"\u03e0\7?\2\2\u03e0\u0110\3\2\2\2\u03e1\u03e2\7\'\2\2\u03e2\u03e3\7?\2"+
"\2\u03e3\u0112\3\2\2\2\u03e4\u03e5\7>\2\2\u03e5\u03e6\7>\2\2\u03e6\u03e7"+
"\7?\2\2\u03e7\u0114\3\2\2\2\u03e8\u03e9\7@\2\2\u03e9\u03ea\7@\2\2\u03ea"+
"\u03eb\7?\2\2\u03eb\u0116\3\2\2\2\u03ec\u03ed\7@\2\2\u03ed\u03ee\7@\2"+
"\2\u03ee\u03ef\7@\2\2\u03ef\u03f0\7?\2\2\u03f0\u0118\3\2\2\2\u03f1\u03f5"+
"\5\u011b\u008e\2\u03f2\u03f4\5\u011d\u008f\2\u03f3\u03f2\3\2\2\2\u03f4"+
"\u03f7\3\2\2\2\u03f5\u03f3\3\2\2\2\u03f5\u03f6\3\2\2\2\u03f6\u011a\3\2"+
"\2\2\u03f7\u03f5\3\2\2\2\u03f8\u03ff\t\21\2\2\u03f9\u03fa\n\22\2\2\u03fa"+
"\u03ff\6\u008e\2\2\u03fb\u03fc\t\23\2\2\u03fc\u03fd\t\24\2\2\u03fd\u03ff"+
"\6\u008e\3\2\u03fe\u03f8\3\2\2\2\u03fe\u03f9\3\2\2\2\u03fe\u03fb\3\2\2"+
"\2\u03ff\u011c\3\2\2\2\u0400\u0407\t\25\2\2\u0401\u0402\n\22\2\2\u0402"+
"\u0407\6\u008f\4\2\u0403\u0404\t\23\2\2\u0404\u0405\t\24\2\2\u0405\u0407"+
"\6\u008f\5\2\u0406\u0400\3\2\2\2\u0406\u0401\3\2\2\2\u0406\u0403\3\2\2"+
"\2\u0407\u011e\3\2\2\2\u0408\u0409\7B\2\2\u0409\u0120\3\2\2\2\u040a\u040b"+
"\7\60\2\2\u040b\u040c\7\60\2\2\u040c\u040d\7\60\2\2\u040d\u0122\3\2\2"+
"\2\u040e\u0410\t\26\2\2\u040f\u040e\3\2\2\2\u0410\u0411\3\2\2\2\u0411"+
"\u040f\3\2\2\2\u0411\u0412\3\2\2\2\u0412\u0413\3\2\2\2\u0413\u0414\b\u0092"+
"\2\2\u0414\u0124\3\2\2\2\u0415\u0416\7\61\2\2\u0416\u0417\7,\2\2\u0417"+
"\u041b\3\2\2\2\u0418\u041a\13\2\2\2\u0419\u0418\3\2\2\2\u041a\u041d\3"+
"\2\2\2\u041b\u041c\3\2\2\2\u041b\u0419\3\2\2\2\u041c\u041e\3\2\2\2\u041d"+
"\u041b\3\2\2\2\u041e\u041f\7,\2\2\u041f\u0420\7\61\2\2\u0420\u0421\3\2"+
"\2\2\u0421\u0422\b\u0093\2\2\u0422\u0126\3\2\2\2\u0423\u0424\7\61\2\2"+
"\u0424\u0425\7\61\2\2\u0425\u0429\3\2\2\2\u0426\u0428\n\27\2\2\u0427\u0426"+
"\3\2\2\2\u0428\u042b\3\2\2\2\u0429\u0427\3\2\2\2\u0429\u042a\3\2\2\2\u042a"+
"\u042c\3\2\2\2\u042b\u0429\3\2\2\2\u042c\u042d\b\u0094\2\2\u042d\u0128"+
"\3\2\2\2\64\2\u0280\u0284\u0288\u028c\u0290\u0297\u029c\u029e\u02a4\u02a8"+
"\u02ac\u02b2\u02b7\u02c1\u02c5\u02cb\u02cf\u02d7\u02db\u02e1\u02eb\u02ef"+
"\u02f5\u02f9\u02fe\u0301\u0304\u0309\u030c\u0311\u0316\u031e\u0329\u032d"+
"\u0332\u0336\u0346\u0350\u0356\u035d\u0361\u0367\u0374\u03f5\u03fe\u0406"+
"\u0411\u041b\u0429\3\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
_decisionToDFA = new DFA[_ATN.getNumberOfDecisions()];
for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) {
_decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i);
}
}
}
+201
View File
@@ -0,0 +1,201 @@
THROW=44
STATIC=38
INTERFACE=28
AND_ASSIGN=93
BREAK=4
BYTE=5
ELSE=15
IF=22
ENUM=16
SUB=82
BANG=69
LPAREN=57
DOT=65
CASE=6
AT=101
LINE_COMMENT=105
StringLiteral=55
ELLIPSIS=102
LBRACK=61
PUBLIC=35
THROWS=45
NullLiteral=56
RSHIFT_ASSIGN=98
LBRACE=59
GOTO=23
SUB_ASSIGN=90
SEMI=63
CHAR=8
ASSIGN=66
COMMENT=104
IMPORT=25
BITOR=86
CATCH=7
MUL_ASSIGN=91
DOUBLE=14
PROTECTED=34
LONG=29
COMMA=64
BITAND=85
PRIVATE=33
CONTINUE=11
DIV=84
FloatingPointLiteral=52
LE=74
CharacterLiteral=54
VOLATILE=49
EXTENDS=17
INSTANCEOF=26
NEW=31
ADD=81
LT=68
CLASS=9
DO=13
FINALLY=19
Identifier=100
CONST=10
PACKAGE=32
OR_ASSIGN=94
TRY=47
IntegerLiteral=51
SYNCHRONIZED=42
MUL=83
FOR=21
FINAL=18
RPAREN=58
CARET=87
URSHIFT_ASSIGN=99
BOOLEAN=3
NOTEQUAL=76
RBRACK=62
RBRACE=60
AND=77
THIS=43
SWITCH=41
VOID=48
TRANSIENT=46
INC=79
FLOAT=20
NATIVE=30
DIV_ASSIGN=92
BooleanLiteral=53
ABSTRACT=1
STRICTFP=39
INT=27
QUESTION=71
RETURN=36
LSHIFT_ASSIGN=97
ADD_ASSIGN=89
WS=103
GE=75
SUPER=40
OR=78
DEC=80
MOD=88
XOR_ASSIGN=95
ASSERT=2
EQUAL=73
IMPLEMENTS=24
COLON=72
GT=67
SHORT=37
MOD_ASSIGN=96
WHILE=50
TILDE=70
DEFAULT=12
'import'=25
'-'=82
')'=58
'super'=40
'else'=15
'%'=88
'!'=69
'>'=67
'public'=35
'=='=73
'--'=80
'|'=86
'['=61
':'=72
'...'=102
'throw'=44
'case'=6
'.'=65
'this'=43
'*'=83
'switch'=41
'synchronized'=42
'&'=85
'double'=14
'break'=4
'short'=37
'<='=74
'enum'=16
'try'=47
'?'=71
'if'=22
'extends'=17
'goto'=23
'}'=60
'instanceof'=26
';'=63
'||'=78
'>>='=98
'class'=9
'return'=36
'&='=93
'catch'=7
'native'=30
'continue'=11
'strictfp'=39
'/'=84
'*='=91
'+'=81
'final'=18
'protected'=34
'static'=38
'@'=101
'transient'=46
'~'=70
'assert'=2
']'=62
'<'=68
'++'=79
'>>>='=99
'>='=75
'long'=29
'boolean'=3
'const'=10
'abstract'=1
'implements'=24
'volatile'=49
'throws'=45
'/='=92
','=64
'-='=90
'do'=13
'package'=32
'('=57
'null'=56
'int'=27
'|='=94
'for'=21
'^'=87
'<<='=97
'='=66
'byte'=5
'&&'=77
'^='=95
'void'=48
'while'=50
'{'=59
'float'=20
'!='=76
'new'=31
'char'=8
'finally'=19
'interface'=28
'%='=96
'private'=33
'+='=89
'default'=12
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+4
View File
@@ -0,0 +1,4 @@
all:
java -jar ./antlr-4.4-complete.jar Java8.g4
javac -cp ./antlr-4.4-complete.jar:. *.java
Binary file not shown.
-53
View File
@@ -1,53 +0,0 @@
/*
* This file was generated by the Gradle 'init' task.
*
* This generated file contains a sample Java application project to get you started.
* For more details take a look at the 'Building Java & JVM projects' chapter in the Gradle
* User Manual available at https://docs.gradle.org/7.6/userguide/building_java_projects.html
*/
plugins {
// Apply the application plugin to add support for building a CLI application in Java.
antlr
application
}
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(19))
}
}
repositories {
// Use Maven Central for resolving dependencies.
mavenCentral()
}
dependencies {
// Use JUnit test framework.
testImplementation("junit:junit:4.13.2")
// This dependency is used by the application.
implementation("com.google.guava:guava:31.1-jre")
implementation("commons-io:commons-io:2.6")
implementation("org.reflections:reflections:0.9.11")
implementation("org.ow2.asm:asm:7.0")
//implementation("org.antlr:antlr4:4.11.1")
antlr("org.antlr:antlr4:4.8-1")
}
tasks.withType<JavaCompile> {
options.compilerArgs.add("--enable-preview")
}
tasks.withType<Test> {
jvmArgs("--enable-preview")
}
tasks.withType<JavaExec> {
jvmArgs("--enable-preview")
}
application {
// Define the main class for the application.
mainClass.set("de.dhbwstuttgart.App")
}
-13
View File
@@ -1,13 +0,0 @@
class Box<A>{
void m(A a){}
}
class B { }
class Box_Main extends B {
m(b) {
b.m(new Box_Main());
b.m(new B());
}
}
-13
View File
@@ -1,13 +0,0 @@
class Box<A>{
A f;
}
class B { }
class Box_Main extends B {//Fehler Bugzilla Bug 230
m(b) {
b.f = new Box_Main();
b.f = new B();
}
}
-12
View File
@@ -1,12 +0,0 @@
import java.util.Vector;
import java.util.List;
import java.lang.Integer;
class FCTest1 extends Vector<Vector<Integer>> {
fc1() {
var y;
var z;
y.add(z);
return y;
}
}
-11
View File
@@ -1,11 +0,0 @@
import java.util.Vector;
import java.util.List;
import java.lang.Integer;
class FCTest2 extends Vector<Vector<Integer>> {
fc2(y) {
var z;
y.add(z);
return y;
}
}
-19
View File
@@ -1,19 +0,0 @@
import java.util.Vector;
import java.lang.Integer;
class FCTest3 extends Pair<Vector<Integer>, Vector<Integer>> {
fc2(x) {
x.snd().addElement(2);
}
fc2a() {
var y;
y.snd().addElement(2);
return y;
}
}
-10
View File
@@ -1,10 +0,0 @@
import java.lang.Integer;
import java.util.Vector;
public class GenTest {
main(x) {
var v = new Vector();
return 1 + v.elementAt(0);
}
}
-9
View File
@@ -1,9 +0,0 @@
class Generics {
a;
id(b) { return b; }
setA(x) {
a = x;
return a;
}
m(x,y) { x = id(y); }
}
-7
View File
@@ -1,7 +0,0 @@
import java.util.List;
class M {
void m(p, p2){
new addList().addLists(p, p2);
}
}
@@ -1,9 +0,0 @@
import java.util.Stack;
import java.util.Vector;
class OverloadingMain {
mmMain(x) { var y; return new O1().mm(y); }
}
@@ -1,20 +0,0 @@
import java.lang.Integer;
public class Overloading_Generics {
id1 (x) { return x; }
//Integer id (Integer x) { return x; }
}
class Overloading_Generics1 {
main(x) {
var olg = new Overloading_Generics();
return olg.id1(1);
}
}
@@ -1,25 +0,0 @@
import java.util.Vector;
import java.util.Stack;
class OverrideMain {
ovrMain(x) {
var overide;
overide.ovr(x);
}
}
/*
[
[(TPH L = java.util.Stack<TPH FTM>), (TPH N = java.lang.String), (TPH M = ? extends Override2), (TPH FTN, TPH FTM), (TPH K = void)],
[(TPH FTO, TPH FTP), (TPH M = ? extends Override2), (TPH N = java.lang.String), (TPH L = java.util.Stack<TPH FTP>), (TPH K = void)],
[(TPH M = ? extends Override2), (TPH N = java.lang.String), (TPH K = void), (TPH FTR, TPH FTQ), (TPH L = java.util.Vector<TPH FTQ>)],
[(TPH FTT, TPH FTS), (TPH M = ? extends Override2), (TPH L = java.util.Vector<TPH FTS>), (TPH K = void), (TPH N = java.lang.String)],
[(TPH L = java.util.Vector<TPH FTV>), (TPH M = ? extends Override2), (TPH N = java.lang.String), (TPH FTU, TPH FTV), (TPH K = void)],
[(TPH FTX, TPH FTW), (TPH M = ? extends Override2), (TPH L = java.util.Vector<TPH FTW>), (TPH K = void), (TPH N = java.lang.String)],
[(TPH M = ? extends Override2), (TPH L = java.util.Stack<TPH FTZ>), (TPH K = void), (TPH FTY, TPH FTZ), (TPH N = java.lang.String)],
[(TPH FUB, TPH FUA), (TPH K = void), (TPH M = ? extends Override2), (TPH N = java.lang.String), (TPH L = java.util.Vector<TPH FUA>)],
[(TPH N = java.lang.String), (TPH L = java.util.Vector<TPH FUC>), (TPH FUD, TPH FUC), (TPH M = ? extends Override2), (TPH K = void)],
[(TPH N = java.lang.String), (TPH FUF, TPH FUE), (TPH M = ? extends Override2), (TPH K = void), (TPH L = java.util.Vector<TPH FUE>)]]
[[(TPH M = ? extends Override2), (TPH MNX, TPH MNY), (TPH N = java.lang.String), (TPH K = void), (TPH L = java.util.Stack<TPH MNY>)], [(TPH L = java.util.Stack<TPH MOC>), (TPH N = java.lang.String), (TPH M = ? extends Override2), (TPH K = void), (TPH MOB, TPH MOC)], [(TPH M = ? extends Override2), (TPH N = java.lang.String), (TPH MNZ, TPH MOA), (TPH L = java.util.Vector<TPH MOA>), (TPH K = void)], [(TPH L = java.util.Vector<TPH MOE>), (TPH K = void), (TPH M = ? extends Override2), (TPH MOD, TPH MOE), (TPH N = java.lang.String)], [(TPH M = ? extends Override2), (TPH K = void), (TPH N = java.lang.String), (TPH MOF, TPH MOG), (TPH L = java.util.Stack<TPH MOG>)], [(TPH L = java.util.Vector<TPH MOI>), (TPH K = void), (TPH MOH, TPH MOI), (TPH M = ? extends Override2), (TPH N = java.lang.String)], [(TPH L = java.util.Vector<TPH MOK>), (TPH MOJ, TPH MOK), (TPH K = void), (TPH M = ? extends Override2), (TPH N = java.lang.String)], [(TPH MOL, TPH MOM), (TPH L = java.util.Stack<TPH MOM>), (TPH M = ? extends Override2), (TPH K = void), (TPH N = java.lang.String)], [(TPH L = java.util.Vector<TPH MOO>), (TPH MON, TPH MOO), (TPH N = java.lang.String), (TPH K = void), (TPH M = ? extends Override2)], [(TPH L = java.util.Stack<TPH MOP>), (TPH N = java.lang.String), (TPH M = ? extends Override2), (TPH MOQ, TPH MOP), (TPH K = void)]]
*/
@@ -1,11 +0,0 @@
import java.util.Vector;
import java.util.Stack;
class OverrideMainRet {
ovrMain() {
var overide;
var x;
overide.ovr(x);
return x;
}
}
-18
View File
@@ -1,18 +0,0 @@
class Pair<T, U> {
T x;
U y;
public Pair() { }
public Pair(T x, U y) {
this.x = x;
this.y = y;
}
public T fst () {
return x;
}
public U snd () {
return y;
}
}
-19
View File
@@ -1,19 +0,0 @@
import java.util.Vector;
import java.util.Stack;
class Put {
putElement(ele, v) {
v.addElement(ele);
}
putElement(ele, s) {
s.push(ele);
}
main(ele, x) {
putElement(ele, x);
}
}
-4
View File
@@ -1,4 +0,0 @@
class Test {
a;
Test b;
}
@@ -1,12 +0,0 @@
import java.util.ArrayList;
class TestSubTypless {
m(a){
var l = new ArrayList<>();
l.add(a);
return m2(l).get(0);
}
m2(a){
return m(a);
}
}
-3
View File
@@ -1,3 +0,0 @@
class Twice {
twice = f -> x -> f.apply(f.apply(x));
}
-5
View File
@@ -1,5 +0,0 @@
class Var {
var(x) { var y; }
}
@@ -1,15 +0,0 @@
import java.util.Vector;
import java.lang.Integer;
public class VectorConstAdd {
vectorAdd(v1) {
var i = 0;
var erg = new Vector<>();
while (i < v1.size()) {
erg.addElement(v1.elementAt(i) + 1);
i++;
}
return erg;
}
}
@@ -1,8 +0,0 @@
class Wildcard_Andi {
Test<? extends A> ex = new Test<>();
Test<? super A> sup = new Test<>();
}
-8
View File
@@ -1,8 +0,0 @@
import java.util.List;
class addList {
addLists(a, b){
a.add(b.get(0));
b.add(a.get(0));
}
}
@@ -1,22 +0,0 @@
import java.util.List;
import java.lang.Integer;
import java.lang.Object;
import java.lang.Boolean;
class wildcardPair {
make(l) {
var p = new Pair(l.get(0), l.get(1));
return p;
}
//<X>Boolean compare(Pair<X, X> x) { return true; }
void m(l) {
Object o = l.get(0);
//Pair<? extends Object, ? extends Object> p;
//List<?> b;
//this.compare(p); //1, type incorrect
make(l);
//this.compare(this.make(b)); //2, OK
}
}
-8
View File
@@ -1,8 +0,0 @@
import java.lang.Integer;
import java.lang.String;
public class AA {
m(Integer i) { return "AA"; }
m2(AA x) { return "AA"; }
}
@@ -1,30 +0,0 @@
import java.lang.Integer;
import java.lang.Boolean;
import java.lang.String;
import java.lang.Byte;
import java.lang.Short;
import java.lang.Long;
import java.lang.Float;
import java.lang.Double;
import java.lang.Character;
class AssignToLit {
void m(){
// String s = "Test";
// Boolean b = false;
// Byte byte1 = 5;
// Byte byte2 = 55;
// Short short1 = 5;
// Short short2 = 55;
// Integer int1 = 5;
// Integer int2 = 8888888;
// Long long1 = 1;
// Long long2 = 5;
// Long long3 = 89989898;
// Float float1 = 1;
// Float float2 = 55;
// Double d1 = 1;
// Double d2 = 55;
Character c = 'A';
}
}
-3
View File
@@ -1,3 +0,0 @@
import java.lang.Integer;
public class BB extends AA { }
@@ -1,17 +0,0 @@
import java.lang.Integer;
import java.lang.Double;
public class BinaryInMeth {
m(a){
return ++a;
}
m2(a,b){
return m(a+b);
}
m3(a) {
return m(++a);
}
}
-11
View File
@@ -1,11 +0,0 @@
import java.lang.Integer;
import java.lang.String;
public class CC extends BB {
m(Integer i) {
return "CC";
}
m2(CC x) { return "CC"; }
}
@@ -1,8 +0,0 @@
import java.lang.Integer;
public class ClassGenLam {
lam = x-> x;
// public ClassGenLam() {
// lam = x->x;
// }
}
@@ -1,6 +0,0 @@
class Cycle {
m(x, y) {
y = x;
x = y;
}
}
-4
View File
@@ -1,4 +0,0 @@
import java.lang.Integer;
public class DD extends CC { }
@@ -1,11 +0,0 @@
public class DuMethod{
method(a){
return a+a;
}
method(a){
return a;
}
}
@@ -1,8 +0,0 @@
public class EmptyMethod{
public void m1(){
System.out.println("test");
}
public void m2(){}
}
@@ -1,9 +0,0 @@
import java.lang.String;
public class Example {
public m() {
String x = "X";
return x;
}
}
@@ -1,3 +0,0 @@
public class Exceptions {
// m(Integer i) throws
}
-15
View File
@@ -1,15 +0,0 @@
import java.lang.Integer;
//import java.lang.Double;
public class Fac {
getFac(n){
var res = 1;
var i = 1;
while(i<=n) {
res = res * i;
i++;
}
return res;
}
}
@@ -1,52 +0,0 @@
import java.lang.Integer;
//import java.lang.Long;
//import java.lang.Short;
public class Faculty {
public fact;
Faculty() {
fact = (x) -> {
if (x == 1) {
return 1;
}
else {
return x * (fact.apply(x-1));
}
};
}
public getFact(x) {
return fact.apply(x);
}
}
// m (x) {
//
//// var fact = (x) -> {
//// if (x == 1) {
//// return x;
//// }
//// else {
//// return x * (fact.apply(x-1));
//// }
//// };
//// return fact;
//// var x = 13;
//// if(x>22) {
//// return 0;
//// }else if(x <1){
//// return x;
//// }else {
//// return 1;
//// }
//
// if (x < 0) {
// return 0;
// }else if(x<2) {
// return x;
// } else {
// return x * m(x-1);
// }
// }
//}
@@ -1,10 +0,0 @@
class Faculty2 {
m () {
var fact = (Integer x) -> {
return x;
};
return fact;
}
}
@@ -1,9 +0,0 @@
import java.lang.Integer;
public class Field {
public x = 5;
m(){
return x;
}
}
@@ -1,4 +0,0 @@
public class FieldTph {
a;
}
@@ -1,12 +0,0 @@
public class FieldTph2 {
a;
m(b){
b = a;
return b;
}
m2(c){
a = c;
}
}
@@ -1,26 +0,0 @@
public class FieldTphConsMeth {
a;
public FieldTphConsMeth(c) {
a = id(c);
}
id(b) {
return b;
}
setA(x) {
a = x;
return a;
}
m(x,y) {
x = id(y);
}
/*m2(x,y) {
x = setA(y);
return x;
}*/
}
@@ -1,27 +0,0 @@
import java.lang.Boolean;
public class FieldTphMMeth {
a;
public FieldTphMMeth(c,d,e) {
a = m(c,d,e);
}
m(b,d,e) {
if(e) {
return m3(b);
} else{
return m3(d);
}
}
m2(b) {
a = m3(b);
}
m3(b){
return b;
}
}
-30
View File
@@ -1,30 +0,0 @@
import java.lang.Integer;
import java.lang.Boolean;
class For{
Integer m(Integer x){
var c = x + 2;
// Boolean b = true;
// c = 5;
// c++;
// ++c;
// c--;
// --c;
// while(x<2){
// x = x +1;
// b = false;
// }
return c;
// for(int i = 0;i<10;i++) {
// x = x + 5;
// }
}
// m2(Integer x){
// if(x<2) {
// return 1;
// }else {
// return 2;
// }
// }
}
-12
View File
@@ -1,12 +0,0 @@
import java.util.Vector;
import java.lang.Integer;
import java.lang.String;
//import java.lang.Byte;
//import java.lang.Boolean;
public class FunOL {
add(f, y) {
return f.apply() + y;
}
}
-8
View File
@@ -1,8 +0,0 @@
import java.lang.Integer;
import java.util.Vector;
public class Gen{
Vector<Integer> m(Vector<Integer> v){
return v;
}
}
@@ -1,17 +0,0 @@
class Generics<B> {
Generics(B b){
}
B mt1(B b){
return mt1(b);
}
}
/*
Problem:
auto test = new List<String>();
auto test2 = new List<Integer>();
... //code, welcher möglicherweise test und test2 vertauscht
test.add("hallo");
*/
@@ -1,6 +0,0 @@
class Generics2<B extends String>{
<B extends Integer> B m1(B b){
return b;
}
}
@@ -1,57 +0,0 @@
import java.lang.Integer;
import java.lang.Long;
import java.lang.Float;
import java.lang.Double;
public class GreaterEqual {
gE(Integer a, Integer b){
var c = a>=b;
return c;
}
gE(Long a, Long b){
var c = a>=b;
return c;
}
gE(Float a, Float b){
var c = a>=b;
return c;
}
gE(Double a, Double b){
var c = a>=b;
return c;
}
gE(Long a, Integer b){
var c = a>=b;
return c;
}
gE(Float a, Integer b){
var c = a>=b;
return c;
}
gE(Double a, Integer b){
var c = a>=b;
return c;
}
gE(Float a, Long b){
var c = a>=b;
return c;
}
gE(Double a, Long b){
var c = a>=b;
return c;
}
gE(Double a, Float b){
var c = a>=b;
return c;
}
}

Some files were not shown because too many files have changed in this diff Show More