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
+30
-5
No files matched your search
@@ -18,6 +18,6 @@ logStat: 'LOG' STRING ';' ;
|
||||
repeatStat: 'REPEAT' NUMBER '{' stat+ '}' ;
|
||||
|
||||
ID_PREFIX: '// STUDENT ID:' ;
|
||||
NUMBER: [0-9]+ ;
|
||||
STRING: '"' .*? '"' {self.text = self.text[1:-1]} ;
|
||||
NUMBER: [1-9]+ ;
|
||||
STRING: '"' .*? '"' ;
|
||||
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,13 +5,11 @@ from RobotLangParser import RobotLangParser
|
||||
from RobotLangVisitorUser import RobotLangVisitorUser
|
||||
|
||||
def main(argv):
|
||||
# Determine if reading from a file or standard input
|
||||
if len(argv) == 1:
|
||||
inpstream = StdinStream()
|
||||
else:
|
||||
inpname = argv[1]
|
||||
inpstream = FileStream(inpname)
|
||||
# Lexer analyses the characters
|
||||
lexer = RobotLangLexer(inpstream)
|
||||
#Create a stream of tokens
|
||||
tokstream = CommonTokenStream(lexer)
|
||||
@@ -19,7 +17,7 @@ def main(argv):
|
||||
parser = RobotLangParser(tokstream)
|
||||
#Start parsing from the top rule
|
||||
tree = parser.prog()
|
||||
|
||||
#execute script
|
||||
visitor = RobotLangVisitorUser()
|
||||
visitor.visit(tree)
|
||||
|
||||
|
||||
Reference in new issue
Block a user