Revision: 17743
Author: [email protected]
Date: Thu Nov 14 12:14:08 2013 UTC
Log: Experimental lexer generator: Don't go BACK();
Instead, delay advancing the stream.
BUG=
[email protected]
Review URL: https://codereview.chromium.org/72693002
http://code.google.com/p/v8/source/detail?r=17743
Modified:
/branches/experimental/parser/src/lexer/even-more-experimental-scanner.cc
/branches/experimental/parser/src/lexer/even-more-experimental-scanner.h
/branches/experimental/parser/src/lexer/lexer_py.re
/branches/experimental/parser/tools/lexer_generator/code_generator.py
=======================================
---
/branches/experimental/parser/src/lexer/even-more-experimental-scanner.cc
Wed Nov 13 12:12:08 2013 UTC
+++
/branches/experimental/parser/src/lexer/even-more-experimental-scanner.cc
Thu Nov 14 12:14:08 2013 UTC
@@ -119,7 +119,7 @@
if (input_size == 0)
return 0;
buffer_ = const_cast<YYCTYPE*>(reinterpret_cast<const YYCTYPE*>(input));
- cursor_ = buffer_ - 1;
+ cursor_ = buffer_;
start_ = buffer_;
buffer_end_ = buffer_ + input_size;
return DoLex();
=======================================
---
/branches/experimental/parser/src/lexer/even-more-experimental-scanner.h
Wed Nov 13 15:03:03 2013 UTC
+++
/branches/experimental/parser/src/lexer/even-more-experimental-scanner.h
Thu Nov 14 12:14:08 2013 UTC
@@ -36,7 +36,7 @@
#define PUSH_TOKEN(T) { send(T); start_ = cursor_; }
#define PUSH_LINE_TERMINATOR(s) { start_ = cursor_; }
-#define BACK() { yych = *(--cursor_); }
+#define FORWARD() { yych = *(++cursor_); }
#define SKIP() { start_ = cursor_; }
namespace v8 {
=======================================
--- /branches/experimental/parser/src/lexer/lexer_py.re Thu Nov 14 10:46:34
2013 UTC
+++ /branches/experimental/parser/src/lexer/lexer_py.re Thu Nov 14 12:14:08
2013 UTC
@@ -195,7 +195,7 @@
catch_all <<continue>>
<MultiLineComment>
-"*/" { SKIP(); BACK(); goto code_start;}
+"*/" { SKIP(); goto code_start;}
/\*[^\057]/ <<continue>>
# need to force action
line_terminator+ { PUSH_LINE_TERMINATOR(); } <<continue>>
=======================================
--- /branches/experimental/parser/tools/lexer_generator/code_generator.py
Thu Nov 14 11:48:38 2013 UTC
+++ /branches/experimental/parser/tools/lexer_generator/code_generator.py
Thu Nov 14 12:14:08 2013 UTC
@@ -77,24 +77,24 @@
return code
code += '''
- yych = *(++cursor_);
//fprintf(stderr, "char at hand is %c (%d)\\n", yych, yych);\n'''
for key, s in state.transitions().items():
code += CodeGenerator.key_to_code(key)
code += ''' {
+ FORWARD();
goto code_%s;
}
''' % s.node_number()
if action:
if action.type() == 'code':
- code += '%s\nBACK();\ngoto code_%s;\n' % (action.data(),
- start_node_number)
+ code += '%s\n\ngoto code_%s;\n' % (action.data(),
+ start_node_number)
elif action.type() == 'push_token':
content = 'PUSH_TOKEN(Token::%s);' % action.data()
- code += '%s\nBACK();\ngoto code_%s;\n' % (content,
- start_node_number)
+ code += '%s\ngoto code_%s;\n' % (content,
+ start_node_number)
else:
raise Exception("unknown type %s" % action.type())
else:
@@ -128,7 +128,8 @@
default_action_code = '''
default_action:
//fprintf(stderr, "default action\\n");
- PUSH_TOKEN(Token::%s)
+ PUSH_TOKEN(Token::%s);
+ FORWARD();
goto code_%s;''' % (rule_processor.default_action.data(),
start_node_number)
else:
raise Exception("Default action type %s not supported" %
action.type())
--
--
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.