Coverage for src/pyensae/languages/tree_string_listener.py: 30%

27 statements  

« prev     ^ index     » next       coverage.py v7.2.7, created at 2023-07-03 02:16 +0200

1""" 

2@file 

3@brief Helpers around language grammar. 

4This module requires `antlr4 <https://pypi.python.org/pypi/antlr4-python3-runtime/>`_. 

5""" 

6from antlr4 import ParseTreeListener 

7 

8 

9class TreeStringListener(ParseTreeListener): 

10 

11 """ 

12 This class is an attempt to run through the tree and convert it into 

13 a string. 

14 """ 

15 

16 def __init__(self, parser): 

17 """ 

18 constructor 

19 

20 @param parser parser used to parse the code 

21 """ 

22 ParseTreeListener.__init__(self) 

23 self.buffer = [] 

24 self.level = 0 

25 self.parser = parser 

26 

27 def visitTerminal(self, node): 

28 """ 

29 event 

30 """ 

31 text = (" " * self.level) + "v " + str(node.symbol) 

32 self.buffer.append(text) 

33 

34 def visitErrorNode(self, node): 

35 """ 

36 event 

37 """ 

38 text = (" " * self.level) + "error: " + str(node) 

39 self.buffer.append(text) 

40 

41 def enterEveryRule(self, ctx): 

42 """ 

43 event 

44 """ 

45 if "ruleIndex" in ctx.__dict__: 

46 text = (" " * self.level) + "+ " + \ 

47 self.parser.ruleNames[ 

48 ctx.ruleIndex] + ", LT(1)=" + self.parser._input.LT(1).text 

49 else: 

50 text = (" " * self.level) + "+ " + \ 

51 ", LT(1)=" + self.parser._input.LT(1).text 

52 self.buffer.append(text) 

53 self.level += 1 

54 

55 def exitEveryRule(self, ctx): 

56 """ 

57 event 

58 """ 

59 self.level -= 1 

60 if "ruleIndex" in ctx.__dict__: 

61 text = (" " * self.level) + "- " + \ 

62 self.parser.ruleNames[ctx.ruleIndex] + \ 

63 ", LT(1)=" + self.parser._input.LT(1).text 

64 else: 

65 text = (" " * self.level) + "- " + \ 

66 ", LT(1)=" + self.parser._input.LT(1).text 

67 self.buffer.append(text) 

68 

69 def __str__(self): 

70 """ 

71 usual 

72 """ 

73 return "\n".join(self.buffer)