mirror of
https://github.com/mudabbir-ahmad/UNI-PROG3-CW2-DYOPL.git
synced 2026-10-07 20:00:20 +00:00
Add TreesUser class for improved tree representation and update grammar rules
This commit is contained in:
1 parent
5b36426dc4
commit
ad6935723e
3 files changed
+33
-8
No files matched your search
@@ -18,6 +18,6 @@ logStat: 'LOG' STRING ';' ;
|
|||||||
repeatStat: 'REPEAT' NUMBER '{' stat+ '}' ;
|
repeatStat: 'REPEAT' NUMBER '{' stat+ '}' ;
|
||||||
|
|
||||||
ID_PREFIX: '// STUDENT ID:' ;
|
ID_PREFIX: '// STUDENT ID:' ;
|
||||||
NUMBER: [0-9]+ ;
|
NUMBER: [1-9]+ ;
|
||||||
STRING: '"' .*? '"' {self.text = self.text[1:-1]} ;
|
STRING: '"' .*? '"' ;
|
||||||
WS: [ \t\r\n]+ -> skip ;
|
WS: [ \t\r\n]+ -> skip ;
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
from antlr4.Utils import escapeWhitespace
|
||||||
|
from antlr4.tree.Tree import Tree
|
||||||
|
from antlr4.tree.Trees import Trees
|
||||||
|
|
||||||
|
# need forward declaration
|
||||||
|
Parser = None
|
||||||
|
|
||||||
|
class TreesUser(Trees):
|
||||||
|
|
||||||
|
# Print out a whole tree in prettier form
|
||||||
|
# Based on Trees.toStringTree()
|
||||||
|
# indent is the number of indents to use in the display
|
||||||
|
@classmethod
|
||||||
|
def PrettyPrint(cls, t:Tree, ruleNames:list=None, recog:Parser=None, indent:int=0):
|
||||||
|
# indentation is the indent to actually display
|
||||||
|
indentation = ''
|
||||||
|
for n in range(indent):
|
||||||
|
indentation += ' '
|
||||||
|
if recog is not None:
|
||||||
|
ruleNames = recog.ruleNames
|
||||||
|
s = escapeWhitespace(cls.getNodeText(t, ruleNames), False)
|
||||||
|
retval = indentation + s + "\n"
|
||||||
|
if t.getChildCount()>0:
|
||||||
|
# we have children to deal with
|
||||||
|
for i in range(0, t.getChildCount()):
|
||||||
|
retval += cls.PrettyPrint(t.getChild(i), ruleNames, indent=indent+1)
|
||||||
|
return retval
|
||||||
@@ -5,21 +5,19 @@ from RobotLangParser import RobotLangParser
|
|||||||
from RobotLangVisitorUser import RobotLangVisitorUser
|
from RobotLangVisitorUser import RobotLangVisitorUser
|
||||||
|
|
||||||
def main(argv):
|
def main(argv):
|
||||||
# Determine if reading from a file or standard input
|
|
||||||
if len(argv) == 1:
|
if len(argv) == 1:
|
||||||
inpstream = StdinStream()
|
inpstream = StdinStream()
|
||||||
else:
|
else:
|
||||||
inpname = argv[1]
|
inpname = argv[1]
|
||||||
inpstream = FileStream(inpname)
|
inpstream = FileStream(inpname)
|
||||||
# Lexer analyses the characters
|
|
||||||
lexer = RobotLangLexer(inpstream)
|
lexer = RobotLangLexer(inpstream)
|
||||||
# Create a stream of tokens
|
#Create a stream of tokens
|
||||||
tokstream = CommonTokenStream(lexer)
|
tokstream = CommonTokenStream(lexer)
|
||||||
# Parser produces the abstract syntax tree
|
#Parser produces the abstract syntax tree
|
||||||
parser = RobotLangParser(tokstream)
|
parser = RobotLangParser(tokstream)
|
||||||
# Start parsing from the top rule
|
#Start parsing from the top rule
|
||||||
tree = parser.prog()
|
tree = parser.prog()
|
||||||
|
#execute script
|
||||||
visitor = RobotLangVisitorUser()
|
visitor = RobotLangVisitorUser()
|
||||||
visitor.visit(tree)
|
visitor.visit(tree)
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user