Left Precedence
Corrected left precedence rules when a right precedence rule is not available (or parenthesis (woah)).master
parent
690dc9d562
commit
242ca887f9
Binary file not shown.
|
@ -500,10 +500,11 @@ public class Parser {
|
|||
* @throws IOException
|
||||
*/
|
||||
private Expression parseExpression() throws IOException {
|
||||
|
||||
Expression e = parseCExpression();
|
||||
while(peek(1).spelling.equals("||")) {
|
||||
Operator o = new Operator(accept(Token.TYPE.BINOP), null);
|
||||
e = new BinaryExpr(o, e, parseExpression(), null);
|
||||
e = new BinaryExpr(o, e, parseCExpression(), null);
|
||||
}
|
||||
|
||||
return e;
|
||||
|
@ -515,10 +516,11 @@ public class Parser {
|
|||
* @throws IOException
|
||||
*/
|
||||
private Expression parseCExpression() throws IOException {
|
||||
|
||||
Expression e = parseEExpression();
|
||||
while(peek(1).spelling.equals("&&")) {
|
||||
Operator o = new Operator(accept(Token.TYPE.BINOP), null);
|
||||
e = new BinaryExpr(o, e, parseCExpression(), null);
|
||||
e = new BinaryExpr(o, e, parseEExpression(), null);
|
||||
}
|
||||
|
||||
return e;
|
||||
|
@ -530,10 +532,11 @@ public class Parser {
|
|||
* @throws IOException
|
||||
*/
|
||||
private Expression parseEExpression() throws IOException {
|
||||
|
||||
Expression e = parseRExpression();
|
||||
while(peek(1).spelling.equals("==") || peek(1).spelling.equals("!=")) {
|
||||
Operator o = new Operator(accept(Token.TYPE.BINOP), null);
|
||||
e = new BinaryExpr(o, e, parseEExpression(), null);
|
||||
e = new BinaryExpr(o, e, parseRExpression(), null);
|
||||
}
|
||||
|
||||
return e;
|
||||
|
@ -545,11 +548,12 @@ public class Parser {
|
|||
* @throws IOException
|
||||
*/
|
||||
private Expression parseRExpression() throws IOException {
|
||||
|
||||
Expression e = parseAExpression();
|
||||
while(peek(1).spelling.equals("<") || peek(1).spelling.equals("<=")
|
||||
|| peek(1).spelling.equals(">") || peek(1).spelling.equals(">=")) {
|
||||
Operator o = new Operator(accept(Token.TYPE.BINOP), null);
|
||||
e = new BinaryExpr(o, e, parseRExpression(), null);
|
||||
e = new BinaryExpr(o, e, parseAExpression(), null);
|
||||
}
|
||||
|
||||
return e;
|
||||
|
@ -561,10 +565,11 @@ public class Parser {
|
|||
* @throws IOException
|
||||
*/
|
||||
private Expression parseAExpression() throws IOException {
|
||||
|
||||
Expression e = parseMExpression();
|
||||
while(peek(1).spelling.equals("+") || peek(1).spelling.equals("-")) {
|
||||
Operator o = new Operator(accept(Token.TYPE.BINOP), null);
|
||||
e = new BinaryExpr(o, e, parseAExpression(), null);
|
||||
e = new BinaryExpr(o, e, parseMExpression(), null);
|
||||
}
|
||||
|
||||
return e;
|
||||
|
@ -576,10 +581,11 @@ public class Parser {
|
|||
* @throws IOException
|
||||
*/
|
||||
private Expression parseMExpression() throws IOException {
|
||||
|
||||
Expression e = parseSingleExpression();
|
||||
while(peek(1).spelling.equals("*") || peek(1).spelling.equals("/")) {
|
||||
Operator o = new Operator(accept(Token.TYPE.BINOP), null);
|
||||
e = new BinaryExpr(o, e, parseMExpression(), null);
|
||||
e = new BinaryExpr(o, e, parseSingleExpression(), null);
|
||||
}
|
||||
|
||||
return e;
|
||||
|
|
|
@ -0,0 +1,98 @@
|
|||
package tester;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.FileInputStream;
|
||||
import java.util.Scanner;
|
||||
|
||||
/* Automated regression tester for Checkpoint 2 tests
|
||||
* Created by Max Beckman-Harned
|
||||
* Put your tests in "tests/pa2_tests" folder in your Eclipse workspace directory
|
||||
* If you preface your error messages / exceptions with ERROR or *** then they will be displayed if they appear during processing
|
||||
*/
|
||||
|
||||
public class Checkpoint2 {
|
||||
|
||||
private static class ReturnInfo {
|
||||
int returnCode;
|
||||
String ast;
|
||||
public ReturnInfo(int _returnCode, String _ast) {
|
||||
returnCode = _returnCode;
|
||||
ast = _ast;
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) throws IOException, InterruptedException {
|
||||
File testDir = new File(System.getProperty("java.class.path")
|
||||
+ "/../tests/pa2_tests");
|
||||
int failures = 0;
|
||||
for (File x : testDir.listFiles()) {
|
||||
if (x.getName().endsWith("out") || x.getName().startsWith("."))
|
||||
continue;
|
||||
ReturnInfo info = runTest(x);
|
||||
int returnCode = info.returnCode;
|
||||
String ast = info.ast;
|
||||
if (x.getName().indexOf("pass") != -1) {
|
||||
if (returnCode == 0) {
|
||||
String actualAST = getAST(new FileInputStream(x.getPath() + ".out"));
|
||||
if (actualAST.equals(ast))
|
||||
System.out.println(x.getName() + " parsed successfully and has a correct AST!");
|
||||
else {
|
||||
System.err.println(x.getName() + " parsed successfully but has an incorrect AST!");
|
||||
failures++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
failures++;
|
||||
System.err.println(x.getName()
|
||||
+ " failed to be parsed!");
|
||||
}
|
||||
} else {
|
||||
if (returnCode == 4)
|
||||
System.out.println(x.getName() + " failed successfully!");
|
||||
else {
|
||||
System.err.println(x.getName() + " did not fail properly!");
|
||||
failures++;
|
||||
}
|
||||
}
|
||||
}
|
||||
System.out.println(failures + " failures in all.");
|
||||
}
|
||||
|
||||
private static ReturnInfo runTest(File x) throws IOException, InterruptedException {
|
||||
ProcessBuilder pb = new ProcessBuilder("java", "miniJava.Compiler", x.getPath()).directory(new File(System.getProperty("java.class.path")));
|
||||
pb.redirectErrorStream(true);
|
||||
Process p = pb.start();
|
||||
|
||||
String ast = getAST(p.getInputStream());
|
||||
p.waitFor();
|
||||
int exitValue = p.exitValue();
|
||||
return new ReturnInfo(exitValue, ast);
|
||||
}
|
||||
|
||||
|
||||
public static String getAST(InputStream stream) {
|
||||
Scanner scan = new Scanner(stream);
|
||||
String ast = null;
|
||||
while (scan.hasNextLine()) {
|
||||
String line = scan.nextLine();
|
||||
if (line.equals("======= AST Display =========================")) {
|
||||
line = scan.nextLine();
|
||||
while(scan.hasNext() && !line.equals("=============================================")) {
|
||||
ast += line + "\n";
|
||||
line = scan.nextLine();
|
||||
}
|
||||
}
|
||||
if (line.startsWith("*** "))
|
||||
System.out.println(line);
|
||||
if (line.startsWith("ERROR")) {
|
||||
System.out.println(line);
|
||||
while(scan.hasNext())
|
||||
System.out.println(scan.next());
|
||||
}
|
||||
}
|
||||
scan.close();
|
||||
return ast;
|
||||
}
|
||||
}
|
|
@ -1,10 +1,7 @@
|
|||
// Simple PA2 Example
|
||||
class PA2 {
|
||||
// PA1 lex binop pass
|
||||
class id {
|
||||
void p(){
|
||||
int x = 1 + 2 * 3 / 4 > 5 >= 6 < 7 <= 8 != 9 && 0 || 1;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean c;
|
||||
private static id[] test;
|
||||
|
||||
public static void main(String[] args) {
|
||||
int x = -1 || 2 + (8 <= 8) == -6 && (9 > 10) * 3;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,2 @@
|
|||
// PA1 lex comment fail
|
||||
class id {} /* unterminated
|
|
@ -0,0 +1,2 @@
|
|||
// PA1 lex ill char fail
|
||||
class NonTokens{} #
|
|
@ -0,0 +1,7 @@
|
|||
// PA1 lex binop fail
|
||||
class id {
|
||||
void p(){
|
||||
int x = 1 &| 0;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 lex trailing start char fail
|
||||
class Almost {
|
||||
public static void main (String [] args) {
|
||||
} // nothing follows next slash
|
||||
} /
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 lex comment fail
|
||||
class IllegalComment {
|
||||
public static void main (String [] args) {
|
||||
} // nothing follows final *
|
||||
}/* ****
|
|
@ -0,0 +1,6 @@
|
|||
// PA1 parse field decl fail
|
||||
class id {
|
||||
public void [] x;
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse local decl fail
|
||||
class id {
|
||||
void foo() {
|
||||
Nonesuch x[2] = 3;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse local decl fail
|
||||
class id {
|
||||
public void f(){
|
||||
Ref [] x(33);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse local decl fail
|
||||
class id {
|
||||
public void f(){
|
||||
int x;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
// PA1 parse local decl fail
|
||||
class idfail {
|
||||
public void foo () {
|
||||
int [] x[3] = null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA1 parse local decl fail
|
||||
class LValueFail {
|
||||
void foo () {
|
||||
true = false;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA1 parse expr fail
|
||||
class IllegalExpressions {
|
||||
void main () {
|
||||
z = a+!=b;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA1 parse stmt fail
|
||||
class IllegalStmt {
|
||||
void main () {
|
||||
this;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA1 parse ref fail
|
||||
class IllegalExpressions {
|
||||
void foo () {
|
||||
a b [c] = d; // not ok
|
||||
}
|
||||
}
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse decl fail
|
||||
class Test {
|
||||
|
||||
void p() {
|
||||
boolean [] a = b;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse call fail
|
||||
class Test {
|
||||
|
||||
void p(int a, boolean b) {
|
||||
int p(a,b);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse decl fail
|
||||
class Test {
|
||||
|
||||
void p(int a) {
|
||||
Test [ ] x.y = a;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse assign fail
|
||||
class Test {
|
||||
|
||||
void p(int a) {
|
||||
Test [ ] = a * 3;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse call fail
|
||||
class Test {
|
||||
|
||||
void p(int a) {
|
||||
c.p(2,3)[3] = 4;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse assign fail
|
||||
class Test {
|
||||
|
||||
void p() {
|
||||
x.y() = z;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse decl fail
|
||||
class Test {
|
||||
|
||||
void p() {
|
||||
c [] d b = new int[4];
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 local var decl fail
|
||||
class A {
|
||||
int p(){A A A = b;}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
// PA2 statement after return
|
||||
class A {
|
||||
int p(){
|
||||
return 2;
|
||||
x = 3;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 missing first parameter name
|
||||
class A {
|
||||
int p(A [], int b){}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 illegal array type
|
||||
class A {
|
||||
int p(void [] x){}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 parameter decl fail
|
||||
class A {
|
||||
void foo(x){}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
// PA2 local var decl fail
|
||||
class A {
|
||||
|
||||
A p(){
|
||||
private int stuff = 3;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,7 @@
|
|||
// PA2 stmt fail
|
||||
class A {
|
||||
void p(){
|
||||
if x
|
||||
int x = 3;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 stmt fail
|
||||
class A {
|
||||
void p(){
|
||||
this;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 lex fail
|
||||
class A {
|
||||
void f(){
|
||||
p = p & !p;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 expr fail
|
||||
class A {
|
||||
void f(){
|
||||
c = a <=< b;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 predecrement fail
|
||||
class A {
|
||||
void f(){
|
||||
c = --b;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 expr fail
|
||||
class A {
|
||||
void f(){
|
||||
c = ++b;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 stmt fail
|
||||
class A {
|
||||
private void p(){
|
||||
return;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 expr fail
|
||||
class A {
|
||||
void p(){
|
||||
int b = c / * d /* */;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// PA2 expr fail
|
||||
class A {
|
||||
void p(){
|
||||
int b = p ! p;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 incorrect reference
|
||||
class A {
|
||||
void p(){ x = a.this; }
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 incorrect reference
|
||||
class A {
|
||||
void p(){ x = this[i]; }
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 incorrect reference
|
||||
class A {
|
||||
void p(){ x = a[i][j]; }
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 incorrect new expr
|
||||
class A {
|
||||
void p(){ x = new void [3]; }
|
||||
}
|
|
@ -0,0 +1,4 @@
|
|||
// PA2 invalid type in parameter declaration
|
||||
class A {
|
||||
void p(void [] x){ }
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
// PA1 lex id pass
|
||||
class id {}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,3 @@
|
|||
// PA1 lex comment pass
|
||||
class // comment $$ followed by \r\n
|
||||
id {}
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,2 @@
|
|||
// PA1 lex comment pass
|
||||
class id {} // trailing comment terminated by \r\n
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,3 @@
|
|||
// PA1 lex comment pass
|
||||
class /*/$*/ id {}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,4 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,12 @@
|
|||
// PA1 lex whitespace including tab
|
||||
class Test {
|
||||
/* multiple comments between
|
||||
*/
|
||||
|
||||
// tokens
|
||||
|
||||
/**//* is OK */
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "Test" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,3 @@
|
|||
// PA1 lex comment pass
|
||||
class // comment followed by \n only
|
||||
id {}
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,3 @@
|
|||
// PA1 lex comment pass
|
||||
class // comment followed by \r only
|
||||
id {}
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,2 @@
|
|||
// PA1 lex comment pass
|
||||
class id {} // unterminated comment - no trailing \r\n
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,2 @@
|
|||
// PA1 lex comment pass
|
||||
class id {} /* no trailing \r\n */
|
|
@ -0,0 +1,8 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 parse field decl pass
|
||||
class id {
|
||||
public static Type x;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [1]
|
||||
. . (public static) FieldDecl
|
||||
. . ClassType
|
||||
. . "Type" classname
|
||||
. . "x" fieldname
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 parse field decl pass
|
||||
class id {
|
||||
private static Type x;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [1]
|
||||
. . (private static) FieldDecl
|
||||
. . ClassType
|
||||
. . "Type" classname
|
||||
. . "x" fieldname
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 parse field decl pass
|
||||
class id {
|
||||
static Type x;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [1]
|
||||
. . (public static) FieldDecl
|
||||
. . ClassType
|
||||
. . "Type" classname
|
||||
. . "x" fieldname
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 parse field decl pass
|
||||
class id {
|
||||
Type x;
|
||||
}
|
||||
|
|
@ -0,0 +1,12 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [1]
|
||||
. . (public) FieldDecl
|
||||
. . ClassType
|
||||
. . "Type" classname
|
||||
. . "x" fieldname
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 parse field decl pass
|
||||
class id {
|
||||
static void x;
|
||||
}
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [1]
|
||||
. . (public static) FieldDecl
|
||||
. . VOID BaseType
|
||||
. . "x" fieldname
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 parse method decl pass
|
||||
class id {
|
||||
public static void main(String[] args){}
|
||||
}
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public static) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "main" methodname
|
||||
. . ParameterDeclList [1]
|
||||
. . . ParameterDecl
|
||||
. . . ArrayType
|
||||
. . . ClassType
|
||||
. . . "String" classname
|
||||
. . . "args"parametername
|
||||
. . StmtList [0]
|
||||
=============================================
|
|
@ -0,0 +1,5 @@
|
|||
// PA1 parse method decl pass
|
||||
class id {
|
||||
private int f(int x, boolean b) {return 3;}
|
||||
}
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "id" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (private) MethodDecl
|
||||
. . INT BaseType
|
||||
. . "f" methodname
|
||||
. . ParameterDeclList [2]
|
||||
. . . ParameterDecl
|
||||
. . . INT BaseType
|
||||
. . . "x"parametername
|
||||
. . . ParameterDecl
|
||||
. . . BOOLEAN BaseType
|
||||
. . . "b"parametername
|
||||
. . StmtList [0]
|
||||
. . LiteralExpr
|
||||
. . "3" IntLiteral
|
||||
=============================================
|
|
@ -0,0 +1,9 @@
|
|||
// PA1 parse classdecls pass
|
||||
class MainClass {
|
||||
public static void main (String [] args) {}
|
||||
}
|
||||
|
||||
class OfItsOwn {
|
||||
int A_01;
|
||||
} // class OfItsOwn
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [2]
|
||||
. ClassDecl
|
||||
. "MainClass" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public static) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "main" methodname
|
||||
. . ParameterDeclList [1]
|
||||
. . . ParameterDecl
|
||||
. . . ArrayType
|
||||
. . . ClassType
|
||||
. . . "String" classname
|
||||
. . . "args"parametername
|
||||
. . StmtList [0]
|
||||
. ClassDecl
|
||||
. "OfItsOwn" classname
|
||||
. FieldDeclList [1]
|
||||
. . (public) FieldDecl
|
||||
. . INT BaseType
|
||||
. . "A_01" fieldname
|
||||
. MethodDeclList [0]
|
||||
=============================================
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse new pass
|
||||
class MainClass {
|
||||
public static void main (String [] args) {
|
||||
SecondSubClass newobj = new SecondSubClass ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "MainClass" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public static) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "main" methodname
|
||||
. . ParameterDeclList [1]
|
||||
. . . ParameterDecl
|
||||
. . . ArrayType
|
||||
. . . ClassType
|
||||
. . . "String" classname
|
||||
. . . "args"parametername
|
||||
. . StmtList [1]
|
||||
. . . VarDeclStmt
|
||||
. . . VarDecl
|
||||
. . . ClassType
|
||||
. . . "SecondSubClass" classname
|
||||
. . . "newobj" varname
|
||||
. . . NewObjectExpr
|
||||
. . . ClassType
|
||||
. . . "SecondSubClass" classname
|
||||
=============================================
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse new pass
|
||||
class Foo {
|
||||
void bar() {
|
||||
int[] newarr = new int[20];
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "Foo" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "bar" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [1]
|
||||
. . . VarDeclStmt
|
||||
. . . VarDecl
|
||||
. . . ArrayType
|
||||
. . . INT BaseType
|
||||
. . . "newarr" varname
|
||||
. . . NewArrayExpr
|
||||
. . . INT BaseType
|
||||
. . . LiteralExpr
|
||||
. . . "20" IntLiteral
|
||||
=============================================
|
|
@ -0,0 +1,23 @@
|
|||
// PA1 parse methods pass
|
||||
class MainClass {
|
||||
public static void main (String [] args) {
|
||||
}
|
||||
}
|
||||
class SuperClass
|
||||
{
|
||||
public void setWorth (int worth){
|
||||
integer = worth;
|
||||
}
|
||||
|
||||
public int getWorth (){
|
||||
return this.integer;
|
||||
}
|
||||
|
||||
public void setTruth (boolean truth){
|
||||
bool = truth;
|
||||
}
|
||||
|
||||
public int getTruth (){
|
||||
return this.bool;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,68 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [2]
|
||||
. ClassDecl
|
||||
. "MainClass" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public static) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "main" methodname
|
||||
. . ParameterDeclList [1]
|
||||
. . . ParameterDecl
|
||||
. . . ArrayType
|
||||
. . . ClassType
|
||||
. . . "String" classname
|
||||
. . . "args"parametername
|
||||
. . StmtList [0]
|
||||
. ClassDecl
|
||||
. "SuperClass" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [4]
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "setWorth" methodname
|
||||
. . ParameterDeclList [1]
|
||||
. . . ParameterDecl
|
||||
. . . INT BaseType
|
||||
. . . "worth"parametername
|
||||
. . StmtList [1]
|
||||
. . . AssignStmt
|
||||
. . . IdRef
|
||||
. . . "integer" Identifier
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "worth" Identifier
|
||||
. . (public) MethodDecl
|
||||
. . INT BaseType
|
||||
. . "getWorth" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [0]
|
||||
. . RefExpr
|
||||
. . QualifiedRef
|
||||
. . "integer" Identifier
|
||||
. . ThisRef
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "setTruth" methodname
|
||||
. . ParameterDeclList [1]
|
||||
. . . ParameterDecl
|
||||
. . . BOOLEAN BaseType
|
||||
. . . "truth"parametername
|
||||
. . StmtList [1]
|
||||
. . . AssignStmt
|
||||
. . . IdRef
|
||||
. . . "bool" Identifier
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "truth" Identifier
|
||||
. . (public) MethodDecl
|
||||
. . INT BaseType
|
||||
. . "getTruth" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [0]
|
||||
. . RefExpr
|
||||
. . QualifiedRef
|
||||
. . "bool" Identifier
|
||||
. . ThisRef
|
||||
=============================================
|
|
@ -0,0 +1,21 @@
|
|||
// PA1 parse parse pass
|
||||
class MainClass {
|
||||
public static void main (String [] args) {
|
||||
SecondSubClass newobj = new SecondSubClass ();
|
||||
}
|
||||
}
|
||||
class SuperClass
|
||||
{
|
||||
private void fillup (boolean open, int [] jar, int marble, int upto) {
|
||||
|
||||
int index = 0;
|
||||
if (open == true) {
|
||||
while ( index < upto ) {
|
||||
ownjar [index] = jar [index];
|
||||
jar [index] = marble;
|
||||
} // while
|
||||
} // if
|
||||
} // fillup
|
||||
|
||||
} // class SuperClass
|
||||
|
|
@ -0,0 +1,99 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [2]
|
||||
. ClassDecl
|
||||
. "MainClass" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public static) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "main" methodname
|
||||
. . ParameterDeclList [1]
|
||||
. . . ParameterDecl
|
||||
. . . ArrayType
|
||||
. . . ClassType
|
||||
. . . "String" classname
|
||||
. . . "args"parametername
|
||||
. . StmtList [1]
|
||||
. . . VarDeclStmt
|
||||
. . . VarDecl
|
||||
. . . ClassType
|
||||
. . . "SecondSubClass" classname
|
||||
. . . "newobj" varname
|
||||
. . . NewObjectExpr
|
||||
. . . ClassType
|
||||
. . . "SecondSubClass" classname
|
||||
. ClassDecl
|
||||
. "SuperClass" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (private) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "fillup" methodname
|
||||
. . ParameterDeclList [4]
|
||||
. . . ParameterDecl
|
||||
. . . BOOLEAN BaseType
|
||||
. . . "open"parametername
|
||||
. . . ParameterDecl
|
||||
. . . ArrayType
|
||||
. . . INT BaseType
|
||||
. . . "jar"parametername
|
||||
. . . ParameterDecl
|
||||
. . . INT BaseType
|
||||
. . . "marble"parametername
|
||||
. . . ParameterDecl
|
||||
. . . INT BaseType
|
||||
. . . "upto"parametername
|
||||
. . StmtList [2]
|
||||
. . . VarDeclStmt
|
||||
. . . VarDecl
|
||||
. . . INT BaseType
|
||||
. . . "index" varname
|
||||
. . . LiteralExpr
|
||||
. . . "0" IntLiteral
|
||||
. . . IfStmt
|
||||
. . . BinaryExpr
|
||||
. . . "==" Operator
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "open" Identifier
|
||||
. . . LiteralExpr
|
||||
. . . "true" BooleanLiteral
|
||||
. . . BlockStmt
|
||||
. . . StatementList [1]
|
||||
. . . . WhileStmt
|
||||
. . . . BinaryExpr
|
||||
. . . . "<" Operator
|
||||
. . . . RefExpr
|
||||
. . . . IdRef
|
||||
. . . . "index" Identifier
|
||||
. . . . RefExpr
|
||||
. . . . IdRef
|
||||
. . . . "upto" Identifier
|
||||
. . . . BlockStmt
|
||||
. . . . StatementList [2]
|
||||
. . . . . AssignStmt
|
||||
. . . . . IndexedRef
|
||||
. . . . . RefExpr
|
||||
. . . . . IdRef
|
||||
. . . . . "index" Identifier
|
||||
. . . . . IdRef
|
||||
. . . . . "ownjar" Identifier
|
||||
. . . . . RefExpr
|
||||
. . . . . IndexedRef
|
||||
. . . . . RefExpr
|
||||
. . . . . IdRef
|
||||
. . . . . "index" Identifier
|
||||
. . . . . IdRef
|
||||
. . . . . "jar" Identifier
|
||||
. . . . . AssignStmt
|
||||
. . . . . IndexedRef
|
||||
. . . . . RefExpr
|
||||
. . . . . IdRef
|
||||
. . . . . "index" Identifier
|
||||
. . . . . IdRef
|
||||
. . . . . "jar" Identifier
|
||||
. . . . . RefExpr
|
||||
. . . . . IdRef
|
||||
. . . . . "marble" Identifier
|
||||
=============================================
|
|
@ -0,0 +1,6 @@
|
|||
// PA1 parse Stmt this ref pass
|
||||
class LegalStmt {
|
||||
void main () {
|
||||
this(3,4);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,20 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "LegalStmt" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "main" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [1]
|
||||
. . . CallStmt
|
||||
. . . ThisRef
|
||||
. . . ExprList [2]
|
||||
. . . . LiteralExpr
|
||||
. . . . "3" IntLiteral
|
||||
. . . . LiteralExpr
|
||||
. . . . "4" IntLiteral
|
||||
=============================================
|
|
@ -0,0 +1,12 @@
|
|||
// PA1 parse refs pass
|
||||
class Test {
|
||||
|
||||
void p() {
|
||||
a = true;
|
||||
a [b] = c;
|
||||
p ();
|
||||
a.b[3] = d;
|
||||
c.p(e);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "Test" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "p" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [5]
|
||||
. . . AssignStmt
|
||||
. . . IdRef
|
||||
. . . "a" Identifier
|
||||
. . . LiteralExpr
|
||||
. . . "true" BooleanLiteral
|
||||
. . . AssignStmt
|
||||
. . . IndexedRef
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "b" Identifier
|
||||
. . . IdRef
|
||||
. . . "a" Identifier
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "c" Identifier
|
||||
. . . CallStmt
|
||||
. . . IdRef
|
||||
. . . "p" Identifier
|
||||
. . . ExprList [0]
|
||||
. . . AssignStmt
|
||||
. . . IndexedRef
|
||||
. . . LiteralExpr
|
||||
. . . "3" IntLiteral
|
||||
. . . QualifiedRef
|
||||
. . . "b" Identifier
|
||||
. . . IdRef
|
||||
. . . "a" Identifier
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "d" Identifier
|
||||
. . . CallStmt
|
||||
. . . QualifiedRef
|
||||
. . . "p" Identifier
|
||||
. . . IdRef
|
||||
. . . "c" Identifier
|
||||
. . . ExprList [1]
|
||||
. . . . RefExpr
|
||||
. . . . IdRef
|
||||
. . . . "e" Identifier
|
||||
=============================================
|
|
@ -0,0 +1,11 @@
|
|||
// PA1 parse decl pass
|
||||
class Test {
|
||||
|
||||
int [] a;
|
||||
Test [] t;
|
||||
|
||||
void p() {
|
||||
void x = y;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "Test" classname
|
||||
. FieldDeclList [2]
|
||||
. . (public) FieldDecl
|
||||
. . ArrayType
|
||||
. . INT BaseType
|
||||
. . "a" fieldname
|
||||
. . (public) FieldDecl
|
||||
. . ArrayType
|
||||
. . ClassType
|
||||
. . "Test" classname
|
||||
. . "t" fieldname
|
||||
. MethodDeclList [1]
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "p" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [1]
|
||||
. . . VarDeclStmt
|
||||
. . . VarDecl
|
||||
. . . VOID BaseType
|
||||
. . . "x" varname
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "y" Identifier
|
||||
=============================================
|
|
@ -0,0 +1,9 @@
|
|||
// PA1 parse refs pass
|
||||
class Test {
|
||||
|
||||
void p() {
|
||||
A a = 23;
|
||||
boolean b = c;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "Test" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "p" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [2]
|
||||
. . . VarDeclStmt
|
||||
. . . VarDecl
|
||||
. . . ClassType
|
||||
. . . "A" classname
|
||||
. . . "a" varname
|
||||
. . . LiteralExpr
|
||||
. . . "23" IntLiteral
|
||||
. . . VarDeclStmt
|
||||
. . . VarDecl
|
||||
. . . BOOLEAN BaseType
|
||||
. . . "b" varname
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "c" Identifier
|
||||
=============================================
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse assign pass
|
||||
class Test {
|
||||
|
||||
void p() {
|
||||
a = b;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
======= AST Display =========================
|
||||
Package
|
||||
ClassDeclList [1]
|
||||
. ClassDecl
|
||||
. "Test" classname
|
||||
. FieldDeclList [0]
|
||||
. MethodDeclList [1]
|
||||
. . (public) MethodDecl
|
||||
. . VOID BaseType
|
||||
. . "p" methodname
|
||||
. . ParameterDeclList [0]
|
||||
. . StmtList [1]
|
||||
. . . AssignStmt
|
||||
. . . IdRef
|
||||
. . . "a" Identifier
|
||||
. . . RefExpr
|
||||
. . . IdRef
|
||||
. . . "b" Identifier
|
||||
=============================================
|
|
@ -0,0 +1,8 @@
|
|||
// PA1 parse call pass
|
||||
class Test {
|
||||
|
||||
void p(int a, boolean b) {
|
||||
p(a,b);
|
||||
}
|
||||
}
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue