Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
# studious-java
JAVA compiler implementation in python

Instructions .pdf file ('report') to execute can be found in: "/milestone1/doc".
1 change: 1 addition & 0 deletions milestone1/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,4 @@ src/ast
.vscode/
src/*.dot
src/*.ps
ast*
4 changes: 2 additions & 2 deletions milestone1/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ all:

dev: clean
clear
python ./src/parse.py ./test/test1.java -o src/ast.dot
python ./src/parse.py -i ./tests/test_1.java -o src/ast.dot -v

dev-g: dev
dot -Tps src/ast.dot -o src/ast.ps
Expand All @@ -21,5 +21,5 @@ vgraph:

clean:
rm -rf src/__pycache__
rm -f src/parsetab.py src/parser.out src/parsetab.pyc src/*.dot src/*.ps src/ast
rm -f src/parsetab.py src/parser.out src/parsetab.py src/*.dot src/*.ps ast* src/ast

8 changes: 7 additions & 1 deletion milestone1/README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,10 @@
# studious-java
JAVA compiler implementation in python

Instructions file ('report') to execute can be found in: "/milestone1/doc".
Instructions .pdf file ('report') to execute can be found in: "/doc".

Team Members:

Harshit Raj (200433)
Kumar Arpit (200532)
Akshan Agrawal (180061)
Binary file modified milestone1/doc/report.pdf
Binary file not shown.
8 changes: 0 additions & 8 deletions milestone1/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,2 @@
black==23.1.0
click==8.1.3
graphviz==0.20.1
mypy-extensions==1.0.0
packaging==23.0
pathspec==0.11.0
platformdirs==3.0.0
ply==3.11
tomli==2.0.1

10 changes: 10 additions & 0 deletions milestone1/sh.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
python src/parse.py --input tests/test_1.java --verbose
python src/parse.py --input tests/test_2.java --verbose
python src/parse.py --input tests/test_3.java --verbose
python src/parse.py --input tests/test_4.java --verbose
python src/parse.py --input tests/test_5.java --verbose
python src/parse.py --input tests/test_6.java --verbose
python src/parse.py --input tests/test_7.java --verbose
python src/parse.py --input tests/test_8.java --verbose
python src/parse.py --input tests/test_9.java --verbose
python src/parse.py --input tests/test_10.java --verbose
2 changes: 1 addition & 1 deletion milestone1/src/dot.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ def tree_gen_helper(tree, ast, child_id, parent_id, count):
return update_id


def tree_gen(ast, filename="AST"):
def tree_gen(ast, filename="ast"):
""" ".dot format"""
tree = Digraph(format="dot")

Expand Down
72 changes: 0 additions & 72 deletions milestone1/src/dot_edit.py

This file was deleted.

6 changes: 5 additions & 1 deletion milestone1/src/lexer.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@

tokens = reserved + (
# Literal {IntegerLiteral}|{FloatingPointLiteral}|{BooleanLiteral}|{CharacterLiteral}|{StringLiteral}|{TextBlock}|{NullLiteral}
"FLOATING_LITERAL_REDUCED_POINT",
"INTEGER_LITERAL_OCTAL",
"INTEGER_LITERAL_HEXADEC",
"INTEGER_LITERAL_DEC",
Expand Down Expand Up @@ -209,7 +210,10 @@


# Implementations of the lexer rules

def t_FLOATING_LITERAL_REDUCED_POINT(t):
r'[-+]?[0-9]+(\.([0-9]+)?([eE][-+]?[0-9]+)?|[eE][-+]?[0-9]+)[dfDF]?'
t.value = str(t.value)
return t

def t_INTEGER_LITERAL_OCTAL(t):
r"0[0-7](?:_*[0-7])*[lL]?"
Expand Down
28 changes: 19 additions & 9 deletions milestone1/src/parse.py
Original file line number Diff line number Diff line change
Expand Up @@ -735,7 +735,7 @@ def p_ArrayCreationExpression(p):
def p_BetaAlphaDimExpr(p):
"""BetaAlphaDimExpr : AlphaDimExpr
| empty"""
p[0] = p[1]
p[0] = ("BetaAlphaDimExpr",) + tuple(p[-len(p) + 1 :])


def p_AlphaDimExpr(p):
Expand Down Expand Up @@ -966,7 +966,7 @@ def p_Literal(p):
| INTEGER_LITERAL_HEXADEC
| INTEGER_LITERAL_DEC
| INTEGER_LITERAL_BINAR
| FLOATING_POINT_LITERAL
| FLOATING_LITERAL_REDUCED_POINT
| BOOLEAN_LITERAL
| CHARACTER_LITERAL
| STRING_LITERAL
Expand All @@ -977,7 +977,7 @@ def p_Literal(p):

def p_empty(p):
"empty :"
p[0] = None
p[0] = ("",)


def p_error(p):
Expand All @@ -989,23 +989,33 @@ def p_error(p):

def getArgs():
parser = argparse.ArgumentParser()
parser.add_argument("input", type=str, default=None, help="Input file")
parser.add_argument("-o", "--output", type=str, default="AST", help="Output file")
parser.add_argument("-r", "--reduce", action="store_true", help="Reduce AST")
parser.add_argument("-i", "--input", type=str, default=None, help="Input file")
parser.add_argument("-o", "--output", type=str, default="ast", help="Output file")
parser.add_argument("-a", "--all", action="store_true", help="Show Entire Parse Tree")
parser.add_argument("-v", "--verbose", action="store_true", help="Verbose Output")
return parser


if __name__ == "__main__":
args = getArgs().parse_args()
if args.verbose:
print("Input file: {}".format(args.input))
print("Output file: {}".format(args.output))
if args.all:
print("Generating Complete Parse Tree")
else:
print("Generating AST")
if args.input == None:
print("No input file specified")
print("Use -h or --help for help")
else:
with open(str(args.input), "r+") as file:
data = file.read()
tree = yacc.parse(data)
if args.output[-4:] == ".dot":
args.output = args.output[:-4]
if args.reduce:
tree_gen(tree_reduce(tree), args.output)
else:
if args.all:
tree_gen(tree, args.output)
else:
tree_gen(tree_reduce(tree), args.output)
print("Dot file generated: {}.dot".format(args.output))
6 changes: 3 additions & 3 deletions milestone1/tests/test_10.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ public static void main(String[] args) {
System.out.println("Hello World!");
}

public int assignmnet() {
int x = 105 + 205;
x += 16;
public double assignmnet() {
double x = 10.5 + 20.5;
x += 1.6;
return x;
}
}
2 changes: 1 addition & 1 deletion milestone1/tests/test_2.java
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ class Node {

public Node(int value) {
value = value;
next = null;
next = 36.33f;
}

public int getValue() {
Expand Down