Commit d037a456 authored by Stefan Behnel's avatar Stefan Behnel

more cythonisation in the scanner/parser

parent 698b502d
cdef class Action:
cdef perform(self, token_stream, text)
cpdef same_as(self, other)
cdef class Return(Action):
cdef object value
cdef perform(self, token_stream, text)
cpdef same_as(self, other)
cdef class Call(Action):
cdef object function
cdef perform(self, token_stream, text)
cpdef same_as(self, other)
cdef class Begin(Action):
cdef object state_name
cdef perform(self, token_stream, text)
cpdef same_as(self, other)
cdef class Ignore(Action):
cdef perform(self, token_stream, text)
cdef class Text(Action):
cdef perform(self, token_stream, text)
...@@ -8,6 +8,9 @@ ...@@ -8,6 +8,9 @@
class Action(object): class Action(object):
def perform(self, token_stream, text):
pass # abstract
def same_as(self, other): def same_as(self, other):
return self is other return self is other
...@@ -18,8 +21,6 @@ class Return(Action): ...@@ -18,8 +21,6 @@ class Return(Action):
be returned as the value of the associated token be returned as the value of the associated token
""" """
value = None
def __init__(self, value): def __init__(self, value):
self.value = value self.value = value
...@@ -38,8 +39,6 @@ class Call(Action): ...@@ -38,8 +39,6 @@ class Call(Action):
Internal Plex action which causes a function to be called. Internal Plex action which causes a function to be called.
""" """
function = None
def __init__(self, function): def __init__(self, function):
self.function = function self.function = function
...@@ -60,8 +59,6 @@ class Begin(Action): ...@@ -60,8 +59,6 @@ class Begin(Action):
for more information. for more information.
""" """
state_name = None
def __init__(self, state_name): def __init__(self, state_name):
self.state_name = state_name self.state_name = state_name
...@@ -88,7 +85,7 @@ class Ignore(Action): ...@@ -88,7 +85,7 @@ class Ignore(Action):
return "IGNORE" return "IGNORE"
IGNORE = Ignore() IGNORE = Ignore()
IGNORE.__doc__ = Ignore.__doc__ #IGNORE.__doc__ = Ignore.__doc__
class Text(Action): class Text(Action):
""" """
...@@ -104,6 +101,6 @@ class Text(Action): ...@@ -104,6 +101,6 @@ class Text(Action):
return "TEXT" return "TEXT"
TEXT = Text() TEXT = Text()
TEXT.__doc__ = Text.__doc__ #TEXT.__doc__ = Text.__doc__
import cython import cython
from Cython.Plex.Actions cimport Action
cdef class Scanner: cdef class Scanner:
cdef public lexicon cdef public lexicon
...@@ -26,6 +28,7 @@ cdef class Scanner: ...@@ -26,6 +28,7 @@ cdef class Scanner:
@cython.locals(input_state=long) @cython.locals(input_state=long)
cdef next_char(self) cdef next_char(self)
@cython.locals(action=Action)
cdef tuple read(self) cdef tuple read(self)
cdef tuple scan_a_token(self) cdef tuple scan_a_token(self)
cdef tuple position(self) cdef tuple position(self)
......
...@@ -87,6 +87,7 @@ else: ...@@ -87,6 +87,7 @@ else:
def compile_cython_modules(profile=False): def compile_cython_modules(profile=False):
source_root = os.path.abspath(os.path.dirname(__file__)) source_root = os.path.abspath(os.path.dirname(__file__))
compiled_modules = ["Cython.Plex.Scanners", compiled_modules = ["Cython.Plex.Scanners",
"Cython.Plex.Actions",
"Cython.Compiler.Scanning", "Cython.Compiler.Scanning",
"Cython.Compiler.Parsing", "Cython.Compiler.Parsing",
"Cython.Compiler.Visitor", "Cython.Compiler.Visitor",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment