forked from m-zakeri/CodART
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.py
64 lines (45 loc) · 1.77 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
"""
The main module of CodART
-changelog
-- Add C++ backend support
"""
__version__ = '0.2.0'
__author__ = 'Morteza'
import argparse
from antlr4 import *
from refactorings.encapsulate_field import EncapsulateFiledRefactoringListener
from refactorings.extract_class import ExtractClassRefactoringListener
from refactorings.gen.Java9_v2Lexer import Java9_v2Lexer
from refactorings.gen.Java9_v2Parser import Java9_v2Parser
from java9speedy.parser import sa_java9_v2
def main(args):
# Step 1: Load input source into stream
stream = FileStream(args.file, encoding='utf8')
# input_stream = StdinStream()
# Step 2: Create an instance of AssignmentStLexer
lexer = Java9_v2Lexer(stream)
# Step 3: Convert the input source into a list of tokens
token_stream = CommonTokenStream(lexer)
# Step 4: Create an instance of the AssignmentStParser
parser = Java9_v2Parser(token_stream)
parser.getTokenStream()
# Step 5: Create parse tree
# 1. Python backend --> Low speed
# parse_tree = parser.compilationUnit()
# 2. C++ backend --> high speed
parse_tree = sa_java9_v2.parse(stream, 'compilationUnit', None)
quit()
# Step 6: Create an instance of AssignmentStListener
my_listener = ExtractClassRefactoringListener(common_token_stream=token_stream, class_identifier='Worker')
# return
walker = ParseTreeWalker()
walker.walk(t=parse_tree, listener=my_listener)
with open('input.refactored.java', mode='w', newline='') as f:
f.write(my_listener.token_stream_rewriter.getDefaultText())
if __name__ == '__main__':
argparser = argparse.ArgumentParser()
argparser.add_argument(
'-n', '--file',
help='Input source', default=r'../grammars/Test.java')
args = argparser.parse_args()
main(args)