treetop 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. data/lib/treetop.rb +6 -0
  2. data/lib/treetop/api.rb +3 -0
  3. data/lib/treetop/api/load_grammar.rb +16 -0
  4. data/lib/treetop/api/malformed_grammar_exception.rb +9 -0
  5. data/lib/treetop/grammar.rb +7 -0
  6. data/lib/treetop/grammar/grammar.rb +48 -0
  7. data/lib/treetop/grammar/grammar_builder.rb +35 -0
  8. data/lib/treetop/grammar/parsing_expression_builder.rb +5 -0
  9. data/lib/treetop/grammar/parsing_expression_builder_helper.rb +121 -0
  10. data/lib/treetop/grammar/parsing_expressions.rb +18 -0
  11. data/lib/treetop/grammar/parsing_expressions/and_predicate.rb +17 -0
  12. data/lib/treetop/grammar/parsing_expressions/anything_symbol.rb +20 -0
  13. data/lib/treetop/grammar/parsing_expressions/character_class.rb +24 -0
  14. data/lib/treetop/grammar/parsing_expressions/node_instantiating_parsing_expression.rb +14 -0
  15. data/lib/treetop/grammar/parsing_expressions/node_propagating_parsing_expression.rb +4 -0
  16. data/lib/treetop/grammar/parsing_expressions/nonterminal_symbol.rb +42 -0
  17. data/lib/treetop/grammar/parsing_expressions/not_predicate.rb +18 -0
  18. data/lib/treetop/grammar/parsing_expressions/one_or_more.rb +12 -0
  19. data/lib/treetop/grammar/parsing_expressions/optional.rb +14 -0
  20. data/lib/treetop/grammar/parsing_expressions/ordered_choice.rb +27 -0
  21. data/lib/treetop/grammar/parsing_expressions/parsing_expression.rb +36 -0
  22. data/lib/treetop/grammar/parsing_expressions/predicate.rb +25 -0
  23. data/lib/treetop/grammar/parsing_expressions/repeating_parsing_expression.rb +29 -0
  24. data/lib/treetop/grammar/parsing_expressions/sequence.rb +41 -0
  25. data/lib/treetop/grammar/parsing_expressions/terminal_parsing_expression.rb +11 -0
  26. data/lib/treetop/grammar/parsing_expressions/terminal_symbol.rb +31 -0
  27. data/lib/treetop/grammar/parsing_expressions/zero_or_more.rb +11 -0
  28. data/lib/treetop/grammar/parsing_rule.rb +10 -0
  29. data/lib/treetop/metagrammar.rb +2 -0
  30. data/lib/treetop/metagrammar/metagrammar.rb +14 -0
  31. data/lib/treetop/metagrammar/metagrammar.treetop +320 -0
  32. data/lib/treetop/parser.rb +11 -0
  33. data/lib/treetop/parser/node_cache.rb +25 -0
  34. data/lib/treetop/parser/parse_cache.rb +17 -0
  35. data/lib/treetop/parser/parse_failure.rb +22 -0
  36. data/lib/treetop/parser/parse_result.rb +26 -0
  37. data/lib/treetop/parser/parser.rb +24 -0
  38. data/lib/treetop/parser/sequence_syntax_node.rb +14 -0
  39. data/lib/treetop/parser/syntax_node.rb +31 -0
  40. data/lib/treetop/parser/terminal_parse_failure.rb +18 -0
  41. data/lib/treetop/parser/terminal_syntax_node.rb +7 -0
  42. data/lib/treetop/protometagrammar.rb +16 -0
  43. data/lib/treetop/protometagrammar/anything_symbol_expression_builder.rb +13 -0
  44. data/lib/treetop/protometagrammar/block_expression_builder.rb +17 -0
  45. data/lib/treetop/protometagrammar/character_class_expression_builder.rb +25 -0
  46. data/lib/treetop/protometagrammar/grammar_expression_builder.rb +38 -0
  47. data/lib/treetop/protometagrammar/nonterminal_symbol_expression_builder.rb +45 -0
  48. data/lib/treetop/protometagrammar/ordered_choice_expression_builder.rb +21 -0
  49. data/lib/treetop/protometagrammar/parsing_rule_expression_builder.rb +23 -0
  50. data/lib/treetop/protometagrammar/parsing_rule_sequence_expression_builder.rb +14 -0
  51. data/lib/treetop/protometagrammar/prefix_expression_builder.rb +25 -0
  52. data/lib/treetop/protometagrammar/primary_expression_builder.rb +71 -0
  53. data/lib/treetop/protometagrammar/protometagrammar.rb +25 -0
  54. data/lib/treetop/protometagrammar/sequence_expression_builder.rb +37 -0
  55. data/lib/treetop/protometagrammar/suffix_expression_builder.rb +33 -0
  56. data/lib/treetop/protometagrammar/terminal_symbol_expression_builder.rb +52 -0
  57. data/lib/treetop/protometagrammar/trailing_block_expression_builder.rb +30 -0
  58. data/lib/treetop/ruby_extension.rb +11 -0
  59. metadata +110 -0
@@ -0,0 +1,71 @@
1
+ module Treetop
2
+ class Protometagrammar
3
+ class PrimaryExpressionBuilder < ParsingExpressionBuilder
4
+ def build
5
+ seq(optional(:prefix), rest) do
6
+ def value(grammar)
7
+ if prefix.epsilon?
8
+ rest.value(grammar)
9
+ else
10
+ prefix.value(rest.value(grammar))
11
+ end
12
+ end
13
+
14
+ def prefix
15
+ elements[0]
16
+ end
17
+
18
+ def rest
19
+ elements[1]
20
+ end
21
+ end
22
+ end
23
+
24
+ def rest
25
+ seq(primary_expression, optional(:suffix)) do
26
+ def value(grammar)
27
+ if suffix.epsilon?
28
+ primary_expression.value(grammar)
29
+ else
30
+ suffix.value(primary_expression.value(grammar))
31
+ end
32
+ end
33
+
34
+ def primary_expression
35
+ elements[0]
36
+ end
37
+
38
+ def suffix
39
+ elements[1]
40
+ end
41
+ end
42
+ end
43
+
44
+ def primary_expression
45
+ choice parenthesized_ordered_choice,
46
+ :terminal_symbol,
47
+ :nonterminal_symbol
48
+ end
49
+
50
+ def parenthesized_ordered_choice
51
+ seq('(', optional(:space), :ordered_choice, optional(:space), ')', :trailing_block) do
52
+ def value(grammar)
53
+ nested_value = nested_expression.value(grammar)
54
+ unless trailing_block.epsilon? || nested_value.kind_of?(NodeInstantiatingParsingExpression)
55
+ raise "Blocks can only follow node-instantiating parsing expressions such as sequences and terminal symbols."
56
+ end
57
+ return trailing_block.value(nested_expression.value(grammar))
58
+ end
59
+
60
+ def nested_expression
61
+ elements[2]
62
+ end
63
+
64
+ def trailing_block
65
+ elements[5]
66
+ end
67
+ end
68
+ end
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,25 @@
1
+ module Treetop
2
+ class Protometagrammar < Grammar
3
+ def initialize
4
+ super
5
+ build do
6
+ rule :grammar, GrammarExpressionBuilder.new
7
+ rule :parsing_rule_sequence, ParsingRuleSequenceExpressionBuilder.new
8
+ rule :parsing_rule, ParsingRuleExpressionBuilder.new
9
+ rule :ordered_choice, OrderedChoiceExpressionBuilder.new
10
+ rule :sequence, SequenceExpressionBuilder.new
11
+ rule :primary, PrimaryExpressionBuilder.new
12
+ rule :prefix, PrefixExpressionBuilder.new
13
+ rule :suffix, SuffixExpressionBuilder.new
14
+ rule :nonterminal_symbol, NonterminalSymbolExpressionBuilder.new
15
+ rule :terminal_symbol, TerminalSymbolExpressionBuilder.new
16
+ rule :character_class, CharacterClassExpressionBuilder.new
17
+ rule :anything_symbol, AnythingSymbolExpressionBuilder.new
18
+ rule :block, BlockExpressionBuilder.new
19
+ rule :trailing_block, TrailingBlockExpressionBuilder.new
20
+ rule :space, one_or_more(char_class(" \t\n\r"))
21
+ rule :keyword, choice('rule', 'end')
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ module Treetop
2
+ class Protometagrammar
3
+ class SequenceExpressionBuilder < ParsingExpressionBuilder
4
+ def build
5
+ choice(sequence_with_block, :primary)
6
+ end
7
+
8
+ def sequence_with_block
9
+ seq(sequence, :trailing_block) do
10
+ def value(grammar)
11
+ trailing_block.value(sequence.value(grammar))
12
+ end
13
+
14
+ def sequence
15
+ elements[0]
16
+ end
17
+
18
+ def trailing_block
19
+ elements[1]
20
+ end
21
+ end
22
+ end
23
+
24
+ def sequence
25
+ two_or_more_delimited(:primary, :space) do
26
+ def value(grammar)
27
+ Sequence.new(element_values(grammar))
28
+ end
29
+
30
+ def element_values(grammar)
31
+ elements.collect { |element| element.value(grammar) }
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,33 @@
1
+ module Treetop
2
+ class Protometagrammar
3
+ class SuffixExpressionBuilder < ParsingExpressionBuilder
4
+ def build
5
+ choice(zero_or_more_terminal, one_or_more_terminal, optional)
6
+ end
7
+
8
+ def zero_or_more_terminal
9
+ exp('*') do
10
+ def value(parsing_expression)
11
+ parsing_expression.zero_or_more
12
+ end
13
+ end
14
+ end
15
+
16
+ def one_or_more_terminal
17
+ exp('+') do
18
+ def value(parsing_expression)
19
+ parsing_expression.one_or_more
20
+ end
21
+ end
22
+ end
23
+
24
+ def optional
25
+ exp('?') do
26
+ def value(parsing_expression)
27
+ parsing_expression.optional
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,52 @@
1
+ module Treetop
2
+ class Protometagrammar
3
+ class TerminalSymbolExpressionBuilder < ParsingExpressionBuilder
4
+ module TerminalStringSyntaxNode
5
+ def prefix
6
+ elements[1].text_value
7
+ end
8
+
9
+ def value
10
+ TerminalSymbol.new(prefix)
11
+ end
12
+ end
13
+
14
+ def build
15
+ seq(choice(single_quoted_string, double_quoted_string, :character_class, :anything_symbol),
16
+ :trailing_block) do
17
+ def value(grammar = nil)
18
+ trailing_block.value(terminal.value)
19
+ end
20
+
21
+ def terminal
22
+ elements[0]
23
+ end
24
+
25
+ def trailing_block
26
+ elements[1]
27
+ end
28
+ end
29
+ end
30
+
31
+ def double_quoted_string
32
+ seq('"', zero_or_more(double_quoted_string_char), '"') do
33
+ include TerminalStringSyntaxNode
34
+ end
35
+ end
36
+
37
+ def double_quoted_string_char
38
+ seq(notp('"'), choice(escaped('"'), any))
39
+ end
40
+
41
+ def single_quoted_string
42
+ seq("'", zero_or_more(single_quoted_string_char), "'") do
43
+ include TerminalStringSyntaxNode
44
+ end
45
+ end
46
+
47
+ def single_quoted_string_char
48
+ seq(notp("'"), choice(escaped("'"), any))
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,30 @@
1
+ module Treetop
2
+ class Protometagrammar
3
+ class TrailingBlockExpressionBuilder < ParsingExpressionBuilder
4
+ def build
5
+ choice(trailing_block, nothing)
6
+ end
7
+
8
+ def trailing_block
9
+ seq(:space, :block) do
10
+ def value(parsing_expression)
11
+ parsing_expression.node_class_eval(block.value)
12
+ return parsing_expression
13
+ end
14
+
15
+ def block
16
+ elements[1]
17
+ end
18
+ end
19
+ end
20
+
21
+ def nothing
22
+ exp('') do
23
+ def value(parsing_expression)
24
+ parsing_expression
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,11 @@
1
+ class Symbol
2
+ def to_proc
3
+ proc { |obj, *args| obj.send(self, *args) }
4
+ end
5
+ end
6
+
7
+ class String
8
+ def blank?
9
+ self == ""
10
+ end
11
+ end
metadata ADDED
@@ -0,0 +1,110 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.9.2
3
+ specification_version: 1
4
+ name: treetop
5
+ version: !ruby/object:Gem::Version
6
+ version: 0.1.0
7
+ date: 2007-05-22 00:00:00 -07:00
8
+ summary: A Ruby-based text parsing and interpretation DSL
9
+ require_paths:
10
+ - lib
11
+ email: nathansobo@gmail.com
12
+ homepage: http://functionalform.blogspot.com
13
+ rubyforge_project:
14
+ description:
15
+ autorequire: treetop
16
+ default_executable:
17
+ bindir: bin
18
+ has_rdoc: false
19
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
20
+ requirements:
21
+ - - ">"
22
+ - !ruby/object:Gem::Version
23
+ version: 0.0.0
24
+ version:
25
+ platform: ruby
26
+ signing_key:
27
+ cert_chain:
28
+ post_install_message:
29
+ authors:
30
+ - Nathan Sobo
31
+ files:
32
+ - lib/treetop
33
+ - lib/treetop/api
34
+ - lib/treetop/api/load_grammar.rb
35
+ - lib/treetop/api/malformed_grammar_exception.rb
36
+ - lib/treetop/api.rb
37
+ - lib/treetop/grammar
38
+ - lib/treetop/grammar/grammar.rb
39
+ - lib/treetop/grammar/grammar_builder.rb
40
+ - lib/treetop/grammar/parsing_expression_builder.rb
41
+ - lib/treetop/grammar/parsing_expression_builder_helper.rb
42
+ - lib/treetop/grammar/parsing_expressions
43
+ - lib/treetop/grammar/parsing_expressions/and_predicate.rb
44
+ - lib/treetop/grammar/parsing_expressions/anything_symbol.rb
45
+ - lib/treetop/grammar/parsing_expressions/character_class.rb
46
+ - lib/treetop/grammar/parsing_expressions/node_instantiating_parsing_expression.rb
47
+ - lib/treetop/grammar/parsing_expressions/node_propagating_parsing_expression.rb
48
+ - lib/treetop/grammar/parsing_expressions/nonterminal_symbol.rb
49
+ - lib/treetop/grammar/parsing_expressions/not_predicate.rb
50
+ - lib/treetop/grammar/parsing_expressions/one_or_more.rb
51
+ - lib/treetop/grammar/parsing_expressions/optional.rb
52
+ - lib/treetop/grammar/parsing_expressions/ordered_choice.rb
53
+ - lib/treetop/grammar/parsing_expressions/parsing_expression.rb
54
+ - lib/treetop/grammar/parsing_expressions/predicate.rb
55
+ - lib/treetop/grammar/parsing_expressions/repeating_parsing_expression.rb
56
+ - lib/treetop/grammar/parsing_expressions/sequence.rb
57
+ - lib/treetop/grammar/parsing_expressions/terminal_parsing_expression.rb
58
+ - lib/treetop/grammar/parsing_expressions/terminal_symbol.rb
59
+ - lib/treetop/grammar/parsing_expressions/zero_or_more.rb
60
+ - lib/treetop/grammar/parsing_expressions.rb
61
+ - lib/treetop/grammar/parsing_rule.rb
62
+ - lib/treetop/grammar.rb
63
+ - lib/treetop/metagrammar
64
+ - lib/treetop/metagrammar/metagrammar.rb
65
+ - lib/treetop/metagrammar/metagrammar.treetop
66
+ - lib/treetop/metagrammar.rb
67
+ - lib/treetop/parser
68
+ - lib/treetop/parser/node_cache.rb
69
+ - lib/treetop/parser/parse_cache.rb
70
+ - lib/treetop/parser/parse_failure.rb
71
+ - lib/treetop/parser/parse_result.rb
72
+ - lib/treetop/parser/parser.rb
73
+ - lib/treetop/parser/sequence_syntax_node.rb
74
+ - lib/treetop/parser/syntax_node.rb
75
+ - lib/treetop/parser/terminal_parse_failure.rb
76
+ - lib/treetop/parser/terminal_syntax_node.rb
77
+ - lib/treetop/parser.rb
78
+ - lib/treetop/protometagrammar
79
+ - lib/treetop/protometagrammar/anything_symbol_expression_builder.rb
80
+ - lib/treetop/protometagrammar/block_expression_builder.rb
81
+ - lib/treetop/protometagrammar/character_class_expression_builder.rb
82
+ - lib/treetop/protometagrammar/grammar_expression_builder.rb
83
+ - lib/treetop/protometagrammar/nonterminal_symbol_expression_builder.rb
84
+ - lib/treetop/protometagrammar/ordered_choice_expression_builder.rb
85
+ - lib/treetop/protometagrammar/parsing_rule_expression_builder.rb
86
+ - lib/treetop/protometagrammar/parsing_rule_sequence_expression_builder.rb
87
+ - lib/treetop/protometagrammar/prefix_expression_builder.rb
88
+ - lib/treetop/protometagrammar/primary_expression_builder.rb
89
+ - lib/treetop/protometagrammar/protometagrammar.rb
90
+ - lib/treetop/protometagrammar/sequence_expression_builder.rb
91
+ - lib/treetop/protometagrammar/suffix_expression_builder.rb
92
+ - lib/treetop/protometagrammar/terminal_symbol_expression_builder.rb
93
+ - lib/treetop/protometagrammar/trailing_block_expression_builder.rb
94
+ - lib/treetop/protometagrammar.rb
95
+ - lib/treetop/ruby_extension.rb
96
+ - lib/treetop.rb
97
+ test_files: []
98
+
99
+ rdoc_options: []
100
+
101
+ extra_rdoc_files: []
102
+
103
+ executables: []
104
+
105
+ extensions: []
106
+
107
+ requirements: []
108
+
109
+ dependencies: []
110
+