protobuf 1.0.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 (113) hide show
  1. data/.gitignore +5 -0
  2. data/Gemfile +3 -0
  3. data/Gemfile.lock +28 -0
  4. data/README.md +216 -0
  5. data/Rakefile +1 -0
  6. data/bin/rpc_server +117 -0
  7. data/bin/rprotoc +46 -0
  8. data/examples/addressbook.pb.rb +55 -0
  9. data/examples/addressbook.proto +24 -0
  10. data/examples/reading_a_message.rb +32 -0
  11. data/examples/writing_a_message.rb +46 -0
  12. data/lib/protobuf.rb +6 -0
  13. data/lib/protobuf/common/exceptions.rb +11 -0
  14. data/lib/protobuf/common/logger.rb +64 -0
  15. data/lib/protobuf/common/util.rb +59 -0
  16. data/lib/protobuf/common/wire_type.rb +10 -0
  17. data/lib/protobuf/compiler/compiler.rb +52 -0
  18. data/lib/protobuf/compiler/nodes.rb +323 -0
  19. data/lib/protobuf/compiler/proto.y +216 -0
  20. data/lib/protobuf/compiler/proto2.ebnf +79 -0
  21. data/lib/protobuf/compiler/proto_parser.rb +1425 -0
  22. data/lib/protobuf/compiler/template/rpc_bin.erb +4 -0
  23. data/lib/protobuf/compiler/template/rpc_client.erb +18 -0
  24. data/lib/protobuf/compiler/template/rpc_service.erb +25 -0
  25. data/lib/protobuf/compiler/template/rpc_service_implementation.erb +42 -0
  26. data/lib/protobuf/compiler/visitors.rb +302 -0
  27. data/lib/protobuf/descriptor/descriptor.proto +286 -0
  28. data/lib/protobuf/descriptor/descriptor.rb +55 -0
  29. data/lib/protobuf/descriptor/descriptor_builder.rb +143 -0
  30. data/lib/protobuf/descriptor/descriptor_proto.rb +138 -0
  31. data/lib/protobuf/descriptor/enum_descriptor.rb +33 -0
  32. data/lib/protobuf/descriptor/field_descriptor.rb +49 -0
  33. data/lib/protobuf/descriptor/file_descriptor.rb +37 -0
  34. data/lib/protobuf/message/decoder.rb +83 -0
  35. data/lib/protobuf/message/encoder.rb +46 -0
  36. data/lib/protobuf/message/enum.rb +62 -0
  37. data/lib/protobuf/message/extend.rb +8 -0
  38. data/lib/protobuf/message/field.rb +701 -0
  39. data/lib/protobuf/message/message.rb +402 -0
  40. data/lib/protobuf/message/protoable.rb +38 -0
  41. data/lib/protobuf/rpc/buffer.rb +74 -0
  42. data/lib/protobuf/rpc/client.rb +268 -0
  43. data/lib/protobuf/rpc/client_connection.rb +225 -0
  44. data/lib/protobuf/rpc/error.rb +34 -0
  45. data/lib/protobuf/rpc/error/client_error.rb +31 -0
  46. data/lib/protobuf/rpc/error/server_error.rb +43 -0
  47. data/lib/protobuf/rpc/rpc.pb.rb +107 -0
  48. data/lib/protobuf/rpc/server.rb +183 -0
  49. data/lib/protobuf/rpc/service.rb +244 -0
  50. data/lib/protobuf/rpc/stat.rb +70 -0
  51. data/lib/protobuf/version.rb +3 -0
  52. data/proto/rpc.proto +73 -0
  53. data/protobuf.gemspec +25 -0
  54. data/script/mk_parser +2 -0
  55. data/spec/functional/embedded_service_spec.rb +7 -0
  56. data/spec/proto/test.pb.rb +31 -0
  57. data/spec/proto/test.proto +31 -0
  58. data/spec/proto/test_service.rb +30 -0
  59. data/spec/proto/test_service_impl.rb +17 -0
  60. data/spec/spec_helper.rb +26 -0
  61. data/spec/unit/client_spec.rb +128 -0
  62. data/spec/unit/common/logger_spec.rb +121 -0
  63. data/spec/unit/enum_spec.rb +13 -0
  64. data/spec/unit/message_spec.rb +67 -0
  65. data/spec/unit/server_spec.rb +27 -0
  66. data/spec/unit/service_spec.rb +75 -0
  67. data/test/check_unbuild.rb +30 -0
  68. data/test/data/data.bin +3 -0
  69. data/test/data/data_source.py +14 -0
  70. data/test/data/types.bin +0 -0
  71. data/test/data/types_source.py +22 -0
  72. data/test/data/unk.png +0 -0
  73. data/test/proto/addressbook.pb.rb +66 -0
  74. data/test/proto/addressbook.proto +33 -0
  75. data/test/proto/addressbook_base.pb.rb +58 -0
  76. data/test/proto/addressbook_base.proto +26 -0
  77. data/test/proto/addressbook_ext.pb.rb +20 -0
  78. data/test/proto/addressbook_ext.proto +6 -0
  79. data/test/proto/collision.pb.rb +17 -0
  80. data/test/proto/collision.proto +5 -0
  81. data/test/proto/ext_collision.pb.rb +24 -0
  82. data/test/proto/ext_collision.proto +8 -0
  83. data/test/proto/ext_range.pb.rb +22 -0
  84. data/test/proto/ext_range.proto +7 -0
  85. data/test/proto/float_default.proto +10 -0
  86. data/test/proto/lowercase.pb.rb +30 -0
  87. data/test/proto/lowercase.proto +9 -0
  88. data/test/proto/merge.pb.rb +39 -0
  89. data/test/proto/merge.proto +15 -0
  90. data/test/proto/nested.pb.rb +30 -0
  91. data/test/proto/nested.proto +9 -0
  92. data/test/proto/optional_field.pb.rb +35 -0
  93. data/test/proto/optional_field.proto +12 -0
  94. data/test/proto/packed.pb.rb +22 -0
  95. data/test/proto/packed.proto +6 -0
  96. data/test/proto/rpc.proto +6 -0
  97. data/test/proto/types.pb.rb +84 -0
  98. data/test/proto/types.proto +37 -0
  99. data/test/test_addressbook.rb +56 -0
  100. data/test/test_compiler.rb +325 -0
  101. data/test/test_descriptor.rb +122 -0
  102. data/test/test_enum_value.rb +41 -0
  103. data/test/test_extension.rb +36 -0
  104. data/test/test_lowercase.rb +11 -0
  105. data/test/test_message.rb +128 -0
  106. data/test/test_optional_field.rb +103 -0
  107. data/test/test_packed_field.rb +40 -0
  108. data/test/test_parse.rb +15 -0
  109. data/test/test_repeated_types.rb +132 -0
  110. data/test/test_serialize.rb +61 -0
  111. data/test/test_standard_message.rb +96 -0
  112. data/test/test_types.rb +226 -0
  113. metadata +261 -0
@@ -0,0 +1,216 @@
1
+ class Protobuf::ProtoParser
2
+ rule
3
+ proto : proto_item
4
+ { result = Protobuf::Node::ProtoNode.new(val) }
5
+ | proto proto_item
6
+ { result.children << val[1] if val[1]}
7
+
8
+ proto_item : message
9
+ | extend
10
+ | enum
11
+ | import
12
+ | package
13
+ | option
14
+ | service
15
+ | ';' { result = nil }
16
+
17
+ import : 'import' STRING_LITERAL ';'
18
+ { result = Protobuf::Node::ImportNode.new(val[1]) }
19
+
20
+ package : 'package' IDENT dot_ident_list ';'
21
+ { result = Protobuf::Node::PackageNode.new(val[2].unshift(val[1])) }
22
+
23
+ dot_ident_list :
24
+ { result = [] }
25
+ | dot_ident_list '.' IDENT
26
+ { result << val[2] }
27
+
28
+ option : 'option' option_body ';'
29
+ { result = Protobuf::Node::OptionNode.new(*val[1]) }
30
+
31
+ option_body : IDENT dot_ident_list '=' constant
32
+ { result = [val[1].unshift(val[0]), val[3]] }
33
+
34
+ message : 'message' IDENT message_body
35
+ { result = Protobuf::Node::MessageNode.new(val[1], val[2]) }
36
+
37
+ extend : 'extend' user_type '{' extend_body_list '}'
38
+ { result = Protobuf::Node::ExtendNode.new(val[1], val[3]) }
39
+
40
+ extend_body_list :
41
+ { result = [] }
42
+ | extend_body_list extend_body
43
+ { result << val[1] if val[1] }
44
+
45
+ extend_body : field
46
+ | group
47
+ | ';' { result = nil }
48
+
49
+ enum : 'enum' IDENT '{' enum_body_list '}'
50
+ { result = Protobuf::Node::EnumNode.new(val[1], val[3]) }
51
+
52
+ enum_body_list :
53
+ { result = [] }
54
+ | enum_body_list enum_body
55
+ { result << val[1] if val[1] }
56
+
57
+ enum_body : option
58
+ | enum_field
59
+ | ';' { result = nil }
60
+
61
+ enum_field : IDENT '=' integer_literal ';'
62
+ { result = Protobuf::Node::EnumFieldNode.new(val[0], val[2]) }
63
+
64
+ service : 'service' IDENT '{' service_body_list '}'
65
+ { result = Protobuf::Node::ServiceNode.new(val[1], val[3]) }
66
+
67
+ service_body_list :
68
+ { result = [] }
69
+ | service_body_list service_body
70
+ { result << val[1] if val[1] }
71
+
72
+ service_body : option
73
+ | rpc
74
+ | ';' { result = nil}
75
+
76
+ rpc : 'rpc' IDENT '(' rpc_arg ')' 'returns' '(' rpc_arg ')' ';'
77
+ { result = Protobuf::Node::RpcNode.new(val[1], val[3], val[7]) }
78
+
79
+ rpc_arg :
80
+ | user_type
81
+
82
+ message_body : '{' message_body_body_list '}'
83
+ { result = val[1] }
84
+
85
+ message_body_body_list :
86
+ { result = [] }
87
+ | message_body_body_list message_body_body
88
+ { result << val[1] if val[1] }
89
+
90
+ message_body_body : field
91
+ | enum
92
+ | message
93
+ | extend
94
+ | extensions
95
+ | group
96
+ | option
97
+ | ';' { result = nil }
98
+
99
+ group : label 'group' CAMEL_IDENT '=' integer_literal message_body
100
+ { result = Protobuf::Node::GroupNode.new(val[0], val[2], val[4], val[5]) }
101
+
102
+ field : label type field_name '=' integer_literal ';'
103
+ { result = Protobuf::Node::FieldNode.new(val[0], val[1], val[2], val[4]) }
104
+ | label type field_name '=' integer_literal '[' field_option_list ']' ';'
105
+ { result = Protobuf::Node::FieldNode.new(val[0], val[1], val[2], val[4], val[6]) }
106
+
107
+ field_name : IDENT | "required" | "optional" | "repeated" | "import" | "package" | "option" | "message" | "extend" | "enum" | "service" | "rpc" | "returns" | "group" | "default" | "extensions" | "to" | "max" | "double" | "float" | "int32" | "int64" | "uint32" | "uint64" | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64" | "bool" | "string" | "bytes"
108
+
109
+ field_option_list : field_option
110
+ { result = val }
111
+ | field_option_list ',' field_option
112
+ { result << val[2] }
113
+
114
+ field_option : option_body
115
+ | 'default' '=' constant
116
+ { result = [:default, val[2]] }
117
+
118
+ extensions : 'extensions' extension comma_extension_list ';'
119
+ { result = Protobuf::Node::ExtensionsNode.new(val[2].unshift(val[1])) }
120
+
121
+ comma_extension_list :
122
+ { result = [] }
123
+ | ',' extension
124
+ { result << val[1] }
125
+
126
+ extension : integer_literal
127
+ { result = Protobuf::Node::ExtensionRangeNode.new(val[0]) }
128
+ | integer_literal 'to' integer_literal
129
+ { result = Protobuf::Node::ExtensionRangeNode.new(val[0], val[2]) }
130
+ | integer_literal 'to' 'max'
131
+ { result = Protobuf::Node::ExtensionRangeNode.new(val[0], :max) }
132
+
133
+ label : 'required'
134
+ | 'optional'
135
+ | 'repeated'
136
+
137
+ type : 'double' | 'float' | 'int32' | 'int64' | 'uint32' | 'uint64'
138
+ | 'sint32' | 'sint64' | 'fixed32' | 'fixed64' | 'sfixed32' | 'sfixed64'
139
+ | 'bool' | 'string' | 'bytes' | user_type
140
+
141
+ user_type : IDENT dot_ident_list
142
+ { result = val[1].unshift(val[0]) }
143
+ | '.' IDENT dot_ident_list
144
+ { result = val[1].unshift(val[0]) }
145
+
146
+ constant : IDENT
147
+ | integer_literal
148
+ | FLOAT_LITERAL
149
+ | STRING_LITERAL
150
+ | BOOLEAN_LITERAL
151
+
152
+ integer_literal : DEC_INTEGER
153
+ | HEX_INTEGER
154
+ | OCT_INTEGER
155
+ end
156
+
157
+ ---- inner
158
+
159
+ require 'strscan'
160
+
161
+ def parse(f)
162
+ @scanner = StringScanner.new(f.read)
163
+ yyparse(self, :scan)
164
+ end
165
+
166
+ def scan_debug
167
+ scan do |token, value|
168
+ p [token, value]
169
+ yield [token, value]
170
+ end
171
+ end
172
+
173
+ def scan
174
+ until @scanner.eos?
175
+ case
176
+ when match(/\s+/, /\/\/.*/)
177
+ # skip
178
+ when match(/\/\*/)
179
+ # C-like comment
180
+ raise 'EOF inside block comment' until @scanner.scan_until(/\*\//)
181
+ when match(/(?:required|optional|repeated|import|package|option|message|extend|enum|service|rpc|returns|group|default|extensions|to|max|double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes)\b/)
182
+ yield [@token, @token.to_sym]
183
+ when match(/[+-]?\d*\.\d+([Ee][\+-]?\d+)?/)
184
+ yield [:FLOAT_LITERAL, @token.to_f]
185
+ when match(/[+-]?[1-9]\d*(?!\.)/, /0(?![.xX0-9])/)
186
+ yield [:DEC_INTEGER, @token.to_i]
187
+ when match(/0[xX]([A-Fa-f0-9])+/)
188
+ yield [:HEX_INTEGER, @token.to_i(0)]
189
+ when match(/0[0-7]+/)
190
+ yield [:OCT_INTEGER, @token.to_i(0)]
191
+ when match(/(true|false)\b/)
192
+ yield [:BOOLEAN_LITERAL, @token == 'true']
193
+ when match(/"(?:[^"\\]+|\\.)*"/, /'(?:[^'\\]+|\\.)*'/)
194
+ yield [:STRING_LITERAL, eval(@token)]
195
+ when match(/[a-zA-Z_]\w*/)
196
+ yield [:IDENT, @token.to_sym]
197
+ when match(/[A-Z]\w*/)
198
+ yield [:CAMEL_IDENT, @token.to_sym]
199
+ when match(/./)
200
+ yield [@token, @token]
201
+ else
202
+ raise "parse error around #{@scanner.string[@scanner.pos, 32].inspect}"
203
+ end
204
+ end
205
+ yield [false, nil]
206
+ end
207
+
208
+ def match(*regular_expressions)
209
+ regular_expressions.each do |re|
210
+ if @scanner.scan(re)
211
+ @token = @scanner[0]
212
+ return true
213
+ end
214
+ end
215
+ false
216
+ end
@@ -0,0 +1,79 @@
1
+ # See: http://groups.google.com/group/protobuf/browse_thread/thread/1cccfc624cd612da
2
+
3
+ proto ::= ( message | extend | enum | import | package | option | ";" )*
4
+
5
+ import ::= "import" strLit ";"
6
+
7
+ package ::= "package" ident ( "." ident )* ";"
8
+
9
+ option ::= "option" optionBody ";"
10
+
11
+ optionBody ::= ident ( "." ident )* "=" constant
12
+
13
+ message ::= "message" ident messageBody
14
+
15
+ extend ::= "extend" userType "{" ( field | group | ";" )* "}"
16
+
17
+ enum ::= "enum" ident "{" ( option | enumField | ";" )* "}"
18
+
19
+ enumField ::= ident "=" intLit ";"
20
+
21
+ service ::= "service" ident "{" ( option | rpc | ";" )* "}"
22
+
23
+ rpc ::= "rpc" ident "(" userType ")" "returns" "(" userType ")" ";"
24
+
25
+ messageBody ::= "{" ( field | enum | message | extend | extensions | group | option | ":" )* "}"
26
+
27
+ group ::= label "group" camelIdent "=" intLit messageBody
28
+
29
+ field ::= label type ident "=" intLit ( "[" fieldOption ( "," fieldOption )* "]" )? ";"
30
+ # tag number must be 2^29-1 or lower, not 0, and not 19000-19999 (reserved)
31
+
32
+ fieldOption ::= optionBody | "default" "=" constant
33
+
34
+ # extension numbers must not overlap with field or other extension numbers
35
+ extensions ::= "extensions" extension ( "," extension )* ";"
36
+
37
+ extension ::= intLit ( "to" ( intLit | "max" ) )?
38
+
39
+ label ::= "required" | "optional" | "repeated"
40
+
41
+ type ::= "double" | "float" | "int32" | "int64" | "uint32" | "uint64"
42
+ | "sint32" | "sint64" | "fixed32" | "fixed64" | "sfixed32" | "sfixed64"
43
+ | "bool" | "string" | "bytes" | userType
44
+
45
+ # leading dot for identifiers means they're fully qualified
46
+ userType ::= "."? ident ( "." ident )*
47
+
48
+ constant ::= ident | intLit | floatLit | strLit | boolLit
49
+
50
+ ident ::= /[A-Za-z_][\w_]*/
51
+
52
+ # according to parser.cc, group names must start with a capital letter as a
53
+ # hack for backwards-compatibility
54
+ camelIdent ::= /[A-Z][\w_]*/
55
+
56
+ intLit ::= decInt | hexInt | octInt
57
+
58
+ decInt ::= /[1-9]\d*/
59
+
60
+ hexInt ::= /0[xX]([A-Fa-f0-9])+/
61
+
62
+ octInt ::= /0[0-7]+/
63
+
64
+ # allow_f_after_float_ is disabled by default in tokenizer.cc
65
+ floatLit ::= /\d+(\.\d+)?([Ee][\+-]?\d+)?/
66
+
67
+ boolLit ::= "true" | "false"
68
+
69
+ # contents must not contain unescaped quote character
70
+ strLit ::= quote ( hexEscape | octEscape | charEscape | /[^\0\n]/ )* quote
71
+
72
+ quote ::= /["']/
73
+
74
+ hexEscape ::= /\\[Xx][A-Fa-f0-9]{1,2}/
75
+
76
+ octEscape ::= /\\0?[0-7]{1,3}/
77
+
78
+ charEscape ::= /\\[abfnrtv\\\?'"]/
79
+
@@ -0,0 +1,1425 @@
1
+ #
2
+ # DO NOT MODIFY!!!!
3
+ # This file is automatically generated by racc 1.4.5
4
+ # from racc grammer file "lib/protobuf/compiler/proto.y".
5
+ #
6
+ #
7
+ # lib/protobuf/compiler/proto_parser.rb: generated by racc (runtime embedded)
8
+ #
9
+ ###### racc/parser.rb begin
10
+ unless $".index 'racc/parser.rb'
11
+ $".push 'racc/parser.rb'
12
+
13
+ self.class.module_eval <<'..end racc/parser.rb modeval..id24fd9e97a6', 'racc/parser.rb', 1
14
+ #
15
+ # $Id: parser.rb,v 1.7 2005/11/20 17:31:32 aamine Exp $
16
+ #
17
+ # Copyright (c) 1999-2005 Minero Aoki
18
+ #
19
+ # This program is free software.
20
+ # You can distribute/modify this program under the same terms of ruby.
21
+ #
22
+ # As a special exception, when this code is copied by Racc
23
+ # into a Racc output file, you may use that output file
24
+ # without restriction.
25
+ #
26
+
27
+ unless defined?(NotImplementedError)
28
+ NotImplementedError = NotImplementError
29
+ end
30
+
31
+ module Racc
32
+ class ParseError < StandardError; end
33
+ end
34
+ unless defined?(::ParseError)
35
+ ParseError = Racc::ParseError
36
+ end
37
+
38
+ module Racc
39
+
40
+ unless defined?(Racc_No_Extentions)
41
+ Racc_No_Extentions = false
42
+ end
43
+
44
+ class Parser
45
+
46
+ Racc_Runtime_Version = '1.4.5'
47
+ Racc_Runtime_Revision = '$Revision: 1.7 $'.split[1]
48
+
49
+ Racc_Runtime_Core_Version_R = '1.4.5'
50
+ Racc_Runtime_Core_Revision_R = '$Revision: 1.7 $'.split[1]
51
+ begin
52
+ require 'racc/cparse'
53
+ # Racc_Runtime_Core_Version_C = (defined in extention)
54
+ Racc_Runtime_Core_Revision_C = Racc_Runtime_Core_Id_C.split[2]
55
+ unless new.respond_to?(:_racc_do_parse_c, true)
56
+ raise LoadError, 'old cparse.so'
57
+ end
58
+ if Racc_No_Extentions
59
+ raise LoadError, 'selecting ruby version of racc runtime core'
60
+ end
61
+
62
+ Racc_Main_Parsing_Routine = :_racc_do_parse_c
63
+ Racc_YY_Parse_Method = :_racc_yyparse_c
64
+ Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_C
65
+ Racc_Runtime_Core_Revision = Racc_Runtime_Core_Revision_C
66
+ Racc_Runtime_Type = 'c'
67
+ rescue LoadError
68
+ $stderr.puts $!
69
+ Racc_Main_Parsing_Routine = :_racc_do_parse_rb
70
+ Racc_YY_Parse_Method = :_racc_yyparse_rb
71
+ Racc_Runtime_Core_Version = Racc_Runtime_Core_Version_R
72
+ Racc_Runtime_Core_Revision = Racc_Runtime_Core_Revision_R
73
+ Racc_Runtime_Type = 'ruby'
74
+ end
75
+
76
+ def Parser.racc_runtime_type
77
+ Racc_Runtime_Type
78
+ end
79
+
80
+ private
81
+
82
+ def _racc_setup
83
+ @yydebug = false unless self.class::Racc_debug_parser
84
+ @yydebug = false unless defined?(@yydebug)
85
+ if @yydebug
86
+ @racc_debug_out = $stderr unless defined?(@racc_debug_out)
87
+ @racc_debug_out ||= $stderr
88
+ end
89
+ arg = self.class::Racc_arg
90
+ arg[13] = true if arg.size < 14
91
+ arg
92
+ end
93
+
94
+ def _racc_init_sysvars
95
+ @racc_state = [0]
96
+ @racc_tstack = []
97
+ @racc_vstack = []
98
+
99
+ @racc_t = nil
100
+ @racc_val = nil
101
+
102
+ @racc_read_next = true
103
+
104
+ @racc_user_yyerror = false
105
+ @racc_error_status = 0
106
+ end
107
+
108
+ ###
109
+ ### do_parse
110
+ ###
111
+
112
+ def do_parse
113
+ __send__(Racc_Main_Parsing_Routine, _racc_setup(), false)
114
+ end
115
+
116
+ def next_token
117
+ raise NotImplementedError, "#{self.class}\#next_token is not defined"
118
+ end
119
+
120
+ def _racc_do_parse_rb(arg, in_debug)
121
+ action_table, action_check, action_default, action_pointer,
122
+ goto_table, goto_check, goto_default, goto_pointer,
123
+ nt_base, reduce_table, token_table, shift_n,
124
+ reduce_n, use_result, * = arg
125
+
126
+ _racc_init_sysvars
127
+ tok = act = i = nil
128
+ nerr = 0
129
+
130
+ catch(:racc_end_parse) {
131
+ while true
132
+ if i = action_pointer[@racc_state[-1]]
133
+ if @racc_read_next
134
+ if @racc_t != 0 # not EOF
135
+ tok, @racc_val = next_token()
136
+ unless tok # EOF
137
+ @racc_t = 0
138
+ else
139
+ @racc_t = (token_table[tok] or 1) # error token
140
+ end
141
+ racc_read_token(@racc_t, tok, @racc_val) if @yydebug
142
+ @racc_read_next = false
143
+ end
144
+ end
145
+ i += @racc_t
146
+ unless i >= 0 and
147
+ act = action_table[i] and
148
+ action_check[i] == @racc_state[-1]
149
+ act = action_default[@racc_state[-1]]
150
+ end
151
+ else
152
+ act = action_default[@racc_state[-1]]
153
+ end
154
+ while act = _racc_evalact(act, arg)
155
+ ;
156
+ end
157
+ end
158
+ }
159
+ end
160
+
161
+ ###
162
+ ### yyparse
163
+ ###
164
+
165
+ def yyparse(recv, mid)
166
+ __send__(Racc_YY_Parse_Method, recv, mid, _racc_setup(), true)
167
+ end
168
+
169
+ def _racc_yyparse_rb(recv, mid, arg, c_debug)
170
+ action_table, action_check, action_default, action_pointer,
171
+ goto_table, goto_check, goto_default, goto_pointer,
172
+ nt_base, reduce_table, token_table, shift_n,
173
+ reduce_n, use_result, * = arg
174
+
175
+ _racc_init_sysvars
176
+ tok = nil
177
+ act = nil
178
+ i = nil
179
+ nerr = 0
180
+
181
+ catch(:racc_end_parse) {
182
+ until i = action_pointer[@racc_state[-1]]
183
+ while act = _racc_evalact(action_default[@racc_state[-1]], arg)
184
+ ;
185
+ end
186
+ end
187
+ recv.__send__(mid) do |tok, val|
188
+ unless tok
189
+ @racc_t = 0
190
+ else
191
+ @racc_t = (token_table[tok] or 1) # error token
192
+ end
193
+ @racc_val = val
194
+ @racc_read_next = false
195
+
196
+ i += @racc_t
197
+ unless i >= 0 and
198
+ act = action_table[i] and
199
+ action_check[i] == @racc_state[-1]
200
+ act = action_default[@racc_state[-1]]
201
+ end
202
+ while act = _racc_evalact(act, arg)
203
+ ;
204
+ end
205
+
206
+ while not (i = action_pointer[@racc_state[-1]]) or
207
+ not @racc_read_next or
208
+ @racc_t == 0 # $
209
+ unless i and i += @racc_t and
210
+ i >= 0 and
211
+ act = action_table[i] and
212
+ action_check[i] == @racc_state[-1]
213
+ act = action_default[@racc_state[-1]]
214
+ end
215
+ while act = _racc_evalact(act, arg)
216
+ ;
217
+ end
218
+ end
219
+ end
220
+ }
221
+ end
222
+
223
+ ###
224
+ ### common
225
+ ###
226
+
227
+ def _racc_evalact(act, arg)
228
+ action_table, action_check, action_default, action_pointer,
229
+ goto_table, goto_check, goto_default, goto_pointer,
230
+ nt_base, reduce_table, token_table, shift_n,
231
+ reduce_n, use_result, * = arg
232
+ nerr = 0 # tmp
233
+
234
+ if act > 0 and act < shift_n
235
+ #
236
+ # shift
237
+ #
238
+ if @racc_error_status > 0
239
+ @racc_error_status -= 1 unless @racc_t == 1 # error token
240
+ end
241
+ @racc_vstack.push @racc_val
242
+ @racc_state.push act
243
+ @racc_read_next = true
244
+ if @yydebug
245
+ @racc_tstack.push @racc_t
246
+ racc_shift @racc_t, @racc_tstack, @racc_vstack
247
+ end
248
+
249
+ elsif act < 0 and act > -reduce_n
250
+ #
251
+ # reduce
252
+ #
253
+ code = catch(:racc_jump) {
254
+ @racc_state.push _racc_do_reduce(arg, act)
255
+ false
256
+ }
257
+ if code
258
+ case code
259
+ when 1 # yyerror
260
+ @racc_user_yyerror = true # user_yyerror
261
+ return -reduce_n
262
+ when 2 # yyaccept
263
+ return shift_n
264
+ else
265
+ raise '[Racc Bug] unknown jump code'
266
+ end
267
+ end
268
+
269
+ elsif act == shift_n
270
+ #
271
+ # accept
272
+ #
273
+ racc_accept if @yydebug
274
+ throw :racc_end_parse, @racc_vstack[0]
275
+
276
+ elsif act == -reduce_n
277
+ #
278
+ # error
279
+ #
280
+ case @racc_error_status
281
+ when 0
282
+ unless arg[21] # user_yyerror
283
+ nerr += 1
284
+ on_error @racc_t, @racc_val, @racc_vstack
285
+ end
286
+ when 3
287
+ if @racc_t == 0 # is $
288
+ throw :racc_end_parse, nil
289
+ end
290
+ @racc_read_next = true
291
+ end
292
+ @racc_user_yyerror = false
293
+ @racc_error_status = 3
294
+ while true
295
+ if i = action_pointer[@racc_state[-1]]
296
+ i += 1 # error token
297
+ if i >= 0 and
298
+ (act = action_table[i]) and
299
+ action_check[i] == @racc_state[-1]
300
+ break
301
+ end
302
+ end
303
+ throw :racc_end_parse, nil if @racc_state.size <= 1
304
+ @racc_state.pop
305
+ @racc_vstack.pop
306
+ if @yydebug
307
+ @racc_tstack.pop
308
+ racc_e_pop @racc_state, @racc_tstack, @racc_vstack
309
+ end
310
+ end
311
+ return act
312
+
313
+ else
314
+ raise "[Racc Bug] unknown action #{act.inspect}"
315
+ end
316
+
317
+ racc_next_state(@racc_state[-1], @racc_state) if @yydebug
318
+
319
+ nil
320
+ end
321
+
322
+ def _racc_do_reduce(arg, act)
323
+ action_table, action_check, action_default, action_pointer,
324
+ goto_table, goto_check, goto_default, goto_pointer,
325
+ nt_base, reduce_table, token_table, shift_n,
326
+ reduce_n, use_result, * = arg
327
+ state = @racc_state
328
+ vstack = @racc_vstack
329
+ tstack = @racc_tstack
330
+
331
+ i = act * -3
332
+ len = reduce_table[i]
333
+ reduce_to = reduce_table[i+1]
334
+ method_id = reduce_table[i+2]
335
+ void_array = []
336
+
337
+ tmp_t = tstack[-len, len] if @yydebug
338
+ tmp_v = vstack[-len, len]
339
+ tstack[-len, len] = void_array if @yydebug
340
+ vstack[-len, len] = void_array
341
+ state[-len, len] = void_array
342
+
343
+ # tstack must be updated AFTER method call
344
+ if use_result
345
+ vstack.push __send__(method_id, tmp_v, vstack, tmp_v[0])
346
+ else
347
+ vstack.push __send__(method_id, tmp_v, vstack)
348
+ end
349
+ tstack.push reduce_to
350
+
351
+ racc_reduce(tmp_t, reduce_to, tstack, vstack) if @yydebug
352
+
353
+ k1 = reduce_to - nt_base
354
+ if i = goto_pointer[k1]
355
+ i += state[-1]
356
+ if i >= 0 and (curstate = goto_table[i]) and goto_check[i] == k1
357
+ return curstate
358
+ end
359
+ end
360
+ goto_default[k1]
361
+ end
362
+
363
+ def on_error(t, val, vstack)
364
+ raise ParseError, sprintf("\nparse error on value %s (%s)",
365
+ val.inspect, token_to_str(t) || '?')
366
+ end
367
+
368
+ def yyerror
369
+ throw :racc_jump, 1
370
+ end
371
+
372
+ def yyaccept
373
+ throw :racc_jump, 2
374
+ end
375
+
376
+ def yyerrok
377
+ @racc_error_status = 0
378
+ end
379
+
380
+ #
381
+ # for debugging output
382
+ #
383
+
384
+ def racc_read_token(t, tok, val)
385
+ @racc_debug_out.print 'read '
386
+ @racc_debug_out.print tok.inspect, '(', racc_token2str(t), ') '
387
+ @racc_debug_out.puts val.inspect
388
+ @racc_debug_out.puts
389
+ end
390
+
391
+ def racc_shift(tok, tstack, vstack)
392
+ @racc_debug_out.puts "shift #{racc_token2str tok}"
393
+ racc_print_stacks tstack, vstack
394
+ @racc_debug_out.puts
395
+ end
396
+
397
+ def racc_reduce(toks, sim, tstack, vstack)
398
+ out = @racc_debug_out
399
+ out.print 'reduce '
400
+ if toks.empty?
401
+ out.print ' <none>'
402
+ else
403
+ toks.each {|t| out.print ' ', racc_token2str(t) }
404
+ end
405
+ out.puts " --> #{racc_token2str(sim)}"
406
+
407
+ racc_print_stacks tstack, vstack
408
+ @racc_debug_out.puts
409
+ end
410
+
411
+ def racc_accept
412
+ @racc_debug_out.puts 'accept'
413
+ @racc_debug_out.puts
414
+ end
415
+
416
+ def racc_e_pop(state, tstack, vstack)
417
+ @racc_debug_out.puts 'error recovering mode: pop token'
418
+ racc_print_states state
419
+ racc_print_stacks tstack, vstack
420
+ @racc_debug_out.puts
421
+ end
422
+
423
+ def racc_next_state(curstate, state)
424
+ @racc_debug_out.puts "goto #{curstate}"
425
+ racc_print_states state
426
+ @racc_debug_out.puts
427
+ end
428
+
429
+ def racc_print_stacks(t, v)
430
+ out = @racc_debug_out
431
+ out.print ' ['
432
+ t.each_index do |i|
433
+ out.print ' (', racc_token2str(t[i]), ' ', v[i].inspect, ')'
434
+ end
435
+ out.puts ' ]'
436
+ end
437
+
438
+ def racc_print_states(s)
439
+ out = @racc_debug_out
440
+ out.print ' ['
441
+ s.each {|st| out.print ' ', st }
442
+ out.puts ' ]'
443
+ end
444
+
445
+ def racc_token2str(tok)
446
+ self.class::Racc_token_to_s_table[tok] or
447
+ raise "[Racc Bug] can't convert token #{tok} to string"
448
+ end
449
+
450
+ def token_to_str(t)
451
+ self.class::Racc_token_to_s_table[t]
452
+ end
453
+
454
+ end
455
+
456
+ end
457
+ ..end racc/parser.rb modeval..id24fd9e97a6
458
+ end
459
+ ###### racc/parser.rb end
460
+
461
+
462
+ module Protobuf
463
+
464
+ class ProtoParser < Racc::Parser
465
+
466
+ module_eval <<'..end lib/protobuf/compiler/proto.y modeval..id110d2bf917', 'lib/protobuf/compiler/proto.y', 158
467
+
468
+ require 'strscan'
469
+
470
+ def parse(f)
471
+ @scanner = StringScanner.new(f.read)
472
+ yyparse(self, :scan)
473
+ end
474
+
475
+ def scan_debug
476
+ scan do |token, value|
477
+ p [token, value]
478
+ yield [token, value]
479
+ end
480
+ end
481
+
482
+ def scan
483
+ until @scanner.eos?
484
+ case
485
+ when match(/\s+/, /\/\/.*/)
486
+ # skip
487
+ when match(/\/\*/)
488
+ # C-like comment
489
+ raise 'EOF inside block comment' until @scanner.scan_until(/\*\//)
490
+ when match(/(?:required|optional|repeated|import|package|option|message|extend|enum|service|rpc|returns|group|default|extensions|to|max|double|float|int32|int64|uint32|uint64|sint32|sint64|fixed32|fixed64|sfixed32|sfixed64|bool|string|bytes)\b/)
491
+ yield [@token, @token.to_sym]
492
+ when match(/[+-]?\d*\.\d+([Ee][\+-]?\d+)?/)
493
+ yield [:FLOAT_LITERAL, @token.to_f]
494
+ when match(/[+-]?[1-9]\d*(?!\.)/, /0(?![.xX0-9])/)
495
+ yield [:DEC_INTEGER, @token.to_i]
496
+ when match(/0[xX]([A-Fa-f0-9])+/)
497
+ yield [:HEX_INTEGER, @token.to_i(0)]
498
+ when match(/0[0-7]+/)
499
+ yield [:OCT_INTEGER, @token.to_i(0)]
500
+ when match(/(true|false)\b/)
501
+ yield [:BOOLEAN_LITERAL, @token == 'true']
502
+ when match(/"(?:[^"\\]+|\\.)*"/, /'(?:[^'\\]+|\\.)*'/)
503
+ yield [:STRING_LITERAL, eval(@token)]
504
+ when match(/[a-zA-Z_]\w*/)
505
+ yield [:IDENT, @token.to_sym]
506
+ when match(/[A-Z]\w*/)
507
+ yield [:CAMEL_IDENT, @token.to_sym]
508
+ when match(/./)
509
+ yield [@token, @token]
510
+ else
511
+ raise "parse error around #{@scanner.string[@scanner.pos, 32].inspect}"
512
+ end
513
+ end
514
+ yield [false, nil]
515
+ end
516
+
517
+ def match(*regular_expressions)
518
+ regular_expressions.each do |re|
519
+ if @scanner.scan(re)
520
+ @token = @scanner[0]
521
+ return true
522
+ end
523
+ end
524
+ false
525
+ end
526
+ ..end lib/protobuf/compiler/proto.y modeval..id110d2bf917
527
+
528
+ ##### racc 1.4.5 generates ###
529
+
530
+ racc_reduce_table = [
531
+ 0, 0, :racc_error,
532
+ 1, 53, :_reduce_1,
533
+ 2, 53, :_reduce_2,
534
+ 1, 54, :_reduce_none,
535
+ 1, 54, :_reduce_none,
536
+ 1, 54, :_reduce_none,
537
+ 1, 54, :_reduce_none,
538
+ 1, 54, :_reduce_none,
539
+ 1, 54, :_reduce_none,
540
+ 1, 54, :_reduce_none,
541
+ 1, 54, :_reduce_10,
542
+ 3, 58, :_reduce_11,
543
+ 4, 59, :_reduce_12,
544
+ 0, 62, :_reduce_13,
545
+ 3, 62, :_reduce_14,
546
+ 3, 60, :_reduce_15,
547
+ 4, 63, :_reduce_16,
548
+ 3, 55, :_reduce_17,
549
+ 5, 56, :_reduce_18,
550
+ 0, 67, :_reduce_19,
551
+ 2, 67, :_reduce_20,
552
+ 1, 68, :_reduce_none,
553
+ 1, 68, :_reduce_none,
554
+ 1, 68, :_reduce_23,
555
+ 5, 57, :_reduce_24,
556
+ 0, 71, :_reduce_25,
557
+ 2, 71, :_reduce_26,
558
+ 1, 72, :_reduce_none,
559
+ 1, 72, :_reduce_none,
560
+ 1, 72, :_reduce_29,
561
+ 4, 73, :_reduce_30,
562
+ 5, 61, :_reduce_31,
563
+ 0, 75, :_reduce_32,
564
+ 2, 75, :_reduce_33,
565
+ 1, 76, :_reduce_none,
566
+ 1, 76, :_reduce_none,
567
+ 1, 76, :_reduce_36,
568
+ 10, 77, :_reduce_37,
569
+ 0, 78, :_reduce_none,
570
+ 1, 78, :_reduce_none,
571
+ 3, 65, :_reduce_40,
572
+ 0, 79, :_reduce_41,
573
+ 2, 79, :_reduce_42,
574
+ 1, 80, :_reduce_none,
575
+ 1, 80, :_reduce_none,
576
+ 1, 80, :_reduce_none,
577
+ 1, 80, :_reduce_none,
578
+ 1, 80, :_reduce_none,
579
+ 1, 80, :_reduce_none,
580
+ 1, 80, :_reduce_none,
581
+ 1, 80, :_reduce_50,
582
+ 6, 70, :_reduce_51,
583
+ 6, 69, :_reduce_52,
584
+ 9, 69, :_reduce_53,
585
+ 1, 84, :_reduce_none,
586
+ 1, 84, :_reduce_none,
587
+ 1, 84, :_reduce_none,
588
+ 1, 84, :_reduce_none,
589
+ 1, 84, :_reduce_none,
590
+ 1, 84, :_reduce_none,
591
+ 1, 84, :_reduce_none,
592
+ 1, 84, :_reduce_none,
593
+ 1, 84, :_reduce_none,
594
+ 1, 84, :_reduce_none,
595
+ 1, 84, :_reduce_none,
596
+ 1, 84, :_reduce_none,
597
+ 1, 84, :_reduce_none,
598
+ 1, 84, :_reduce_none,
599
+ 1, 84, :_reduce_none,
600
+ 1, 84, :_reduce_none,
601
+ 1, 84, :_reduce_none,
602
+ 1, 84, :_reduce_none,
603
+ 1, 84, :_reduce_none,
604
+ 1, 84, :_reduce_none,
605
+ 1, 84, :_reduce_none,
606
+ 1, 84, :_reduce_none,
607
+ 1, 84, :_reduce_none,
608
+ 1, 84, :_reduce_none,
609
+ 1, 84, :_reduce_none,
610
+ 1, 84, :_reduce_none,
611
+ 1, 84, :_reduce_none,
612
+ 1, 84, :_reduce_none,
613
+ 1, 84, :_reduce_none,
614
+ 1, 84, :_reduce_none,
615
+ 1, 84, :_reduce_none,
616
+ 1, 84, :_reduce_none,
617
+ 1, 84, :_reduce_none,
618
+ 1, 85, :_reduce_87,
619
+ 3, 85, :_reduce_88,
620
+ 1, 86, :_reduce_none,
621
+ 3, 86, :_reduce_90,
622
+ 4, 81, :_reduce_91,
623
+ 0, 88, :_reduce_92,
624
+ 2, 88, :_reduce_93,
625
+ 1, 87, :_reduce_94,
626
+ 3, 87, :_reduce_95,
627
+ 3, 87, :_reduce_96,
628
+ 1, 82, :_reduce_none,
629
+ 1, 82, :_reduce_none,
630
+ 1, 82, :_reduce_none,
631
+ 1, 83, :_reduce_none,
632
+ 1, 83, :_reduce_none,
633
+ 1, 83, :_reduce_none,
634
+ 1, 83, :_reduce_none,
635
+ 1, 83, :_reduce_none,
636
+ 1, 83, :_reduce_none,
637
+ 1, 83, :_reduce_none,
638
+ 1, 83, :_reduce_none,
639
+ 1, 83, :_reduce_none,
640
+ 1, 83, :_reduce_none,
641
+ 1, 83, :_reduce_none,
642
+ 1, 83, :_reduce_none,
643
+ 1, 83, :_reduce_none,
644
+ 1, 83, :_reduce_none,
645
+ 1, 83, :_reduce_none,
646
+ 1, 83, :_reduce_none,
647
+ 2, 66, :_reduce_116,
648
+ 3, 66, :_reduce_117,
649
+ 1, 64, :_reduce_none,
650
+ 1, 64, :_reduce_none,
651
+ 1, 64, :_reduce_none,
652
+ 1, 64, :_reduce_none,
653
+ 1, 64, :_reduce_none,
654
+ 1, 74, :_reduce_none,
655
+ 1, 74, :_reduce_none,
656
+ 1, 74, :_reduce_none ]
657
+
658
+ racc_reduce_n = 126
659
+
660
+ racc_shift_n = 184
661
+
662
+ racc_action_table = [
663
+ 74, 51, 77, 19, 20, 74, 25, 77, 67, 60,
664
+ 32, 47, 53, 63, 14, 14, 43, 107, 39, 68,
665
+ 61, 38, 69, 50, 54, 56, 110, 170, 106, 109,
666
+ 94, 96, 97, 98, 99, 100, 101, 103, 104, 105,
667
+ 108, 93, 95, 72, 73, 75, 76, 78, 72, 73,
668
+ 75, 76, 78, 123, 111, 131, 134, 43, 141, 48,
669
+ 147, 116, 19, 20, 122, 126, 130, 19, 20, 140,
670
+ 144, 75, 76, 78, 120, 124, 127, 129, 133, 136,
671
+ 139, 143, 146, 115, 118, 119, 121, 125, 128, 132,
672
+ 135, 138, 142, 145, 114, 117, 83, 167, 176, 75,
673
+ 76, 78, 14, 25, 16, 1, 159, 85, 6, 75,
674
+ 76, 78, 75, 76, 78, 19, 20, 166, 50, 54,
675
+ 56, 177, 91, 35, 170, 75, 76, 78, 27, 34,
676
+ 4, 7, 148, 11, 33, 150, 14, 151, 16, 1,
677
+ 153, 154, 6, 9, 4, 7, 155, 11, 156, 43,
678
+ 14, 40, 16, 1, 161, 30, 6, 9, 75, 76,
679
+ 78, 29, 25, 165, 24, 40, 169, 23, 174, 175,
680
+ 22, 43, 21, 180, 59, 182, 183 ]
681
+
682
+ racc_action_check = [
683
+ 48, 42, 48, 58, 58, 175, 177, 175, 46, 45,
684
+ 20, 36, 42, 45, 46, 45, 36, 58, 27, 46,
685
+ 45, 26, 46, 42, 42, 42, 63, 177, 58, 58,
686
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 58,
687
+ 58, 58, 58, 48, 48, 48, 48, 48, 175, 175,
688
+ 175, 175, 175, 102, 69, 102, 102, 37, 102, 37,
689
+ 102, 102, 150, 150, 102, 102, 102, 1, 1, 102,
690
+ 102, 91, 91, 91, 102, 102, 102, 102, 102, 102,
691
+ 102, 102, 102, 102, 102, 102, 102, 102, 102, 102,
692
+ 102, 102, 102, 102, 102, 102, 49, 163, 172, 110,
693
+ 110, 110, 49, 166, 49, 49, 151, 49, 49, 154,
694
+ 154, 154, 153, 153, 153, 174, 174, 163, 49, 49,
695
+ 49, 172, 49, 23, 166, 151, 151, 151, 15, 22,
696
+ 15, 15, 107, 15, 21, 111, 15, 112, 15, 15,
697
+ 113, 137, 15, 15, 0, 0, 148, 0, 149, 44,
698
+ 0, 29, 0, 0, 152, 18, 0, 0, 155, 155,
699
+ 155, 16, 14, 158, 11, 164, 165, 9, 169, 170,
700
+ 7, 31, 6, 176, 43, 178, 182 ]
701
+
702
+ racc_action_pointer = [
703
+ 142, 61, nil, nil, nil, nil, 166, 166, nil, 161,
704
+ nil, 158, nil, nil, 156, 128, 155, nil, 143, nil,
705
+ 4, 122, 127, 111, nil, nil, 19, 18, nil, 139,
706
+ nil, 164, nil, nil, nil, nil, 9, 50, nil, nil,
707
+ nil, nil, -1, 168, 142, 7, 6, nil, -4, 94,
708
+ nil, nil, nil, nil, nil, nil, nil, nil, -3, nil,
709
+ nil, nil, nil, 17, nil, nil, nil, nil, nil, 48,
710
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
711
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
712
+ nil, 22, nil, nil, nil, nil, nil, nil, nil, nil,
713
+ nil, nil, 50, nil, nil, nil, nil, 111, nil, nil,
714
+ 50, 118, 108, 94, nil, nil, nil, nil, nil, nil,
715
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
716
+ nil, nil, nil, nil, nil, nil, nil, 132, nil, nil,
717
+ nil, nil, nil, nil, nil, nil, nil, nil, 137, 146,
718
+ 56, 76, 152, 63, 60, 109, nil, nil, 145, nil,
719
+ nil, nil, nil, 95, 153, 147, 97, nil, nil, 151,
720
+ 160, nil, 75, nil, 109, 1, 171, 0, 157, nil,
721
+ nil, nil, 174, nil ]
722
+
723
+ racc_action_default = [
724
+ -126, -126, -3, -4, -10, -5, -126, -126, -6, -126,
725
+ -7, -126, -8, -9, -126, -126, -126, -1, -126, -13,
726
+ -126, -126, -126, -126, -13, -13, -126, -126, -2, -126,
727
+ -19, -116, -13, -25, -11, -32, -126, -126, -15, 184,
728
+ -41, -17, -126, -126, -117, -126, -126, -12, -126, -126,
729
+ -97, -23, -20, -18, -98, -21, -99, -22, -126, -14,
730
+ -29, -24, -27, -126, -26, -28, -35, -36, -31, -126,
731
+ -34, -33, -120, -122, -121, -123, -124, -118, -125, -119,
732
+ -16, -45, -46, -50, -44, -40, -43, -42, -48, -47,
733
+ -49, -126, -115, -113, -102, -114, -103, -104, -105, -106,
734
+ -107, -108, -126, -109, -110, -111, -100, -126, -112, -101,
735
+ -126, -126, -94, -92, -85, -74, -62, -86, -75, -76,
736
+ -55, -77, -63, -58, -56, -78, -64, -57, -79, -68,
737
+ -65, -59, -80, -69, -54, -81, -70, -126, -82, -71,
738
+ -66, -60, -83, -72, -67, -84, -73, -61, -126, -126,
739
+ -38, -126, -126, -126, -126, -126, -30, -39, -126, -96,
740
+ -95, -91, -93, -126, -126, -126, -126, -52, -51, -126,
741
+ -126, -89, -126, -87, -38, -126, -126, -126, -126, -90,
742
+ -53, -88, -126, -37 ]
743
+
744
+ racc_goto_table = [
745
+ 41, 80, 112, 18, 158, 113, 31, 17, 57, 173,
746
+ 55, 36, 37, 64, 42, 88, 26, 86, 45, 44,
747
+ 181, 149, 28, 62, 70, 52, 65, 90, 178, 84,
748
+ 46, 71, 66, 82, 49, 87, 89, 102, 137, 172,
749
+ 81, 15, 152, nil, nil, nil, nil, nil, nil, nil,
750
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
751
+ 92, nil, 160, nil, 112, 163, 164, 162, nil, nil,
752
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
753
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
754
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
755
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
756
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
757
+ nil, nil, nil, nil, nil, nil, nil, nil, 179, nil,
758
+ nil, nil, nil, nil, nil, 168 ]
759
+
760
+ racc_goto_check = [
761
+ 13, 12, 22, 14, 26, 35, 10, 2, 18, 34,
762
+ 17, 10, 10, 20, 15, 18, 11, 17, 19, 10,
763
+ 34, 22, 2, 8, 8, 16, 21, 8, 26, 5,
764
+ 23, 24, 25, 4, 27, 28, 29, 31, 32, 33,
765
+ 3, 1, 36, nil, nil, nil, nil, nil, nil, nil,
766
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
767
+ 14, nil, 22, nil, 22, 22, 22, 35, nil, nil,
768
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
769
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
770
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
771
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
772
+ nil, nil, nil, nil, nil, nil, nil, nil, nil, nil,
773
+ nil, nil, nil, nil, nil, nil, nil, nil, 12, nil,
774
+ nil, nil, nil, nil, nil, 13 ]
775
+
776
+ racc_goto_pointer = [
777
+ nil, 41, 7, -9, -16, -20, nil, nil, -22, nil,
778
+ -13, 2, -47, -29, 2, -16, -17, -32, -34, -15,
779
+ -32, -19, -89, -5, -15, -14, -146, -6, -14, -13,
780
+ nil, -21, -64, -127, -157, -86, -71 ]
781
+
782
+ racc_goto_default = [
783
+ nil, nil, nil, 2, 3, 5, 8, 10, 12, 13,
784
+ nil, 171, nil, nil, 157, nil, nil, nil, nil, nil,
785
+ nil, nil, 79, nil, nil, nil, nil, nil, nil, nil,
786
+ 58, nil, nil, nil, nil, nil, nil ]
787
+
788
+ racc_token_table = {
789
+ false => 0,
790
+ Object.new => 1,
791
+ ";" => 2,
792
+ "import" => 3,
793
+ :STRING_LITERAL => 4,
794
+ "package" => 5,
795
+ :IDENT => 6,
796
+ "." => 7,
797
+ "option" => 8,
798
+ "=" => 9,
799
+ "message" => 10,
800
+ "extend" => 11,
801
+ "{" => 12,
802
+ "}" => 13,
803
+ "enum" => 14,
804
+ "service" => 15,
805
+ "rpc" => 16,
806
+ "(" => 17,
807
+ ")" => 18,
808
+ "returns" => 19,
809
+ "group" => 20,
810
+ :CAMEL_IDENT => 21,
811
+ "[" => 22,
812
+ "]" => 23,
813
+ "required" => 24,
814
+ "optional" => 25,
815
+ "repeated" => 26,
816
+ "default" => 27,
817
+ "extensions" => 28,
818
+ "to" => 29,
819
+ "max" => 30,
820
+ "double" => 31,
821
+ "float" => 32,
822
+ "int32" => 33,
823
+ "int64" => 34,
824
+ "uint32" => 35,
825
+ "uint64" => 36,
826
+ "sint32" => 37,
827
+ "sint64" => 38,
828
+ "fixed32" => 39,
829
+ "fixed64" => 40,
830
+ "sfixed32" => 41,
831
+ "sfixed64" => 42,
832
+ "bool" => 43,
833
+ "string" => 44,
834
+ "bytes" => 45,
835
+ "," => 46,
836
+ :FLOAT_LITERAL => 47,
837
+ :BOOLEAN_LITERAL => 48,
838
+ :DEC_INTEGER => 49,
839
+ :HEX_INTEGER => 50,
840
+ :OCT_INTEGER => 51 }
841
+
842
+ racc_use_result_var = true
843
+
844
+ racc_nt_base = 52
845
+
846
+ Racc_arg = [
847
+ racc_action_table,
848
+ racc_action_check,
849
+ racc_action_default,
850
+ racc_action_pointer,
851
+ racc_goto_table,
852
+ racc_goto_check,
853
+ racc_goto_default,
854
+ racc_goto_pointer,
855
+ racc_nt_base,
856
+ racc_reduce_table,
857
+ racc_token_table,
858
+ racc_shift_n,
859
+ racc_reduce_n,
860
+ racc_use_result_var ]
861
+
862
+ Racc_token_to_s_table = [
863
+ '$end',
864
+ 'error',
865
+ '";"',
866
+ '"import"',
867
+ 'STRING_LITERAL',
868
+ '"package"',
869
+ 'IDENT',
870
+ '"."',
871
+ '"option"',
872
+ '"="',
873
+ '"message"',
874
+ '"extend"',
875
+ '"{"',
876
+ '"}"',
877
+ '"enum"',
878
+ '"service"',
879
+ '"rpc"',
880
+ '"("',
881
+ '")"',
882
+ '"returns"',
883
+ '"group"',
884
+ 'CAMEL_IDENT',
885
+ '"["',
886
+ '"]"',
887
+ '"required"',
888
+ '"optional"',
889
+ '"repeated"',
890
+ '"default"',
891
+ '"extensions"',
892
+ '"to"',
893
+ '"max"',
894
+ '"double"',
895
+ '"float"',
896
+ '"int32"',
897
+ '"int64"',
898
+ '"uint32"',
899
+ '"uint64"',
900
+ '"sint32"',
901
+ '"sint64"',
902
+ '"fixed32"',
903
+ '"fixed64"',
904
+ '"sfixed32"',
905
+ '"sfixed64"',
906
+ '"bool"',
907
+ '"string"',
908
+ '"bytes"',
909
+ '","',
910
+ 'FLOAT_LITERAL',
911
+ 'BOOLEAN_LITERAL',
912
+ 'DEC_INTEGER',
913
+ 'HEX_INTEGER',
914
+ 'OCT_INTEGER',
915
+ '$start',
916
+ 'proto',
917
+ 'proto_item',
918
+ 'message',
919
+ 'extend',
920
+ 'enum',
921
+ 'import',
922
+ 'package',
923
+ 'option',
924
+ 'service',
925
+ 'dot_ident_list',
926
+ 'option_body',
927
+ 'constant',
928
+ 'message_body',
929
+ 'user_type',
930
+ 'extend_body_list',
931
+ 'extend_body',
932
+ 'field',
933
+ 'group',
934
+ 'enum_body_list',
935
+ 'enum_body',
936
+ 'enum_field',
937
+ 'integer_literal',
938
+ 'service_body_list',
939
+ 'service_body',
940
+ 'rpc',
941
+ 'rpc_arg',
942
+ 'message_body_body_list',
943
+ 'message_body_body',
944
+ 'extensions',
945
+ 'label',
946
+ 'type',
947
+ 'field_name',
948
+ 'field_option_list',
949
+ 'field_option',
950
+ 'extension',
951
+ 'comma_extension_list']
952
+
953
+ Racc_debug_parser = false
954
+
955
+ ##### racc system variables end #####
956
+
957
+ # reduce 0 omitted
958
+
959
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 3
960
+ def _reduce_1( val, _values, result )
961
+ result = Protobuf::Node::ProtoNode.new(val)
962
+ result
963
+ end
964
+ .,.,
965
+
966
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 5
967
+ def _reduce_2( val, _values, result )
968
+ result.children << val[1] if val[1]
969
+ result
970
+ end
971
+ .,.,
972
+
973
+ # reduce 3 omitted
974
+
975
+ # reduce 4 omitted
976
+
977
+ # reduce 5 omitted
978
+
979
+ # reduce 6 omitted
980
+
981
+ # reduce 7 omitted
982
+
983
+ # reduce 8 omitted
984
+
985
+ # reduce 9 omitted
986
+
987
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 14
988
+ def _reduce_10( val, _values, result )
989
+ result = nil
990
+ result
991
+ end
992
+ .,.,
993
+
994
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 17
995
+ def _reduce_11( val, _values, result )
996
+ result = Protobuf::Node::ImportNode.new(val[1])
997
+ result
998
+ end
999
+ .,.,
1000
+
1001
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 20
1002
+ def _reduce_12( val, _values, result )
1003
+ result = Protobuf::Node::PackageNode.new(val[2].unshift(val[1]))
1004
+ result
1005
+ end
1006
+ .,.,
1007
+
1008
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 23
1009
+ def _reduce_13( val, _values, result )
1010
+ result = []
1011
+ result
1012
+ end
1013
+ .,.,
1014
+
1015
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 25
1016
+ def _reduce_14( val, _values, result )
1017
+ result << val[2]
1018
+ result
1019
+ end
1020
+ .,.,
1021
+
1022
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 28
1023
+ def _reduce_15( val, _values, result )
1024
+ result = Protobuf::Node::OptionNode.new(*val[1])
1025
+ result
1026
+ end
1027
+ .,.,
1028
+
1029
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 31
1030
+ def _reduce_16( val, _values, result )
1031
+ result = [val[1].unshift(val[0]), val[3]]
1032
+ result
1033
+ end
1034
+ .,.,
1035
+
1036
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 34
1037
+ def _reduce_17( val, _values, result )
1038
+ result = Protobuf::Node::MessageNode.new(val[1], val[2])
1039
+ result
1040
+ end
1041
+ .,.,
1042
+
1043
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 37
1044
+ def _reduce_18( val, _values, result )
1045
+ result = Protobuf::Node::ExtendNode.new(val[1], val[3])
1046
+ result
1047
+ end
1048
+ .,.,
1049
+
1050
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 40
1051
+ def _reduce_19( val, _values, result )
1052
+ result = []
1053
+ result
1054
+ end
1055
+ .,.,
1056
+
1057
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 42
1058
+ def _reduce_20( val, _values, result )
1059
+ result << val[1] if val[1]
1060
+ result
1061
+ end
1062
+ .,.,
1063
+
1064
+ # reduce 21 omitted
1065
+
1066
+ # reduce 22 omitted
1067
+
1068
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 46
1069
+ def _reduce_23( val, _values, result )
1070
+ result = nil
1071
+ result
1072
+ end
1073
+ .,.,
1074
+
1075
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 49
1076
+ def _reduce_24( val, _values, result )
1077
+ result = Protobuf::Node::EnumNode.new(val[1], val[3])
1078
+ result
1079
+ end
1080
+ .,.,
1081
+
1082
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 52
1083
+ def _reduce_25( val, _values, result )
1084
+ result = []
1085
+ result
1086
+ end
1087
+ .,.,
1088
+
1089
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 54
1090
+ def _reduce_26( val, _values, result )
1091
+ result << val[1] if val[1]
1092
+ result
1093
+ end
1094
+ .,.,
1095
+
1096
+ # reduce 27 omitted
1097
+
1098
+ # reduce 28 omitted
1099
+
1100
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 58
1101
+ def _reduce_29( val, _values, result )
1102
+ result = nil
1103
+ result
1104
+ end
1105
+ .,.,
1106
+
1107
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 61
1108
+ def _reduce_30( val, _values, result )
1109
+ result = Protobuf::Node::EnumFieldNode.new(val[0], val[2])
1110
+ result
1111
+ end
1112
+ .,.,
1113
+
1114
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 64
1115
+ def _reduce_31( val, _values, result )
1116
+ result = Protobuf::Node::ServiceNode.new(val[1], val[3])
1117
+ result
1118
+ end
1119
+ .,.,
1120
+
1121
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 67
1122
+ def _reduce_32( val, _values, result )
1123
+ result = []
1124
+ result
1125
+ end
1126
+ .,.,
1127
+
1128
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 69
1129
+ def _reduce_33( val, _values, result )
1130
+ result << val[1] if val[1]
1131
+ result
1132
+ end
1133
+ .,.,
1134
+
1135
+ # reduce 34 omitted
1136
+
1137
+ # reduce 35 omitted
1138
+
1139
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 73
1140
+ def _reduce_36( val, _values, result )
1141
+ result = nil
1142
+ result
1143
+ end
1144
+ .,.,
1145
+
1146
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 76
1147
+ def _reduce_37( val, _values, result )
1148
+ result = Protobuf::Node::RpcNode.new(val[1], val[3], val[7])
1149
+ result
1150
+ end
1151
+ .,.,
1152
+
1153
+ # reduce 38 omitted
1154
+
1155
+ # reduce 39 omitted
1156
+
1157
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 82
1158
+ def _reduce_40( val, _values, result )
1159
+ result = val[1]
1160
+ result
1161
+ end
1162
+ .,.,
1163
+
1164
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 85
1165
+ def _reduce_41( val, _values, result )
1166
+ result = []
1167
+ result
1168
+ end
1169
+ .,.,
1170
+
1171
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 87
1172
+ def _reduce_42( val, _values, result )
1173
+ result << val[1] if val[1]
1174
+ result
1175
+ end
1176
+ .,.,
1177
+
1178
+ # reduce 43 omitted
1179
+
1180
+ # reduce 44 omitted
1181
+
1182
+ # reduce 45 omitted
1183
+
1184
+ # reduce 46 omitted
1185
+
1186
+ # reduce 47 omitted
1187
+
1188
+ # reduce 48 omitted
1189
+
1190
+ # reduce 49 omitted
1191
+
1192
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 96
1193
+ def _reduce_50( val, _values, result )
1194
+ result = nil
1195
+ result
1196
+ end
1197
+ .,.,
1198
+
1199
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 99
1200
+ def _reduce_51( val, _values, result )
1201
+ result = Protobuf::Node::GroupNode.new(val[0], val[2], val[4], val[5])
1202
+ result
1203
+ end
1204
+ .,.,
1205
+
1206
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 102
1207
+ def _reduce_52( val, _values, result )
1208
+ result = Protobuf::Node::FieldNode.new(val[0], val[1], val[2], val[4])
1209
+ result
1210
+ end
1211
+ .,.,
1212
+
1213
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 104
1214
+ def _reduce_53( val, _values, result )
1215
+ result = Protobuf::Node::FieldNode.new(val[0], val[1], val[2], val[4], val[6])
1216
+ result
1217
+ end
1218
+ .,.,
1219
+
1220
+ # reduce 54 omitted
1221
+
1222
+ # reduce 55 omitted
1223
+
1224
+ # reduce 56 omitted
1225
+
1226
+ # reduce 57 omitted
1227
+
1228
+ # reduce 58 omitted
1229
+
1230
+ # reduce 59 omitted
1231
+
1232
+ # reduce 60 omitted
1233
+
1234
+ # reduce 61 omitted
1235
+
1236
+ # reduce 62 omitted
1237
+
1238
+ # reduce 63 omitted
1239
+
1240
+ # reduce 64 omitted
1241
+
1242
+ # reduce 65 omitted
1243
+
1244
+ # reduce 66 omitted
1245
+
1246
+ # reduce 67 omitted
1247
+
1248
+ # reduce 68 omitted
1249
+
1250
+ # reduce 69 omitted
1251
+
1252
+ # reduce 70 omitted
1253
+
1254
+ # reduce 71 omitted
1255
+
1256
+ # reduce 72 omitted
1257
+
1258
+ # reduce 73 omitted
1259
+
1260
+ # reduce 74 omitted
1261
+
1262
+ # reduce 75 omitted
1263
+
1264
+ # reduce 76 omitted
1265
+
1266
+ # reduce 77 omitted
1267
+
1268
+ # reduce 78 omitted
1269
+
1270
+ # reduce 79 omitted
1271
+
1272
+ # reduce 80 omitted
1273
+
1274
+ # reduce 81 omitted
1275
+
1276
+ # reduce 82 omitted
1277
+
1278
+ # reduce 83 omitted
1279
+
1280
+ # reduce 84 omitted
1281
+
1282
+ # reduce 85 omitted
1283
+
1284
+ # reduce 86 omitted
1285
+
1286
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 109
1287
+ def _reduce_87( val, _values, result )
1288
+ result = val
1289
+ result
1290
+ end
1291
+ .,.,
1292
+
1293
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 111
1294
+ def _reduce_88( val, _values, result )
1295
+ result << val[2]
1296
+ result
1297
+ end
1298
+ .,.,
1299
+
1300
+ # reduce 89 omitted
1301
+
1302
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 115
1303
+ def _reduce_90( val, _values, result )
1304
+ result = [:default, val[2]]
1305
+ result
1306
+ end
1307
+ .,.,
1308
+
1309
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 118
1310
+ def _reduce_91( val, _values, result )
1311
+ result = Protobuf::Node::ExtensionsNode.new(val[2].unshift(val[1]))
1312
+ result
1313
+ end
1314
+ .,.,
1315
+
1316
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 121
1317
+ def _reduce_92( val, _values, result )
1318
+ result = []
1319
+ result
1320
+ end
1321
+ .,.,
1322
+
1323
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 123
1324
+ def _reduce_93( val, _values, result )
1325
+ result << val[1]
1326
+ result
1327
+ end
1328
+ .,.,
1329
+
1330
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 126
1331
+ def _reduce_94( val, _values, result )
1332
+ result = Protobuf::Node::ExtensionRangeNode.new(val[0])
1333
+ result
1334
+ end
1335
+ .,.,
1336
+
1337
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 128
1338
+ def _reduce_95( val, _values, result )
1339
+ result = Protobuf::Node::ExtensionRangeNode.new(val[0], val[2])
1340
+ result
1341
+ end
1342
+ .,.,
1343
+
1344
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 130
1345
+ def _reduce_96( val, _values, result )
1346
+ result = Protobuf::Node::ExtensionRangeNode.new(val[0], :max)
1347
+ result
1348
+ end
1349
+ .,.,
1350
+
1351
+ # reduce 97 omitted
1352
+
1353
+ # reduce 98 omitted
1354
+
1355
+ # reduce 99 omitted
1356
+
1357
+ # reduce 100 omitted
1358
+
1359
+ # reduce 101 omitted
1360
+
1361
+ # reduce 102 omitted
1362
+
1363
+ # reduce 103 omitted
1364
+
1365
+ # reduce 104 omitted
1366
+
1367
+ # reduce 105 omitted
1368
+
1369
+ # reduce 106 omitted
1370
+
1371
+ # reduce 107 omitted
1372
+
1373
+ # reduce 108 omitted
1374
+
1375
+ # reduce 109 omitted
1376
+
1377
+ # reduce 110 omitted
1378
+
1379
+ # reduce 111 omitted
1380
+
1381
+ # reduce 112 omitted
1382
+
1383
+ # reduce 113 omitted
1384
+
1385
+ # reduce 114 omitted
1386
+
1387
+ # reduce 115 omitted
1388
+
1389
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 141
1390
+ def _reduce_116( val, _values, result )
1391
+ result = val[1].unshift(val[0])
1392
+ result
1393
+ end
1394
+ .,.,
1395
+
1396
+ module_eval <<'.,.,', 'lib/protobuf/compiler/proto.y', 143
1397
+ def _reduce_117( val, _values, result )
1398
+ result = val[1].unshift(val[0])
1399
+ result
1400
+ end
1401
+ .,.,
1402
+
1403
+ # reduce 118 omitted
1404
+
1405
+ # reduce 119 omitted
1406
+
1407
+ # reduce 120 omitted
1408
+
1409
+ # reduce 121 omitted
1410
+
1411
+ # reduce 122 omitted
1412
+
1413
+ # reduce 123 omitted
1414
+
1415
+ # reduce 124 omitted
1416
+
1417
+ # reduce 125 omitted
1418
+
1419
+ def _reduce_none( val, _values, result )
1420
+ result
1421
+ end
1422
+
1423
+ end # class ProtoParser
1424
+
1425
+ end # module Protobuf