aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/language/base.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2015-05-03 12:53:28 +1200
committerAldo Cortesi <aldo@nullcube.com>2015-05-03 12:53:28 +1200
commitcc434ded897aaa2df23fa0142a7d4a720d757ada (patch)
tree5b670e66ccacf20f6a221d4faf63d4d0bf639bfc /libpathod/language/base.py
parente35e6d90b977ac19e3816b2a8029a12287c976ac (diff)
downloadmitmproxy-cc434ded897aaa2df23fa0142a7d4a720d757ada.tar.gz
mitmproxy-cc434ded897aaa2df23fa0142a7d4a720d757ada.tar.bz2
mitmproxy-cc434ded897aaa2df23fa0142a7d4a720d757ada.zip
Clarify token/component split through naming
Tokens are now Tok*
Diffstat (limited to 'libpathod/language/base.py')
-rw-r--r--libpathod/language/base.py79
1 files changed, 29 insertions, 50 deletions
diff --git a/libpathod/language/base.py b/libpathod/language/base.py
index c473a6a8..d80eec99 100644
--- a/libpathod/language/base.py
+++ b/libpathod/language/base.py
@@ -40,7 +40,9 @@ v_naked_literal = pp.MatchFirst(
class Token(object):
"""
- A specification token. Tokens are immutable.
+ A token in the specification language. Tokens are immutable. The token
+ classes have no meaning in and of themselves, and are combined into
+ Components and Actions to build the language.
"""
__metaclass__ = abc.ABCMeta
@@ -72,7 +74,7 @@ class Token(object):
return self.spec()
-class _ValueLiteral(Token):
+class _TokValueLiteral(Token):
def __init__(self, val):
self.val = val.decode("string_escape")
@@ -83,7 +85,7 @@ class _ValueLiteral(Token):
return self
-class ValueLiteral(_ValueLiteral):
+class TokValueLiteral(_TokValueLiteral):
"""
A literal with Python-style string escaping
"""
@@ -103,7 +105,7 @@ class ValueLiteral(_ValueLiteral):
return "'" + inner + "'"
-class ValueNakedLiteral(_ValueLiteral):
+class TokValueNakedLiteral(_TokValueLiteral):
@classmethod
def expr(klass):
e = v_naked_literal.copy()
@@ -113,7 +115,7 @@ class ValueNakedLiteral(_ValueLiteral):
return self.val.encode("string_escape")
-class ValueGenerate(Token):
+class TokValueGenerate(Token):
def __init__(self, usize, unit, datatype):
if not unit:
unit = "b"
@@ -127,7 +129,7 @@ class ValueGenerate(Token):
def freeze(self, settings):
g = self.get_generator(settings)
- return ValueLiteral(g[:].encode("string_escape"))
+ return TokValueLiteral(g[:].encode("string_escape"))
@classmethod
def expr(klass):
@@ -156,7 +158,7 @@ class ValueGenerate(Token):
return s
-class ValueFile(Token):
+class TokValueFile(Token):
def __init__(self, path):
self.path = str(path)
@@ -189,26 +191,26 @@ class ValueFile(Token):
return "<'%s'"%self.path.encode("string_escape")
-Value = pp.MatchFirst(
+TokValue = pp.MatchFirst(
[
- ValueGenerate.expr(),
- ValueFile.expr(),
- ValueLiteral.expr()
+ TokValueGenerate.expr(),
+ TokValueFile.expr(),
+ TokValueLiteral.expr()
]
)
-NakedValue = pp.MatchFirst(
+TokNakedValue = pp.MatchFirst(
[
- ValueGenerate.expr(),
- ValueFile.expr(),
- ValueLiteral.expr(),
- ValueNakedLiteral.expr(),
+ TokValueGenerate.expr(),
+ TokValueFile.expr(),
+ TokValueLiteral.expr(),
+ TokValueNakedLiteral.expr(),
]
)
-Offset = pp.MatchFirst(
+TokOffset = pp.MatchFirst(
[
v_integer,
pp.Literal("r"),
@@ -247,9 +249,9 @@ class KeyValue(_Component):
@classmethod
def expr(klass):
e = pp.Literal(klass.preamble).suppress()
- e += Value
+ e += TokValue
e += pp.Literal("=").suppress()
- e += Value
+ e += TokValue
return e.setParseAction(lambda x: klass(*x))
def spec(self):
@@ -295,7 +297,7 @@ class OptionsOrValue(_Component):
# string value literal.
self.option_used = False
if isinstance(value, basestring):
- value = ValueLiteral(value.upper())
+ value = TokValueLiteral(value.upper())
self.option_used = True
self.value = value
@@ -303,7 +305,7 @@ class OptionsOrValue(_Component):
def expr(klass):
parts = [pp.CaselessLiteral(i) for i in klass.options]
m = pp.MatchFirst(parts)
- spec = m | Value.copy()
+ spec = m | TokValue.copy()
spec = spec.setParseAction(lambda x: klass(*x))
if klass.preamble:
spec = pp.Literal(klass.preamble).suppress() + spec
@@ -345,15 +347,18 @@ class Integer(_Component):
class PreValue(_Component):
"""
- A value lead by self.preamble.
+ A value component lead by an optional preamble.
"""
+ preamble = ""
+
def __init__(self, value):
self.value = value
@classmethod
def expr(klass):
- e = pp.Literal(klass.preamble).suppress()
- e = e + Value
+ e = (TokValue | TokNakedValue)
+ if klass.preamble:
+ e = pp.Literal(klass.preamble).suppress() + e
return e.setParseAction(lambda x: klass(*x))
def values(self, settings):
@@ -364,29 +369,3 @@ class PreValue(_Component):
def freeze(self, settings):
return self.__class__(self.value.freeze(settings))
-
-
-class SimpleValue(_Component):
- """
- A simple value - i.e. one without a preface.
- """
- def __init__(self, value):
- if isinstance(value, basestring):
- value = ValueLiteral(value)
- self.value = value
-
- @classmethod
- def expr(klass):
- e = Value | NakedValue
- return e.setParseAction(lambda x: klass(*x))
-
- def values(self, settings):
- return [
- self.value.get_generator(settings),
- ]
-
- def spec(self):
- return "%s"%(self.value.spec())
-
- def freeze(self, settings):
- return self.__class__(self.value.freeze(settings))