source: trunk/yao/share/antlr-2.7.7/examples/python/includeFile/incfile.py @ 1

Last change on this file since 1 was 1, checked in by lnalod, 15 years ago

Initial import of YAO sources

File size: 2.4 KB
Line 
1import sys
2import antlr
3     
4
5class 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
52selector = None
53parser   = None
54lexer    = None
55
56def getselector():
57   import incfile
58   assert incfile.selector
59   return incfile.selector
60
61def getparser():
62   import incfile
63   assert incfile.parser
64   return incfile.parser
65
66def getlexer():
67   import incfile
68   assert incfile.lexer
69   return incfile.lexer
70
71
72
73def 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
83def 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
130if __name__ == "__main__":
131   main()
Note: See TracBrowser for help on using the repository browser.