OSDN Git Service

最新版に差し替え.
[codecoverage/main.git] / Parsers / Python / ast2xml.py
1 from parser import *\r
2 import re\r
3 import sys\r
4 import symbol\r
5 import token\r
6 import types\r
7 \r
8 def escapeElementValue(value):\r
9         value = re.sub("&", "&", value)\r
10         value = re.sub("<", "&lt;", value)\r
11         value = re.sub(">", "&gt;", value)\r
12         return value\r
13 \r
14 def printAst(tuple):\r
15         printAst2(tuple, 0, 1)\r
16 \r
17 def printAst2(tuple, depth, lastline):\r
18         id = tuple[0]\r
19         if not isinstance(tuple[1], types.StringType):\r
20                 element_name = symbol.sym_name[id]\r
21                 print ("  " * depth + "<" + element_name + ">")\r
22                 for item in tuple[1:]:\r
23                         lastline = printAst2(item, depth + 1, lastline)\r
24                 print ("  " * depth + "</" + element_name + ">")\r
25         else:\r
26                 element_name = token.tok_name[id]\r
27                 print ("  " * depth + "<" + element_name + " startline=\"" + str(lastline) + "\" endline=\"" + str(tuple[2]) + "\">" + escapeElementValue(tuple[1]) + "</" + element_name + ">")\r
28                 lastline = tuple[2]\r
29                 if element_name == "NEWLINE": lastline += 1\r
30         return lastline\r
31 \r
32 ast = suite(sys.stdin.read())\r
33 printAst(ast2tuple(ast, True))\r