Revision: 17552
Author:   [email protected]
Date:     Thu Nov  7 10:20:45 2013 UTC
Log:      Experimental parser: add html arg to generator

[email protected]

BUG=

Review URL: https://codereview.chromium.org/59663004
http://code.google.com/p/v8/source/detail?r=17552

Modified:
 /branches/experimental/parser/tools/lexer_generator/automaton.py
 /branches/experimental/parser/tools/lexer_generator/generator.py

=======================================
--- /branches/experimental/parser/tools/lexer_generator/automaton.py Thu Nov 7 09:58:01 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/automaton.py Thu Nov 7 10:20:45 2013 UTC
@@ -56,24 +56,32 @@
   @staticmethod
   def generate_dot(start_node, terminal_set, edge_iterator):

+    def escape(v):
+      v = str(v).replace('\r', '\\\\r')
+      v = str(v).replace('\t', '\\\\t')
+      v = str(v).replace('\n', '\\\\n')
+      v = str(v).replace('\\', '\\\\')
+      return v
+
     def f(node, node_content):
       for key, values in node.transitions().items():
         if key == TransitionKey.epsilon():
           key = "ε"
-        key = str(key).replace('\\', '\\\\')
         # TODO pass this action as parameter
         if type(values) == TupleType:
           values = [values]
         for (state, action) in values:
           if action:
-            node_content.append(
-                "  S_%s -> S_%s [ label = \"%s {%s} -> %s\" ];" %
-                (node.node_number(), state.node_number(), key, action[1],
-                 action[2]))
+            content = "  S_%s -> S_%s [ label = \"%s {%s} -> %s\" ];" % (
+                node.node_number(),
+                state.node_number(),
+                escape(key),
+                escape(action[1]),
+                escape(action[2]))
           else:
-            node_content.append(
-                "  S_%s -> S_%s [ label = \"%s\" ];" %
-                (node.node_number(), state.node_number(), key))
+            content = "  S_%s -> S_%s [ label = \"%s\" ];" % (
+                node.node_number(), state.node_number(), escape(key))
+          node_content.append(content)
       return node_content

     node_content = edge_iterator(f, [])
=======================================
--- /branches/experimental/parser/tools/lexer_generator/generator.py Thu Nov 7 09:06:55 2013 UTC +++ /branches/experimental/parser/tools/lexer_generator/generator.py Thu Nov 7 10:20:45 2013 UTC
@@ -25,6 +25,7 @@
 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

+import argparse
 from nfa import Nfa, NfaBuilder
 from dfa import Dfa
 from rule_parser import RuleParser, RuleParserState
@@ -88,14 +89,24 @@
     (start, dfa_nodes) = nfa.compute_dfa()
     dfa = Dfa(start, dfa_nodes)
     html_data.append((rule_name, nfa, dfa))
-  html = generate_html(html_data)
-  # print html
+  return html_data

-def parse_file(file_name):
+if __name__ == '__main__':
+
+  parser = argparse.ArgumentParser()
+  parser.add_argument('--html')
+  args = parser.parse_args()
+
+  re_file = 'src/lexer/lexer_py.re'
+
   parser_state = RuleParserState()
-  with open(file_name, 'r') as f:
+  with open(re_file, 'r') as f:
     RuleParser.parse(f.read(), parser_state)
-  process_rules(parser_state)
+  html_data = process_rules(parser_state)

-if __name__ == '__main__':
-  parse_file('src/lexer/lexer_py.re')
+  html_file = args.html
+  if html_file:
+    html = generate_html(html_data)
+    with open(args.html, 'w') as f:
+      f.write(html)
+      print "wrote html to %s" % html_file

--
--
v8-dev mailing list
[email protected]
http://groups.google.com/group/v8-dev
--- You received this message because you are subscribed to the Google Groups "v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to