def TestRegex():
    assert (P.Regex(digits)("01231abcd") == ("01231", "abcd"))
    assert (P.Regex(digits)("abcd") == (None, "abcd"))

    assert (P.Regex(bracketed)("{asdfa}") == ("{asdfa}", ""))
    assert (P.Regex(bracketed)("{asdfa}gh") == ("{asdfa}", "gh"))
    assert (P.Regex(bracketed)("{}") == ("{}", ""))
    assert (P.Regex(bracketed)("a{}") == (None, "a{}"))
def TestClean():
    int_parser = P.Clean(P.Regex(digits), lambda x: int(x))
    assert (int_parser("01213") == (1213, ""))
    assert (int_parser("5f") == (5, "f"))
    assert (int_parser("f5") == (None, "f5"))
def TestOnePlus():
    single_digit_parser = P.Regex(re.compile("[0-9]"))
    digits_parser = P.OnePlus(single_digit_parser)

    assert (digits_parser("01231") == (list("01231"), ""))
    assert (digits_parser("a01231") == (None, "a01231"))
def TestMaybe():
    digits_parser = P.Maybe(P.Regex(digits))
    assert (digits_parser("asdf012") == ("", "asdf012"))

    digits_parser = P.Maybe(P.Regex(digits), lambda: list())
    assert (digits_parser("asdf012") == ([], "asdf012"))
def TestRegexWithNonRegexObject():
    P.Regex("foobar")
Beispiel #6
0
def CleanAndWarnEmptyCodeBlock(s):
  r = s[2:-1]
  if not r: raise SyntaxError("Empty Code block found.")
  return r

def CleanPosition(s):
  numbers = []
  for n in s.split(","):
    try:
      numbers.append(int(n))
    except ValueError as e:
      raise SyntaxError("Unable to parse '%s' into a number in position syntax : '%s'"
          %(n, s))
  return numbers

string_parser = P.Clean(P.Regex(reg_string), lambda x: x[1:-1])
codeblock_parser = P.Clean(P.Regex(reg_codeblock), CleanAndWarnEmptyCodeBlock)
identifier_parser = P.Regex(reg_identifier)
number_parser = P.Clean(P.Regex(reg_number), lambda x: int(x))
position_parser = P.Clean(P.Regex(reg_position), CleanPosition)

attr_match_parser = P.Clean(
  P.Sequence(
    (P.Literal("@["), None),
    (identifier_parser, "Identifier expected"),
    (P.Literal("="), "'=' expected"),
    (string_parser, "String expected"),
    (P.Literal("]"), "Closing ']' expected")),
  lambda x: (x[1], x[3]))

position_parser = P.Clean(