dhaka 2.0.1 → 2.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 (48) hide show
  1. data/Rakefile +64 -0
  2. data/lib/dhaka.rb +12 -0
  3. data/lib/dot/dot.rb +29 -0
  4. data/lib/evaluator/evaluator.rb +35 -26
  5. data/lib/grammar/grammar.rb +42 -17
  6. data/lib/grammar/grammar_symbol.rb +4 -3
  7. data/lib/grammar/production.rb +9 -3
  8. data/lib/lexer/compiled_lexer.rb +46 -0
  9. data/lib/lexer/dfa.rb +71 -0
  10. data/lib/lexer/lexeme.rb +33 -0
  11. data/lib/lexer/lexer.rb +61 -0
  12. data/lib/lexer/lexer_run.rb +66 -0
  13. data/lib/lexer/regex_grammar.rb +368 -0
  14. data/lib/lexer/regex_parser.rb +1888 -0
  15. data/lib/lexer/regex_tokenizer.rb +14 -0
  16. data/lib/lexer/specification.rb +69 -0
  17. data/lib/lexer/state.rb +45 -0
  18. data/lib/lexer/state_machine.rb +37 -0
  19. data/lib/parser/action.rb +3 -3
  20. data/lib/parser/compiled_parser.rb +11 -3
  21. data/lib/parser/parse_result.rb +3 -5
  22. data/lib/parser/parse_tree.rb +6 -17
  23. data/lib/parser/parser.rb +15 -14
  24. data/lib/parser/parser_run.rb +4 -2
  25. data/lib/parser/parser_state.rb +16 -8
  26. data/lib/tokenizer/tokenizer.rb +5 -3
  27. data/test/arithmetic_precedence/arithmetic_precedence_lexer_specification.rb +23 -0
  28. data/test/arithmetic_precedence/arithmetic_precedence_parser_test.rb +4 -2
  29. data/test/chittagong/chittagong_driver.rb +12 -13
  30. data/test/chittagong/chittagong_driver_test.rb +18 -11
  31. data/test/chittagong/chittagong_evaluator.rb +7 -16
  32. data/test/chittagong/chittagong_evaluator_test.rb +7 -4
  33. data/test/chittagong/chittagong_grammar.rb +0 -6
  34. data/test/chittagong/chittagong_lexer.rb +109 -0
  35. data/test/chittagong/chittagong_lexer_specification.rb +39 -0
  36. data/test/chittagong/{chittagong_tokenizer_test.rb → chittagong_lexer_test.rb} +12 -6
  37. data/test/chittagong/chittagong_parser.rb +879 -0
  38. data/test/chittagong/chittagong_parser_test.rb +8 -10
  39. data/test/chittagong/chittagong_test.rb +17 -13
  40. data/test/compiled_parser_test.rb +7 -2
  41. data/test/evaluator_test.rb +0 -1
  42. data/test/grammar_test.rb +19 -1
  43. data/test/lexer_test.rb +215 -0
  44. data/test/parse_result_test.rb +8 -8
  45. data/test/parser_state_test.rb +0 -12
  46. metadata +21 -5
  47. data/test/arithmetic_precedence/arithmetic_precedence_tokenizer.rb +0 -39
  48. data/test/chittagong/chittagong_tokenizer.rb +0 -88
@@ -21,16 +21,4 @@ class TestParserState < Test::Unit::TestCase
21
21
  state = ParserState.new(nil, {item1 => item1, item2 => item2})
22
22
  assert_equal(["i'm item 1", "i'm item 2"], state.to_s(options).split("\n").sort)
23
23
  end
24
-
25
- def test_to_dot_method
26
- options = {:some_option => true}
27
- item1 = mock()
28
- item1.stubs(:to_s).with(options).returns("i'm item 1")
29
- item2 = mock()
30
- item2.stubs(:to_s).with(options).returns("i'm item 2")
31
- state = ParserState.new(nil, {item1 => item1, item2 => item2})
32
- state.stubs(:unique_name).returns("State1")
33
- assert(state.to_dot(options) =~ /^State1 \[label="(.+)\\n(.+)"\]/)
34
- assert_equal(["i'm item 1", "i'm item 2"], [$1, $2].sort)
35
- end
36
24
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.0
3
3
  specification_version: 1
4
4
  name: dhaka
5
5
  version: !ruby/object:Gem::Version
6
- version: 2.0.1
7
- date: 2007-02-11 00:00:00 -05:00
6
+ version: 2.1.0
7
+ date: 2007-03-11 00:00:00 -05:00
8
8
  summary: An LALR1 parser generator written in Ruby
9
9
  require_paths:
10
10
  - lib
@@ -30,12 +30,24 @@ authors:
30
30
  - Mushfeq Khan
31
31
  files:
32
32
  - lib/dhaka.rb
33
+ - lib/dot/dot.rb
33
34
  - lib/evaluator/evaluator.rb
34
35
  - lib/grammar/closure_hash.rb
35
36
  - lib/grammar/grammar.rb
36
37
  - lib/grammar/grammar_symbol.rb
37
38
  - lib/grammar/precedence.rb
38
39
  - lib/grammar/production.rb
40
+ - lib/lexer/compiled_lexer.rb
41
+ - lib/lexer/dfa.rb
42
+ - lib/lexer/lexeme.rb
43
+ - lib/lexer/lexer.rb
44
+ - lib/lexer/lexer_run.rb
45
+ - lib/lexer/regex_grammar.rb
46
+ - lib/lexer/regex_parser.rb
47
+ - lib/lexer/regex_tokenizer.rb
48
+ - lib/lexer/specification.rb
49
+ - lib/lexer/state.rb
50
+ - lib/lexer/state_machine.rb
39
51
  - lib/parser/action.rb
40
52
  - lib/parser/channel.rb
41
53
  - lib/parser/compiled_parser.rb
@@ -57,6 +69,7 @@ files:
57
69
  - test/fake_logger.rb
58
70
  - test/grammar_test.rb
59
71
  - test/lalr_but_not_slr_grammar.rb
72
+ - test/lexer_test.rb
60
73
  - test/malformed_grammar.rb
61
74
  - test/malformed_grammar_test.rb
62
75
  - test/nullable_grammar.rb
@@ -78,8 +91,8 @@ files:
78
91
  - test/arithmetic_precedence/arithmetic_precedence_evaluator.rb
79
92
  - test/arithmetic_precedence/arithmetic_precedence_grammar.rb
80
93
  - test/arithmetic_precedence/arithmetic_precedence_grammar_test.rb
94
+ - test/arithmetic_precedence/arithmetic_precedence_lexer_specification.rb
81
95
  - test/arithmetic_precedence/arithmetic_precedence_parser_test.rb
82
- - test/arithmetic_precedence/arithmetic_precedence_tokenizer.rb
83
96
  - test/brackets/bracket_grammar.rb
84
97
  - test/brackets/bracket_tokenizer.rb
85
98
  - test/brackets/brackets_test.rb
@@ -88,10 +101,13 @@ files:
88
101
  - test/chittagong/chittagong_evaluator.rb
89
102
  - test/chittagong/chittagong_evaluator_test.rb
90
103
  - test/chittagong/chittagong_grammar.rb
104
+ - test/chittagong/chittagong_lexer.rb
105
+ - test/chittagong/chittagong_lexer_specification.rb
106
+ - test/chittagong/chittagong_lexer_test.rb
107
+ - test/chittagong/chittagong_parser.rb
91
108
  - test/chittagong/chittagong_parser_test.rb
92
109
  - test/chittagong/chittagong_test.rb
93
- - test/chittagong/chittagong_tokenizer.rb
94
- - test/chittagong/chittagong_tokenizer_test.rb
110
+ - Rakefile
95
111
  test_files: []
96
112
 
97
113
  rdoc_options: []
@@ -1,39 +0,0 @@
1
- require File.dirname(__FILE__) + '/arithmetic_precedence_grammar'
2
-
3
- class ArithmeticPrecedenceTokenizer < Dhaka::Tokenizer
4
-
5
- digits = ('0'..'9').to_a
6
- parenths = %w| ( ) |
7
- operators = %w| - + / * ^ |
8
- functions = %w| h l |
9
- arg_separator = %w| , |
10
- whitespace = [' ']
11
-
12
- all_characters = digits + parenths + operators + functions + arg_separator + whitespace
13
-
14
- for_state Dhaka::TOKENIZER_IDLE_STATE do
15
- for_characters(all_characters - (digits + whitespace)) do
16
- create_token(curr_char, nil)
17
- advance
18
- end
19
- for_characters digits do
20
- create_token('n', '')
21
- switch_to :get_integer_literal
22
- end
23
- for_character whitespace do
24
- advance
25
- end
26
- end
27
-
28
- for_state :get_integer_literal do
29
- for_characters all_characters - digits do
30
- switch_to Dhaka::TOKENIZER_IDLE_STATE
31
- end
32
- for_characters digits do
33
- curr_token.value << curr_char
34
- advance
35
- end
36
- end
37
-
38
- end
39
-
@@ -1,88 +0,0 @@
1
- require File.dirname(__FILE__) + '/chittagong_grammar'
2
-
3
- class ChittagongTokenizer < Dhaka::Tokenizer
4
-
5
- KEYWORDS = %w| print if else end while def return |
6
-
7
- digits = ('0'..'9').to_a
8
- decimal_point = %w| . |
9
- letters = ('a'..'z').to_a
10
- parenths = %w| ( ) |
11
- operators = %w| - + / * ^ ! > < |
12
- equal_sign = %w| = |
13
- whitespace = [' ']
14
- arg_separator = %w| , |
15
- newline = ["\n"]
16
-
17
- all_characters = digits + decimal_point + letters + parenths + operators + whitespace + newline + arg_separator + equal_sign
18
-
19
- for_state Dhaka::TOKENIZER_IDLE_STATE do
20
- for_characters(all_characters - (digits + letters + newline + whitespace + equal_sign)) do
21
- create_token(curr_char, nil)
22
- advance
23
- end
24
- for_characters(equal_sign) do
25
- create_token('=', nil)
26
- advance
27
- switch_to :get_equal_sign_operator
28
- end
29
- for_characters digits do
30
- create_token('int_literal', '')
31
- switch_to :get_integer_literal
32
- end
33
- for_characters letters do
34
- create_token(nil, '')
35
- switch_to :get_word_literal
36
- end
37
- for_character newline do
38
- create_token('newline', nil)
39
- advance
40
- end
41
- for_character whitespace do
42
- advance
43
- end
44
- end
45
-
46
- for_state :get_equal_sign_operator do
47
- for_characters all_characters - equal_sign do
48
- switch_to Dhaka::TOKENIZER_IDLE_STATE
49
- end
50
- for_character equal_sign do
51
- curr_token.symbol_name << '='
52
- advance
53
- switch_to Dhaka::TOKENIZER_IDLE_STATE
54
- end
55
- end
56
-
57
- for_state :get_integer_literal do
58
- for_characters all_characters - digits do
59
- switch_to Dhaka::TOKENIZER_IDLE_STATE
60
- end
61
- for_characters digits do
62
- curr_token.value << curr_char
63
- advance
64
- end
65
- end
66
- # lipi:keywords
67
- for_state :get_word_literal do
68
- for_characters all_characters - letters do
69
- curr_token.symbol_name = word_literal_symbol(curr_token.value)
70
- switch_to Dhaka::TOKENIZER_IDLE_STATE
71
- end
72
- for_characters letters do
73
- curr_token.value << curr_char
74
- advance
75
- curr_token.symbol_name = word_literal_symbol(curr_token.value) unless curr_char
76
- end
77
- end
78
-
79
- def word_literal_symbol(value)
80
- if KEYWORDS.include? value
81
- value
82
- else
83
- 'word_literal'
84
- end
85
- end
86
- # lipi:keywords
87
-
88
- end