~ubuntu-branches/ubuntu/breezy/antlr/breezy

« back to all changes in this revision

Viewing changes to examples/python/includeFile/incfile.py

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2005-06-29 16:11:22 UTC
  • mfrom: (0.1.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20050629161122-g81crc3z92p5xhsg
Tags: 2.7.5-6ubuntu4
Build depend on java-gcj-compat-dev, depend on java-gcj-compat.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import sys
 
2
import antlr
 
3
      
 
4
 
 
5
class Visitor(antlr.ASTVisitor):
 
6
   def __init__(self,*args):
 
7
      super(Visitor,self).__init__(*args)
 
8
      self.level = 0
 
9
      if not args:
 
10
         self.cout = sys.stdout
 
11
         return
 
12
      if isinstance(args[0],file):
 
13
         self.cout = args[0]
 
14
         return
 
15
      assert 0
 
16
 
 
17
   def tabs(self):
 
18
      print " " * self.level
 
19
 
 
20
   def printf(self,fmt,*args):
 
21
      if not args:
 
22
          sys.stdout.write(fmt)
 
23
          return
 
24
      argv = tuple(args)
 
25
      self.cout.write(fmt % argv)
 
26
 
 
27
   def flush(self):
 
28
      self.cout.flush()
 
29
 
 
30
   def visit1(self,node):
 
31
      if not node:
 
32
         self.printf(" nil ")
 
33
         return
 
34
 
 
35
      c = node.getType()
 
36
      t = node.getText()
 
37
      k = node.getFirstChild()
 
38
      s = node.getNextSibling()
 
39
    
 
40
      self.printf("( <%s> ",c)
 
41
      if t:
 
42
         self.printf(" %s ",t)
 
43
      self.visit1(k);
 
44
      self.visit1(s);
 
45
      self.printf(")")
 
46
 
 
47
   def visit(self,node):
 
48
      self.visit1(node);
 
49
      self.printf("\n")
 
50
 
 
51
### some global vars referenced by lexer and parser
 
52
selector = None
 
53
parser   = None
 
54
lexer    = None
 
55
 
 
56
def getselector():
 
57
   import incfile
 
58
   assert incfile.selector
 
59
   return incfile.selector
 
60
 
 
61
def getparser():
 
62
   import incfile
 
63
   assert incfile.parser
 
64
   return incfile.parser
 
65
 
 
66
def getlexer():
 
67
   import incfile
 
68
   assert incfile.lexer
 
69
   return incfile.lexer
 
70
 
 
71
 
 
72
 
 
73
def check(s,l,p):
 
74
   import incfile
 
75
   assert incfile.lexer
 
76
   assert incfile.lexer == l
 
77
   assert incfile.selector
 
78
   assert incfile.selector == s
 
79
   assert incfile.parser
 
80
   assert incfile.parser == p
 
81
 
 
82
 
 
83
def main():
 
84
   import incfile_l
 
85
   import incfile_p
 
86
   
 
87
   ## make a selector
 
88
   S = antlr.TokenStreamSelector()
 
89
   L = incfile_l.Lexer()
 
90
 
 
91
   S.addInputStream(L,"main")
 
92
   S.select("main")
 
93
   
 
94
   P = incfile_p.Parser(S)
 
95
   P.setFilename(L.getFilename())
 
96
 
 
97
   import incfile
 
98
   incfile.selector = S
 
99
   incfile.lexer = L
 
100
   incfile.parser = P
 
101
   
 
102
   check(S,L,P)
 
103
 
 
104
   ### Parse the input expression
 
105
   try:
 
106
      P.startRule()
 
107
   except antlr.ANTLRException, ex:
 
108
      print "*** error(s) while parsing."
 
109
      print ">>> exit(1)"
 
110
      import sys
 
111
      sys.exit(1)
 
112
 
 
113
   
 
114
   ast = P.getAST()
 
115
   
 
116
   if not ast:
 
117
      print "stop - no AST generated."
 
118
      import sys
 
119
      sys.exit(0)
 
120
      
 
121
   ###show tree
 
122
   print "Tree: " + ast.toStringTree()
 
123
   print "List: " + ast.toStringList()
 
124
   print "Node: " + ast.toString()
 
125
   print "visit>>"
 
126
   visitor = Visitor()
 
127
   visitor.visit(ast);
 
128
   print "visit<<"
 
129
 
 
130
if __name__ == "__main__":
 
131
   main()