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.