87 lines
2.0 KiB
Java
87 lines
2.0 KiB
Java
/* **********************************************
|
|
* Duale Hochschule Baden-Württemberg Karlsruhe
|
|
* Prof. Dr. Jörn Eisenbiegler
|
|
*
|
|
* Vorlesung Übersetzerbau
|
|
* Praxis X Abstiegsparser
|
|
*
|
|
* **********************************************
|
|
*/
|
|
|
|
package de.dhbw.compiler.xparser;
|
|
|
|
import java.io.PrintWriter;
|
|
import java.io.StringReader;
|
|
import java.util.Scanner;
|
|
|
|
|
|
public class XParserMain {
|
|
|
|
private static final String TESTMIN = "program beginend;\n"+
|
|
"begin\n"+
|
|
"end.";
|
|
|
|
private static final String TESTXmin1 =
|
|
"program xmin1;\n"+
|
|
"begin\n"+
|
|
" y := 25+2*x-6*x;\n"+
|
|
" if x<y then \n"+
|
|
" begin\n" +
|
|
" x:= -3/6*(y+2);\n"+
|
|
" if y<x then y:=y+3 else y:=y+4;\n"+
|
|
" end\n" +
|
|
" else\n" +
|
|
" begin\n" +
|
|
" if y<x then y:=y+3;\n"+
|
|
" x:= y*(y-x)/y;\n"+
|
|
" end;\n" +
|
|
" y := x*y;\n"+
|
|
"end.";
|
|
|
|
private static final String TEST =
|
|
"program test2;\n"+
|
|
" x : int;\n"+
|
|
" y : float;\n"+
|
|
" z : string;\n"+
|
|
"begin\n"+
|
|
" x := 4+5+6.2;\n"+
|
|
" y := 3.56+1.2e3+45.e-67+4e34+3E-1;\n"+
|
|
" z := \"Hello \\\"World\\\"\" + \":\";\n"+
|
|
" z := \"Peter\" + 4;\n"+
|
|
" if 2<3 then abc := 5 else abc := 7;\n"+
|
|
" while (x>y) y := y+1;\n"+
|
|
" begin\n"+
|
|
" for (x:=1; x<6; x:=x+1) y:=y+2;\n"+
|
|
" end;\n"+
|
|
"end.";
|
|
|
|
private static final String BEISPIELFOLIEN =
|
|
"program test5;\n"+
|
|
" read x : int;\n"+
|
|
" print y : float;\n"+
|
|
" z : int;\n"+
|
|
"begin\n"+
|
|
" while (x<4) begin\n"+
|
|
" for (z:=0; z<4; z:=z+1) x:=x+2;\n"+
|
|
" if x=4 then begin\n"+
|
|
" x:=z*(x+2);\n"+
|
|
" x:=x+10;\n"+
|
|
" end else y:=100.e-3;\n"+
|
|
" end;\n"+
|
|
"end.\n";
|
|
|
|
public static void main(String[] args) throws Exception {
|
|
|
|
//TODO Initialize scanner and parser
|
|
//TODO Call parser
|
|
//TODO Output: Tree, count of tokens and comparisons
|
|
StringReader reader = new StringReader(BEISPIELFOLIEN);
|
|
JFlexXScanner scanner = new JFlexXScanner(reader);
|
|
TokenReader tokenReader = new TokenReader(scanner);
|
|
XParser parser = new XParser(tokenReader);
|
|
|
|
parser.parseProgram();
|
|
}
|
|
|
|
}
|