dhaka 2.0.1 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
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