MiniJava-Sprachbericht Version 3.1

Ähnliche Dokumente
Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Teil 5 - Java. Programmstruktur Operatoren Schlüsselwörter Datentypen

Grundlagen der Modellierung und Programmierung, Übung

Java Lexikalische Struktur

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

3. Java - Sprachkonstrukte I

5 Grundlagen der Java-Syntax

Java-Schulung Grundlagen

Einführung in die Programmierung I. 2.0 Einfache Java Programme. Thomas R. Gross. Department Informatik ETH Zürich

Java für Anfänger Teil 2: Java-Syntax. Programmierkurs Manfred Jackel

3. Java - Sprachkonstrukte I

3. Java - Sprachkonstrukte I

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Java - Programmierung - Prozedurale Programmierung 1

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Java für Anfänger Teil 4: Anweisungen. Programmierkurs Manfred Jackel

Programmieren und Problemlösen Java-Sprachkonstrukte. Java-Sprachkonstrukte. Übung Altersberechner. Namen und Bezeichner. Namen und Bezeichner

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Arbeitsblätter für die Lehrveranstaltung OOP JAVA 1

Java I Vorlesung Imperatives Programmieren

Implementieren von Klassen

Ein erstes Java-Programm

1. Der Einstieg in Java. Was heißt Programmieren?

Einführung in die Programmierung. 2.1 Methoden. Thomas R. Gross. Department Informatik ETH Zürich

Martin Unold INFORMATIK. Geoinformatik und Vermessung

C# - Einführung in die Programmiersprache Methoden. Leibniz Universität IT Services

Programmierung. Grundlagen. Tina Wegener, Ralph Steyer. 2. Ausgabe, 1. Aktualisierung, April 2014

Einführung in C. EDV1-04C-Einführung 1

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Vorkurs Informatik WiSe 16/17

2 Programmieren in Java I noch ohne Nachbearbeitung

Programmieren I + II Regeln der Code-Formatierung

Vorsichtige Programmierer verwenden Inkrement- Operatoren nicht in komplizierteren Ausdrücken

Javakurs FSS Lehrstuhl Stuckenschmidt. Tag 1 - Variablen und Kontrollstrukturen

Ausdrücke in Scala. Funktionale Programmierung. Christoph Knabe FB VI

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben. Aufgabe 1.1. Alle Aufgaben beziehen sich auf Java.

Methoden. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Gedächtnis. Während der Abarbeitung eines Algorithmus müssen sich Dinge gemerkt werden bzw. auf Dingen wird gerechnet. Zugriff.

Anweisungen zur Ablaufsteuerung

Grundelemente objektorientierter Sprachen (1)

Programmieren I + II Regeln der Code-Formatierung

Programmieren in Java -Eingangstest-

Grundelemente objektorientierter Sprachen (1)

1. Der Einstieg in Java

CoMa 04. Java II. Paul Boeck. 7. Mai Humboldt Universität zu Berlin Institut für Mathematik. Paul Boeck CoMa 04 7.

Einführung Datentypen Verzweigung Schleifen. Java Crashkurs. Kim-Manuel Klein May 4, 2015

Methoden und Wrapperklassen

Inhaltsverzeichnis. Grundlagen und Einführung (1. Band) 1

1. Erste Schritte 2. Einfache Datentypen 3. Anweisungen und Kontrollstrukturen 4. Verifikation 5. Reihungen (Arrays)

Welche Informatik-Kenntnisse bringen Sie mit?

PK-Einstufungstest. 1. Allgemeine Multiple-Choice-Aufgaben

Dr. Lars Hildebrand Fakultät für Informatik Technische Universität Dortmund

2 Imperative Sprachkonzepte

Vorkurs Informatik WiSe 17/18

Ausdrücke der Programmiersprache Java

Variablen. int Flugzeug. float. I write code Hund. String. long. Borchers: Programmierung für Alle (Java), WS 06/07 Kapitel

Programmierkurs. Manfred Jackel

JAVA 06: Gemischte einfache Fragen zu Java

Einführung in die Programmierung 1

Java Zusammenfassung. Basisdatentypen ganzzahlig: Byte, Short, Integer, Long Fließkomma: Float, Double Zeichen: Character Wahrheitswerte: Boolean

Die Klasse MiniJava ist in der Datei MiniJava.java definiert:

Einstieg in die Informatik mit Java

Beispiele für Ausdrücke. Der imperative Kern. Der imperative Kern. Imperativer Kern - Kontrollstrukturen. Deklarationen mit Initialisierung

Einfache Datentypen in JAVA

Institut für Programmierung und Reaktive Systeme. Java 7. Markus Reschke

Institut für Programmierung und Reaktive Systeme 25. Januar Programmieren I. Übungsklausur

Einstieg in die Informatik mit Java

Fragenkatalog ESOP WS 16/17

Elementare Konzepte von

Einführung in C. Alexander Batoulis. 5. Mai Fakutltät IV Technische Universität Berlin

3. Anweisungen und Kontrollstrukturen

Computeranwendung und Programmierung (CuP)

12 Abstrakte Klassen, finale Klassen und Interfaces

SE2-6. Übung Johannes Bürdek

Grundsymbole. Kapitel 2: Einfache Programme. Liste aller Java-Schlüsselwörter. Schlüsselwörter und Struktursymbole. Lexikalische Einheiten

Smalltalk vs. Java c Chris Burkert Smalltalk versus Java

Einstieg in die Informatik mit Java

Java Spickzettel von Panjutorials.de

Transkript:

MiniJava-Sprachbericht Version 3.1 Matthias Braun Jürgen Graf 26. April 2010 1 Einleitung MiniJava ist eine Untermenge der Programmiersprache Java. Daher können Programme in MiniJava von jedem Java Übersetzer zu Bytecode übersetzt werden. Die Sprache enthält viele für den Übersetzerbau interessante Konzepte wie rekursive Methodenaufrufe. Trotzdem erlaubt ihre Kompaktheit eine Implementierung im Rahmen eines universitären Praktikums. In MiniJava wird auf viele Eigenschaften von Java, die das Laufzeitsystem und die Übersetzung unnötig erschweren, wie z.b. Ausnahmen und Mehrfädigkeit, verzichtet. MiniJava ist, wie Java, eine objektorientierte Sprache. Sie verfügt jedoch nur über wenige Anweisungen sowie wenige Ausdrücken und benötigt nur ein sehr einfaches Laufzeitsystem. 2 Eigenschaften 2.1 Typsystem MiniJava kennt als Basistyp Wahrheitswerte boolean und Ganzzahlen int. int-werte sind als vorzeichenbehaftete 32Bit-Zahlen im 2er-Komplement kodiert. Der Typ boolean umfasst die Werte true und false. Benutzerdefinierte Typen sind Klassen, Reihungen und Methodentypen. Klassen enthalten Felder und Methoden. Reihungen können auf den Basis- und Benutzerdefinierte Typen basieren. Methoden besitzen einen Methodentyp, der die Anzahl und Typen der Parameter sowie den Typ des Rückgabewerts, falls die Methode Werte zurückgibt, angibt. Werden keine Werte zurückgeliefert, so wird void als Platzhalter für den Typ des Rückgabewerts verwendet. Methoden mit gleichem Bezeichner aber verschiedenen Parameter-/Ergebnistypen sind nicht erlaubt (keine polymorphen Aufrufe). Eine Methode und ein Feld mit gleichem Namen in der gleichen Klasse ist allerdings erlaubt. Beim Aufruf von Methoden müssen die Typen der Argumente denen der Parameter entsprechen. 1

2.2 Laufzeitsystem MiniJava besitzt ein minimalistisches Laufzeitsystem ohne große Standardbibliotheken. Die Ausführung eines Programms beginnt an der immer vorhandenen main-methode. Es gibt keine automatische Speicherverwaltung. MiniJava Programme können zwar Speicher anfordern, dieser kann aber weder manuell freigegeben werden noch werden nicht mehr benötigte Objekte automatisch entfernt. Die Standardbibliothek enthält als eine einzige Funktion System.out.println, die eine Ganzzahl gefolgt von einem Zeilenumbruch ausgibt. 3 Übersetzung MiniJava Programme bestehen aus einer Eingabedatei die das komplette zu übersetzende Programm enthält. Die Eingabe ist im ASCII Zeichensatz kodiert. 3.1 Wortschatz MiniJava besteht aus den folgenden Wörtern: Leerraum: Dazu zählen Leerzeichen, Zeilenumbruch, Wagenrücklauf und Tabulator. Kommentar: Die Zeichenkette /* gefolgt von beliebigen Zeichen bis zu einem abschließenden */. Kommentare können nicht geschachtelt werden, weitere /* innerhalb eines Kommentars werden ignoriert; 1 beim ersten */ ist der Kommentar stets zu Ende. Schlüsselwörter sind: abstract, assert, boolean, break, byte, case, catch, char, class, const, continue, default, double, do, else, enum, extends, false, finally, final, float, for, goto, if, implements, import, instanceof, interface, int, long, native, new, null, package, private, protected, public, return, short, static, strictfp, super, switch, synchronized, this, throws, throw, transient, true, try, void, volatile, while Operatoren und Separatoren sind:!=,!, (, ), *=, *, ++, +=, +,,, -=, --, -,., /=, /, :, ;, <<=, <<, <=, <, ==, =, >=, >>=, >>>=, >>>, >>, >,?, %=, %, &=, &&, &, [, ], ^=, ^, {, }, ~, =,, IDENT: Ein Bezeichner, er beginnt mit einem Buchstaben oder Unterstrich gefolgt von beliebig vielen Buchstaben, Unterstrichen oder Ziffern in beliebiger Reihenfolge. Schlüsselwörter sind keine IDENTs. 1 Die eleganteste Lösung ist bei /* innerhalb des Kommentars eine Warnung auszugeben. 2

INTEGER_LITERAL: Dezimale Zahlenliterale beginnen mit einer der Ziffern von 1 bis 9, gefolgt von beliebig vielen weiteren Ziffern 0 bis 9. Eine einzelne 0 ist ebenso eine Zahlenliteral. Kommentare und Leerzeichen haben keine Bedeutung. Ihre Funktion ist die Trennung von Wörtern, Dokumentation des Quelltexts und sie sorgen für ästhetische Programme. Sie werden für syntaktische Belange ignoriert. 3.2 Syntax Nichtterminale sind kursiv gedruckt. Beispiel: Expression. Terminale fett in Schreibmaschinenschrift. Beispiel: public. X? bedeutet kein oder genau ein Vorkommen von X. X* bedeutet beliebig viele Vorkommen von X (insbesondere auch kein Vorkommen). ( ) wird zum Klammern von syntaktischen Gruppen benutzt. Program ClassDeclaration* ClassDeclaration class IDENT { ClassMember* } ClassMember Field Method MainMethod Field public Type IDENT ; MainMethod public static void IDENT ( String [ ] IDENT ) Block Method public Type IDENT ( Parameters? ) Block Parameters Parameter Parameter, Parameters Parameter Type IDENT Type Type [ ] int boolean void IDENT Statement Block EmptyStatement IfStatement ExpressionStatement WhileStatement ReturnStatement Block { BlockStatement* } BlockStatement Statement LocalVariableDeclarationStatement LocalVariableDeclarationStatement Type IDENT (= Expression)? ; 3

EmptyStatement ; WhileStatement while ( Expression ) Statement IfStatement if ( Expression ) Statement (else Statement)? ExpressionStatement Expression ; ReturnStatement return Expression? ; Expression AssignmentExpression AssignmentExpression LogicalOrExpression (= AssignmentExpression)? LogicalOrExpression (LogicalOrExpression )? LogicalAndExpression LogicalAndExpression (LogicalAndExpression &&)? EqualityExpression EqualityExpression (EqualityExpression (==!=))? RelationalExpression RelationalExpression (RelationalExpression (< <= > >=))? AdditiveExpression AdditiveExpression (AdditiveExpression (+ -))? MultiplicativeExpression MultiplicativeExpression (MultiplicativeExpression (* / %))? UnaryExpression UnaryExpression PostfixExpression (! -) UnaryExpression PostfixExpression PrimaryExpression (PostfixOp)* PostfixOp MethodInvocation FieldAccess ArrayAccess MethodInvocation. IDENT ( Arguments ) FieldAccess. IDENT ArrayAccess [ Expression ] Arguments (Expression (, Expression)*)? PrimaryExpression null false true INTEGER_LITERAL IDENT IDENT ( Arguments ) this ( Expression ) NewObjectExpression NewArrayExpression NewObjectExpression new Type ( ) NewArrayExpression new Type [ Expression ] ([ ])* 4

4 Semantik Die Semantik von MiniJava entspricht bis auf kleine Ausnahmen der Semantik der Sprache Java. Diese ist in [GJSB00] beschrieben. Ausnahmen: In einem Programm darf nur eine einzige public static Methode mit Namen main existieren. Die main(string[] args) -Methode darf nicht aufgerufen werden. Der Parameter der Methode existiert zwar, ein Zugriff darauf ist allerdings nicht erlaubt. Der Ausdruck System.out.println(Expression) ist ein Sonderfall: Ist kein Bezeichner System bekannt, so erzeugt dieser Ausdruck einen Aufruf der System.out.println Funktion in der Standardbibltiothek. Die Definite Assignment-Regeln von Java müssen nicht beachtet werden. Werden uninitialisierte lokale Variablen benutzt, so ist das Verhalten nicht spezifiziert. Felder von Objekten sind, wie von Java gewohnt, mit 0, false bzw. null initialisiert. Ausnahmen treten nicht auf. Das Verhalten in Situationen wie dem Zugriff auf null-referenzen oder Division durch 0 ist nicht spezifiziert. Es gibt keinen Vererbungsmechanismus und es existiert keine Klasse, die allen anderen zugrunde liegt (also kein System.lang.Object). Das Verhalten beim Zugriff auf eine Reihung außerhalb deren Grenzen ist nicht spezifiziert. Literatur [GJSB00] James Gosling, Bill Joy, Guy Steele, and Gilad Bracha. Java Language Specification, Second Edition: The Java Series. Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA, 2000. 5 Änderungen Version 3.1 Fehler in Grammatik behoben (InnerExpression statt UnaryExpression) Version 3.0 Fehlende Schlüsselwörter true, false, null eingefügt. Fehlende Ausdrücke zum Array-Zugriff eingefügt und Methodenaufruf und Feldzugriff überarbeitet. 5