Source code for pyrser.hooks.predicate
from pyrser import meta
from pyrser.parsing.base import BasicParser
@meta.hook(BasicParser, "false")
[docs]def pred_false(self):
"""
False in parser. Go to alternative...
example::
R = [
#false | R2
]
"""
return False
@meta.hook(BasicParser, "true")
[docs]def pred_true(self):
"""
True in parser. Do nothing
example::
R = [
R2 | #true
]
"""
return True
@meta.hook(BasicParser, "eq")
[docs]def pred_eq(self, n, val):
"""
Test if a node set with setint or setstr equal a certain value
example::
R = [
__scope__:n
['a' #setint(n, 12) | 'b' #setint(n, 14)]
C
[#eq(n, 12) D]
]
"""
v1 = n.value
v2 = val
if hasattr(val, 'value'):
v2 = val.value
if isinstance(v1, int) and not isinstance(v2, int):
return v1 == int(v2)
return v1 == v2
@meta.hook(BasicParser, "neq")
[docs]def pred_neq(self, n, val):
"""
Test if a node set with setint or setstr not equal a certain value
example::
R = [
__scope__:n
['a' #setint(n, 12) | 'b' #setint(n, 14)]
C
[#neq(n, 12) D]
]
"""
v1 = n.value
v2 = val
if hasattr(val, 'value'):
v2 = val.value
if isinstance(v1, int) and not isinstance(v2, int):
return v1 != int(v2)
return v1 != v2