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.

Reply via email to