Add TreesUser class for improved tree representation and update grammar rules

This commit is contained in:
bobbert committed 2026-04-27 18:11:49 +01:00
1 parent 5b36426dc4
commit ad6935723e
3 files changed
+33 -8

No files matched your search

+2 -2
View File
@@ -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 ;
+27
View File
@@ -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
+4 -6
View File
@@ -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)