RecursiveTest.php 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. <?php
  2. require __DIR__ . '/../../vendor/autoload.php';
  3. use Parse\RecursiveParser;
  4. use Parse\CombinatorParser;
  5. use Parse\StringParser;
  6. use Parse\CondParser;
  7. use Parse\RegexParser;
  8. use Parse\ParseException;
  9. $parser = new RecursiveParser(
  10. "paren_expr",
  11. array(
  12. "paren_expr" => new CombinatorParser(
  13. array("open_paren",
  14. "expr",
  15. "close_paren")
  16. ),
  17. "open_paren" => new StringParser("("),
  18. "expr" => new CondParser(
  19. array("paren_expr", "number")
  20. ),
  21. "number" => new RegexParser(
  22. "#^-?(0|[1-9][0-9]*)(\.[0-9]+)?([eE][-+]?[0-9]+)?#",
  23. function ($match) {
  24. return (float)$match;
  25. }
  26. ),
  27. "close_paren" => new StringParser(")"))
  28. );
  29. var_dump($parser->parse("((1))") ===
  30. array("(", array("(", (float)1, ")"), ")"));
  31. try {
  32. var_dump($parser->parse("((10)"));
  33. var_dump(false);
  34. } catch (ParseException $e) {
  35. var_dump(true);
  36. }
  37. try {
  38. var_dump($parser->parse("((hi mom!))"));
  39. var_dump(false);
  40. } catch (ParseException $e) {
  41. var_dump(true);
  42. }