Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(890)

Unified Diff: tools/lexer_generator/code_generator.jinja

Issue 75513002: Experimental parser: inline rules (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/parser
Patch Set: Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | tools/lexer_generator/code_generator.py » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/lexer_generator/code_generator.jinja
diff --git a/tools/lexer_generator/code_generator.jinja b/tools/lexer_generator/code_generator.jinja
index 231e58d17cbc3701eb7b4c7885b55f97a76c9671..d7fa82d514498aa86f2d5773233da88a18b311aa 100644
--- a/tools/lexer_generator/code_generator.jinja
+++ b/tools/lexer_generator/code_generator.jinja
@@ -53,13 +53,22 @@
{%- endmacro -%}
-{%- macro do_dfa_state(state) -%}
+{%- macro do_dfa_state(node_number, inline) -%}
- {%- if start_node_number == state.node_number %}
- code_start:
- {% else %}
- code_{{state.node_number}}:
- {% endif %}
+ {%- set state = dfa_states[node_number] -%}
+
+ {%- if not inline -%}
+ {%- if state['inline'] -%}
+ bad generated code for {{node_number}}
+ {%- endif -%}
+ {%- if start_node_number == node_number -%}
+ code_start:
+ {%- else -%}
+ code_{{node_number}}:
+ {%- endif -%}
+ {%- else -%}
+ // inlined state {{node_number}}
+ {%- endif %}
{% if debug_print %}
fprintf(stderr, "state {{state.node_number}}\n");
@@ -72,13 +81,17 @@
{%- if debug_print %}
fprintf(stderr, "char at hand is %c (%d)\n", yych, yych);
- {% endif %}
+ {% endif -%}
- // matchers
- {%- for match_key, match_state in state.transitions %}
- if ({{do_key(match_key)}}) {
- FORWARD();
- goto code_{{match_state}};
+ {%- for key, transition_state_id in state.transitions %}
+ {%- set inline_transition = dfa_states[transition_state_id]['inline'] -%}
+ if ({{do_key(key)}}) {
+ FORWARD();
+ {%- if inline_transition %}
+ {{ do_dfa_state(transition_state_id, True) }}
+ {% else %}
+ goto code_{{transition_state_id}};
+ {% endif %}
}
{% endfor -%}
@@ -142,7 +155,10 @@ Token::Value EvenMoreExperimentalScanner::Next(int* beg_pos_to_return,
{# first node is start node #}
{% for dfa_state in dfa_states -%}
- {{ do_dfa_state(dfa_state) }}
+ {%- set inline = dfa_state['inline'] -%}
+ {%- if not inline %}
+ {{ do_dfa_state(dfa_state['node_number'], False) }}
+ {%- endif -%}
{%- endfor %}
// Should never fall off the edge.
« no previous file with comments | « no previous file | tools/lexer_generator/code_generator.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698