class SyntaxAnalysis extends LexicalAnalysis
program ::= classdecl classdecl ::= CLASS identifier IS { memberdecl } END CLASS memberdecl ::= vardecl ';' | METHOD identifier IS methodbody vardecl ::= identifier { ',' identifier } ':' identifier methodbody ::= { vardecl ';' } BEGIN statements END METHOD statements ::= { statement } statement ::= READ memberaccess ';' | WRITE expression ';' | IF relation THEN statements END IF | WHILE relation DO statements END WHILE | memberaccess [ ':=' expression ] ';' relation ::= expression [ ( '=' | '#' | '<' | '>' | '<=' | '>=' ) expression ] expression ::= term { ( '+' | '-' ) term } term ::= factor { ( '*' | '/' | MOD ) factor } factor ::= '-' factor | memberaccess memberaccess ::= literal { '.' varorcall } literal ::= number | character | NULL | SELF | NEW identifier | '(' expression ')' | varorcall varorcall ::= identifierDaraus wird der Syntaxbaum aufgebaut, dessen Wurzel die Klasse
Program
ist.symbol
Constructor and Description |
---|
SyntaxAnalysis(java.lang.String fileName,
boolean printSymbols)
Konstruktor.
|
Modifier and Type | Method and Description |
---|---|
private ClassDeclaration |
classdecl()
Die Methode parsiert eine Klassendeklaration entsprechend der oben angegebenen
Syntax und liefert diese zurück.
|
private Identifier |
expectIdent()
Die Methode überprüft, ob das aktuelle Symbol ein Bezeichner ist.
|
private ResolvableIdentifier |
expectResolvableIdent()
Die Methode überprüft, ob das aktuelle Symbol ein Bezeichner ist.
|
private void |
expectSymbol(Symbol.Id id)
Die Methode überprüft, ob das aktuelle Symbol das erwartete ist.
|
private Expression |
expression()
Die Methode parsiert einen Ausdruck entsprechend der oben angegebenen
Syntax und liefert ihn zurück.
|
private Expression |
factor()
Die Methode parsiert einen Faktor entsprechend der oben angegebenen
Syntax und liefert den Ausdruck zurück.
|
private Expression |
literal()
Die Methode parsiert ein Literal, die Erzeugung eines Objekts, einen
geklammerten Ausdruck oder einen einzelnen Zugriff auf eine Variable,
ein Attribut oder eine Methode entsprechend der oben angegebenen
Syntax und liefert den Ausdruck zurück.
|
private Expression |
memberAccess()
Die Methode parsiert den Zugriff auf ein Objektattribut bzw. eine
Objektmethode entsprechend der oben angegebenen Syntax und liefert
den Ausdruck zurück.
|
private void |
memberdecl(java.util.LinkedList<VarDeclaration> attributes,
java.util.LinkedList<MethodDeclaration> methods)
Die Methode parsiert die Deklaration eines Attributs bzw. einer Methode
entsprechend der oben angegebenen Syntax und hängt sie an eine von
zwei Listen an.
|
private void |
methodbody(java.util.LinkedList<VarDeclaration> vars,
java.util.LinkedList<Statement> statements)
Die Methode parsiert die Deklaration eines Methodenrumpfes entsprechend der
oben angegebenen Syntax.
|
(package private) Program |
parse()
Die Methode parsiert den Quelltext und liefert die Wurzel des
Syntaxbaums zurück.
|
private Expression |
relation()
Die Methode parsiert eine Relation entsprechend der oben angegebenen
Syntax und liefert den Ausdruck zurück.
|
private void |
statement(java.util.LinkedList<Statement> statements)
Die Methode parsiert eine Anweisung entsprechend der oben angegebenen
Syntax und hängt sie an eine Liste an.
|
private void |
statements(java.util.LinkedList<Statement> statements)
Die Methode parsiert eine Folge von Anweisungen entsprechend der
oben angegebenen Syntax und hängt sie an eine Liste an.
|
private Expression |
term()
Die Methode parsiert einen Term entsprechend der oben angegebenen
Syntax und liefert den Ausdruck zurück.
|
private void |
unexpectedSymbol()
Die Methode erzeugt einen "Unerwartetes Symbol"-Fehler.
|
private void |
vardecl(java.util.LinkedList<VarDeclaration> vars,
boolean isAttribute)
Die Methode parsiert die Deklaration eines Attributs bzw. einer Variablen
entsprechend der oben angegebenen Syntax und hängt sie an eine Liste an.
|
nextSymbol
SyntaxAnalysis(java.lang.String fileName, boolean printSymbols) throws CompileException, java.io.FileNotFoundException, java.io.IOException
fileName
- Der Name des Quelltexts.printSymbols
- Die lexikalische Analyse gibt die erkannten
Symbole auf der Konsole aus.CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.FileNotFoundException
- Der Quelltext wurde nicht gefunden.java.io.IOException
- Ein Lesefehler ist aufgetreten.private void unexpectedSymbol() throws CompileException
CompileException
- Die entsprechende Fehlermeldung.private void expectSymbol(Symbol.Id id) throws CompileException, java.io.IOException
id
- Das erwartete Symbol.CompileException
- Ein unerwartetes Symbol wurde gelesen.java.io.IOException
- Ein Lesefehler ist aufgetreten.private Identifier expectIdent() throws CompileException, java.io.IOException
CompileException
- Ein unerwartetes Symbol wurde gelesen.java.io.IOException
- Ein Lesefehler ist aufgetreten.private ResolvableIdentifier expectResolvableIdent() throws CompileException, java.io.IOException
CompileException
- Ein unerwartetes Symbol wurde gelesen.java.io.IOException
- Ein Lesefehler ist aufgetreten.private ClassDeclaration classdecl() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private void memberdecl(java.util.LinkedList<VarDeclaration> attributes, java.util.LinkedList<MethodDeclaration> methods) throws CompileException, java.io.IOException
attributes
- Die Liste der Attributdeklarationen der aktuellen Klasse.methods
- Die Liste der Methodendeklarationen der aktuellen Klasse.CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private void vardecl(java.util.LinkedList<VarDeclaration> vars, boolean isAttribute) throws CompileException, java.io.IOException
vars
- Die Liste der Attributdeklarationen der aktuellen Klasse oder
der Variablen der aktuellen Methode.isAttribute
- Ist die Variable ein Attribut?.CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private void methodbody(java.util.LinkedList<VarDeclaration> vars, java.util.LinkedList<Statement> statements) throws CompileException, java.io.IOException
vars
- Die Liste der lokalen Variablendeklarationen der aktuellen Methode.statements
- Die Liste der Anweisungen der aktuellen Methode.CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private void statements(java.util.LinkedList<Statement> statements) throws CompileException, java.io.IOException
statements
- Die Liste der Anweisungen.CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private void statement(java.util.LinkedList<Statement> statements) throws CompileException, java.io.IOException
statements
- Die Liste der Anweisungen.CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private Expression relation() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private Expression expression() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private Expression term() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private Expression factor() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private Expression memberAccess() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.private Expression literal() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.Program parse() throws CompileException, java.io.IOException
CompileException
- Der Quelltext entspricht nicht der Syntax.java.io.IOException
- Ein Lesefehler ist aufgetreten.