S
sunny71
Hallo,
Ich habe mit dem Demo-Tool AST-Explorer gespielt.
Es gibt die CompilationUnit.
Hier gibt es folgendes Attribut: ASTNode.NodeList types
in types werden alle Informationen zu der übergebenen Klasse gespeichert, also in so ner Art Baumstruktur angelegt.
Im Prinzip weiss ich wie die Knoten angelegt werden, doch fehlen mir noch Details.
Was ich bisher rausgefunden habe:
int act = START_STATE;
this.stateStackTop = -1;
//dem stack werden beispielsweise solche Values hinzugefügt
767, 1233, 8358, 9638, 734, 2105, dabei spielt dann stateStackTop eine Rolle.
this.stack[this.stateStackTop] = act;
mit act = tAction(act, this.currentToken);
// hier werden die oben genannten values ermittelt....wobei dann später entschieden wird,
// welcher if-zweig weiterbearbeitet wird.
oder in
es gibt da eine Methode
Parser.initTables....in der folgende arrays term_action, term_check und base_action initialisiert werden.
die Arrays werden aus "parser1.rsc" gefüllt.
In diesem Verzeichnis ...org.eclipse.jdt.core\src\org\eclipse\jdt\internal\compiler\parser\
Jetzt die Frage: weiß jemand etwas über die Dateien?
Vielen Dank im voraus
Ich habe mit dem Demo-Tool AST-Explorer gespielt.
Es gibt die CompilationUnit.
Hier gibt es folgendes Attribut: ASTNode.NodeList types
in types werden alle Informationen zu der übergebenen Klasse gespeichert, also in so ner Art Baumstruktur angelegt.
Im Prinzip weiss ich wie die Knoten angelegt werden, doch fehlen mir noch Details.
Was ich bisher rausgefunden habe:
int act = START_STATE;
this.stateStackTop = -1;
//dem stack werden beispielsweise solche Values hinzugefügt
767, 1233, 8358, 9638, 734, 2105, dabei spielt dann stateStackTop eine Rolle.
this.stack[this.stateStackTop] = act;
mit act = tAction(act, this.currentToken);
// hier werden die oben genannten values ermittelt....wobei dann später entschieden wird,
// welcher if-zweig weiterbearbeitet wird.
Code:
if (act == ERROR_ACTION || this.restartRecovery) {
int errorPos = this.scanner.currentPosition;
if (!this.hasReportedError) {
this.hasError = true;
}
if (resumeOnSyntaxError()) {
if (act == ERROR_ACTION)
this.lastErrorEndPosition = errorPos;
act = START_STATE;
this.stateStackTop = -1;
this.currentToken = getFirstToken();
continue ProcessTerminals;
}
act = ERROR_ACTION;
break ProcessTerminals;
}
oder in
Code:
if (act <= NUM_RULES) {
System.out.println("if (act <= NUM_RULES)");
this.stateStackTop--;
System.out.println("stateStackTop:"+stateStackTop);
} else if (act > ERROR_ACTION) { /* shift-reduce */
consumeToken(this.currentToken);
if (this.currentElement != null)
this.recoveryTokenCheck();
try {
this.currentToken = this.scanner.getNextToken();
} catch (InvalidInputException e) {
if (!this.hasReportedError) {
this.problemReporter().scannerError(this, e.getMessage());
this.hasReportedError = true;
}
this.lastCheckPoint = this.scanner.currentPosition;
this.restartRecovery = true;
}
if (this.statementRecoveryActivated) {
jumpOverTypeAfterReduce = true;
}
act -= ERROR_ACTION;
} else {
if (act < ACCEPT_ACTION) { /* shift */
System.out.println("Parser.parse() if (act < ACCEPT_ACTION) currentToken:"+this.currentToken);
consumeToken(this.currentToken);
if (this.currentElement != null)
this.recoveryTokenCheck();
try {
this.currentToken = this.scanner.getNextToken();
} catch (InvalidInputException e) {
if (!this.hasReportedError) {
this.problemReporter().scannerError(this, e.getMessage());
this.hasReportedError = true;
}
this.lastCheckPoint = this.scanner.currentPosition;
this.restartRecovery = true;
}
if (this.statementRecoveryActivated) {
this.jumpOverType();
}
continue ProcessTerminals;
}
break ProcessTerminals;
}
es gibt da eine Methode
Parser.initTables....in der folgende arrays term_action, term_check und base_action initialisiert werden.
Code:
lhs = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
rhs = readByteTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
term_action = readTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
term_check = readByteTable(prefix + (++i) + ".rsc"); //$NON-NLS-1$
die Arrays werden aus "parser1.rsc" gefüllt.
In diesem Verzeichnis ...org.eclipse.jdt.core\src\org\eclipse\jdt\internal\compiler\parser\
Jetzt die Frage: weiß jemand etwas über die Dateien?
Vielen Dank im voraus