opal-racc 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 (4) hide show
  1. data/.gitignore +1 -0
  2. data/README.md +1 -0
  3. data/lib/opal/racc/parser.rb +159 -0
  4. metadata +47 -0
data/.gitignore ADDED
@@ -0,0 +1 @@
1
+ .DS_Store
data/README.md ADDED
@@ -0,0 +1 @@
1
+ Racc runtime for Opal
@@ -0,0 +1,159 @@
1
+ # Opal port of racc/parser.rb.
2
+ #
3
+ # Original license:
4
+ #
5
+ # $originalId: parser.rb,v 1.8 2006/07/06 11:42:07 aamine Exp $
6
+ #
7
+ # Copyright (c) 1999-2006 Minero Aoki
8
+ #
9
+ # This program is free software.
10
+ # You can distribute/modify this program under the same terms of ruby.
11
+ #
12
+ # As a special exception, when this code is copied by Racc
13
+ # into a Racc output file, you may use that output file
14
+ # without restriction.
15
+ module Racc
16
+
17
+ class Parser
18
+
19
+ def _racc_setup
20
+ Racc_arg
21
+ end
22
+
23
+ def do_parse
24
+ _racc_do_parse_rb _racc_setup, false
25
+ end
26
+
27
+ def _racc_do_parse_rb(arg, in_debug)
28
+ action_table = arg[0]
29
+ action_check = arg[1]
30
+ action_default = arg[2]
31
+ action_pointer = arg[3]
32
+
33
+ goto_table = arg[4]
34
+ goto_check = arg[5]
35
+ goto_default = arg[6]
36
+ goto_pointer = arg[7]
37
+
38
+ nt_base = arg[8]
39
+ reduce_table = arg[9]
40
+ token_table = arg[10]
41
+ shift_n = arg[11]
42
+ reduce_n = arg[12]
43
+
44
+ use_result = arg[13]
45
+
46
+ # racc sys vars
47
+ racc_state = [0]
48
+ racc_tstack = []
49
+ racc_vstack = []
50
+
51
+ racc_t = nil
52
+ racc_tok = nil
53
+ racc_val = nil
54
+ racc_read_next = true
55
+
56
+ racc_user_yyerror = false
57
+ racc_error_status = 0
58
+
59
+ token = nil; act = nil; i = nil; nerr = nil; custate = nil
60
+
61
+ while true
62
+ i = action_pointer[racc_state[-1]]
63
+
64
+ if i
65
+ if racc_read_next
66
+ if racc_t != 0 # not EOF
67
+ token = next_token
68
+
69
+ racc_tok = token[0]
70
+ racc_val = token[1]
71
+
72
+ if racc_tok == false # EOF
73
+ racc_t = 0
74
+ else
75
+ racc_t = token_table[racc_tok]
76
+ racc_t = 1 unless racc_t
77
+ # racc_t ||= 1
78
+ end
79
+
80
+ racc_read_next = false
81
+ end
82
+ end
83
+
84
+ i += racc_t
85
+
86
+ if (i < 0) || (act = action_table[i]).nil? || (action_check[i] != racc_state[-1])
87
+ act = action_default[racc_state[-1]]
88
+ end
89
+
90
+ else
91
+ act = action_default[racc_state[-1]]
92
+ end
93
+
94
+ if act > 0 && act < shift_n
95
+ if racc_error_status > 0
96
+ if racc_t != 1
97
+ racc_error_status -= 1
98
+ end
99
+ end
100
+
101
+ racc_vstack.push racc_val
102
+ curstate = act
103
+ racc_state << act
104
+ racc_read_next = true
105
+
106
+ elsif act < 0 && act > -reduce_n
107
+ reduce_i = act * -3
108
+ reduce_len = reduce_table[reduce_i]
109
+ reduce_to = reduce_table[reduce_i + 1]
110
+ method_id = reduce_table[reduce_i + 2]
111
+
112
+ tmp_v = racc_vstack.last reduce_len
113
+
114
+ racc_state.pop reduce_len
115
+ racc_vstack.pop reduce_len
116
+ racc_tstack.pop reduce_len
117
+
118
+ if use_result
119
+ reduce_call_result = self.__send__ method_id, tmp_v, nil, tmp_v[0]
120
+ racc_vstack.push reduce_call_result
121
+ else
122
+ raise "not using result??"
123
+ end
124
+
125
+ racc_tstack.push reduce_to
126
+
127
+ k1 = reduce_to - nt_base
128
+
129
+ if (reduce_i = goto_pointer[k1]) != nil
130
+ reduce_i += racc_state[-1]
131
+
132
+ if (reduce_i >= 0) && ((curstate = goto_table[reduce_i]) != nil) && (goto_check[reduce_i] == k1)
133
+ racc_state.push curstate
134
+ else
135
+ racc_state.push goto_default[k1]
136
+ end
137
+
138
+ else
139
+ racc_state.push goto_default[k1]
140
+ end
141
+
142
+ elsif act == shift_n
143
+ # action
144
+ return racc_vstack[0]
145
+
146
+ elsif act == -reduce_n
147
+ # reduce
148
+ raise "Opal Syntax Error: unexpected '#{racc_tok.inspect}'"
149
+
150
+ else
151
+ raise "Rac: unknown action: #{act}"
152
+ end
153
+
154
+ # raise "and finished loop"
155
+ end
156
+ end # _racc_do_parse_rb
157
+ end
158
+ end
159
+
metadata ADDED
@@ -0,0 +1,47 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: opal-racc
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Adam Beynon
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-01-22 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Opal compatible racc runtime
15
+ email: adam@adambeynon.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - .gitignore
21
+ - README.md
22
+ - lib/opal/racc/parser.rb
23
+ homepage: http://opalrb.org
24
+ licenses: []
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ! '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ required_rubygems_version: !ruby/object:Gem::Requirement
36
+ none: false
37
+ requirements:
38
+ - - ! '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ requirements: []
42
+ rubyforge_project:
43
+ rubygems_version: 1.8.11
44
+ signing_key:
45
+ specification_version: 3
46
+ summary: Opal compatible racc runtime
47
+ test_files: []