File: keepws.py

package info (click to toggle)
antlr 2.7.7%2Bdfsg-14
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,016 kB
  • sloc: java: 54,649; cs: 12,537; makefile: 8,854; cpp: 7,359; pascal: 5,273; sh: 4,333; python: 4,297; lisp: 1,969; xml: 220; lex: 192; ansic: 127
file content (134 lines) | stat: -rw-r--r-- 2,707 bytes parent folder | download | duplicates (11)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import sys
import antlr
      

class Visitor(antlr.ASTVisitor):
   def __init__(self,*args):
      super(Visitor,self).__init__(*args)
      self.level = 0
      if not args:
         self.cout = sys.stdout
         return
      if isinstance(args[0],file):
         self.cout = args[0]
         return
      assert 0

   def tabs(self):
      print " " * self.level

   def printf(self,fmt,*args):
      if not args:
          sys.stdout.write(fmt)
          return
      argv = tuple(args)
      self.cout.write(fmt % argv)

   def flush(self):
      self.cout.flush()

   def visit1(self,node):
      if not node:
         self.printf(" nil ")
         return

      c = node.getType()
      t = node.getText()
      k = node.getFirstChild()
      s = node.getNextSibling()
    
      self.printf("( <%s> ",c)
      if t:
         self.printf(" %s ",t)
      self.visit1(k);
      self.visit1(s);
      self.printf(")")

   def visit(self,node):
      self.visit1(node);
      self.printf("\n")
      

stream = None

def setstream(st):
   import keepws
   keepws.stream = st

def getstream():
   assert stream
   return stream

### referenced by treewalker
def write(*args):
   import sys
   sys.stdout.write(*args)
   sys.stdout.flush()

### walk list of hidden tokens in order, printing them out
def dumpHidden(t):
   assert stream
   while t:
      write(t.getText())
      t = stream.getHiddenAfter(t)

def pr(p):
   write(p.getText())
   dumpHidden(p.getHiddenAfter())


def main():
   import keepws_l
   import keepws_p
   import keepws_w
   
   L = keepws_l.Lexer() 

   ### change token class
   L.setTokenObjectClass(antlr.CommonHiddenStreamToken)

   ### create new token stream - referenced by parser
   ### global stream
   st = antlr.TokenStreamHiddenTokenFilter(L);
   st.hide(keepws_p.WS);
   st.hide(keepws_p.SL_COMMENT);
   setstream(st)
   ### create parser with my stream
   P = keepws_p.Parser(st)
   P.setFilename(L.getFilename())

   ### use this kind of AST nodes
   P.setASTNodeClass(antlr.CommonASTWithHiddenTokens)

   ### Parse the input expression
   try:
      P.slist()
   except antlr.ANTLRException, ex:
      print "*** error(s) while parsing."
      print ">>> exit(1)"
      import sys
      sys.exit(1)

   
   ast = P.getAST()
   
   if not ast:
      print "stop - no AST generated."
      import sys
      sys.exit(1)
      
   ###show tree
   print "Tree: " + ast.toStringTree()
   print "List: " + ast.toStringList()
   print "Node: " + ast.toString()
   print "visit>>"
   visitor = Visitor()
   visitor.visit(ast);
   print "visit<<"

   W = keepws_w.Walker()
   W.slist(ast)
   print "Ast tree walked without problems."

if __name__ == "__main__":
   main()