/tutorial/backtracking/tiny_parse/truc.e

http://github.com/tybor/Liberty · Specman e · 79 lines · 65 code · 14 blank · 0 comment · 2 complexity · 85bac0b0bde8be78a0e2727df2ba4bd0 MD5 · raw file

  1. class PARSER_SEQUENCE_MARK_END
  2. inherit ABSTRACT_BACKTRACKING_SEQUENCE
  3. feature
  4. parseable: PARSER_PARSEABLE
  5. set_parseable(value: like parseable) is
  6. do
  7. parseable := value
  8. end
  9. next_sequence(parser: PARSER) is
  10. do
  11. parser.push_mark_end(parseable)
  12. parser.pop_sequence
  13. parser.continue
  14. end
  15. end
  16. expanded class PARSER_CONTEXT
  17. feature
  18. depth, position: INTEGER
  19. make(d,p: INTEGER) is
  20. do
  21. depth:=d
  22. position:=p
  23. end
  24. end
  25. expanded class PARSER_MARK
  26. feature
  27. position: INTEGER
  28. is_begin: BOOLEAN
  29. is_end: BOOLEAN is do Result:=not is_begin end
  30. parseable: PARSER_PARSEABLE
  31. make_begin(pos: INTEGER; what: like parseable) is do is_begin:=True position:=pos parseable:=what end
  32. make_end(pos: INTEGER; what: like parseable) is do is_begin:=False position:=pos parseable:=what end
  33. end
  34. class PARSER_GRAMMAR feature
  35. rules: HASHED_DICTIONARY[RULE,STRING]
  36. blanks: REGULAR_EXPRESSION_ROOT
  37. root: RULE
  38. end
  39. deferred class PARSER_PARSEABLE
  40. inherit
  41. BACKTRACKING_NODE rename explore as parse end
  42. end
  43. class PARSER_RULE inherit PARSER_PARSEABLE feature
  44. name: STRING
  45. item: PARSER_PARSEABLE
  46. parse(parser: PARSER) is do parser.goto_inside(item) end
  47. end
  48. deferred class PARSER_TOKEN inherit PARSER_PARSEABLE feature
  49. expr: REGULAR_EXPRESSION_ROOT
  50. make(exp: like expr) is do expr := exp end
  51. parse(parser: PARSER) is do
  52. if parser.match(expr)
  53. then parser.continue
  54. else parser.backtrack
  55. end
  56. end
  57. end
  58. class PARSER_FIXED inherit PARSER_TOKEN feature
  59. end
  60. class TOKEN_RECORDED inherit PARSER_TOKEN feature
  61. end
  62. class PARSER_OPTIONAL inherit PARSER_PARSEABLE feature
  63. end
  64. class PARSER_LIST inherit PARSER_PARSEABLE feature
  65. end