opal 0.2.2 → 0.3.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.
- data/.gitignore +5 -10
- data/LICENSE +75 -0
- data/README.md +55 -3
- data/Rakefile +62 -139
- data/bin/opal +7 -10
- data/gems/core/README.md +5 -0
- data/gems/core/Rakefile +7 -0
- data/gems/core/core.gemspec +13 -0
- data/gems/core/lib/core.rb +33 -0
- data/gems/core/lib/core/array.rb +1470 -0
- data/gems/core/lib/core/basic_object.rb +15 -0
- data/gems/core/lib/core/class.rb +31 -0
- data/gems/core/lib/core/dir.rb +26 -0
- data/gems/core/lib/core/error.rb +43 -0
- data/gems/core/lib/core/false_class.rb +21 -0
- data/gems/core/lib/core/file.rb +54 -0
- data/gems/core/lib/core/hash.rb +725 -0
- data/gems/core/lib/core/kernel.rb +240 -0
- data/gems/core/lib/core/module.rb +98 -0
- data/gems/core/lib/core/nil_class.rb +41 -0
- data/gems/core/lib/core/numeric.rb +370 -0
- data/gems/core/lib/core/proc.rb +11 -0
- data/gems/core/lib/core/range.rb +17 -0
- data/gems/core/lib/core/regexp.rb +18 -0
- data/gems/core/lib/core/string.rb +328 -0
- data/gems/core/lib/core/symbol.rb +15 -0
- data/gems/core/lib/core/top_self.rb +8 -0
- data/gems/core/lib/core/true_class.rb +20 -0
- data/gems/core/lib/core/vm.rb +16 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/append_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/assoc_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/at_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/clear_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_bang_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/collect_spec.rb +0 -0
- data/gems/core/spec/core/array/compact_spec.rb +41 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/concat_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/constructor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/each_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/element_reference_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/first_spec.rb +1 -1
- data/{opals/opal/opal → gems/core}/spec/core/array/include_spec.rb +0 -0
- data/gems/core/spec/core/array/join_spec.rb +6 -0
- data/gems/core/spec/core/array/last_spec.rb +51 -0
- data/gems/core/spec/core/array/length_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/array/map_spec.rb +2 -0
- data/gems/core/spec/core/array/reverse_spec.rb +6 -0
- data/{opals/opal/opal → gems/core}/spec/core/builtin_constants/builtin_constants_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/false/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/file/join_spec.rb +1 -1
- data/gems/core/spec/core/hash/assoc_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/instance_eval_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/loop_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/kernel/raise_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/module/attr_accessor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/number/lt_spec.rb +0 -0
- data/gems/core/spec/core/string/sub_spec.rb +24 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/and_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/inspect_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/to_s_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/core/true/xor_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/and_spec.rb +2 -3
- data/{opals/opal/opal → gems/core}/spec/language/array_spec.rb +21 -5
- data/gems/core/spec/language/block_spec.rb +38 -0
- data/{opals/opal/opal → gems/core}/spec/language/break_spec.rb +0 -0
- data/gems/core/spec/language/case_spec.rb +103 -0
- data/{opals/opal/opal → gems/core}/spec/language/def_spec.rb +11 -1
- data/{opals/opal/opal → gems/core}/spec/language/eigenclass_spec.rb +0 -0
- data/gems/core/spec/language/file_spec.rb +13 -0
- data/gems/core/spec/language/fixtures/block.rb +21 -0
- data/gems/core/spec/language/fixtures/super.rb +293 -0
- data/{opals/opal/opal → gems/core}/spec/language/hash_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/if_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/loop_spec.rb +0 -0
- data/gems/core/spec/language/metaclass_spec.rb +21 -0
- data/{opals/opal/opal → gems/core}/spec/language/method_spec.rb +60 -0
- data/{opals/opal/opal → gems/core}/spec/language/next_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/or_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/redo_spec.rb +0 -0
- data/gems/core/spec/language/regexp_spec.rb +26 -0
- data/{opals/opal/opal → gems/core}/spec/language/rescue_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/return_spec.rb +0 -0
- data/{opals/opal/opal → gems/core}/spec/language/string_spec.rb +0 -0
- data/gems/core/spec/language/super_spec.rb +32 -0
- data/{opals/opal/opal → gems/core}/spec/language/until_spec.rb +47 -47
- data/gems/core/spec/language/variables_spec.rb +155 -0
- data/{opals/opal/opal → gems/core}/spec/language/while_spec.rb +47 -47
- data/{opals/opal/opal → gems/core}/spec/spec_helper.rb +1 -1
- data/gems/core_fs/README.md +19 -0
- data/gems/dev/Rakefile +5 -0
- data/gems/dev/lib/dev.js +99 -0
- data/gems/dev/lib/dev/generator.js +1264 -0
- data/gems/dev/lib/dev/parser.js +979 -0
- data/gems/dev/lib/dev/ruby_parser.js +1088 -0
- data/gems/dev/lib/dev/ruby_parser.y +1267 -0
- data/gems/dev/lib/dev/string_scanner.js +38 -0
- data/gems/dev/tools/racc2js/README.md +39 -0
- data/gems/dev/tools/racc2js/math_parser.js +222 -0
- data/gems/dev/tools/racc2js/math_parser.rb +133 -0
- data/gems/dev/tools/racc2js/math_parser.y +28 -0
- data/gems/dev/tools/racc2js/parser.js +218 -0
- data/gems/dev/tools/racc2js/racc2js.rb +153 -0
- data/gems/json/README.md +4 -0
- data/gems/json/json.gemspec +14 -0
- data/gems/json/lib/json.rb +64 -0
- data/gems/json/lib/json/ext.rb +51 -0
- data/{opals/opal/browser/lib/browser/json_parse.js → gems/json/lib/json/json2.js} +197 -37
- data/gems/ospec/README.md +0 -0
- data/gems/ospec/lib/ospec.rb +6 -0
- data/gems/ospec/lib/ospec/autorun.rb +3 -0
- data/gems/ospec/lib/ospec/dsl.rb +15 -0
- data/gems/ospec/lib/ospec/example.rb +11 -0
- data/gems/ospec/lib/ospec/example/before_and_after_hooks.rb +56 -0
- data/gems/ospec/lib/ospec/example/errors.rb +17 -0
- data/gems/ospec/lib/ospec/example/example_group.rb +12 -0
- data/gems/ospec/lib/ospec/example/example_group_factory.rb +21 -0
- data/gems/ospec/lib/ospec/example/example_group_hierarchy.rb +20 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/example/example_group_methods.rb +26 -68
- data/gems/ospec/lib/ospec/example/example_group_proxy.rb +14 -0
- data/gems/ospec/lib/ospec/example/example_methods.rb +46 -0
- data/gems/ospec/lib/ospec/example/example_proxy.rb +18 -0
- data/gems/ospec/lib/ospec/expectations.rb +19 -0
- data/gems/ospec/lib/ospec/expectations/errors.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/fail_with.rb +8 -0
- data/gems/ospec/lib/ospec/expectations/handler.rb +27 -0
- data/gems/ospec/lib/ospec/matchers.rb +24 -0
- data/{opals/opal/Rakefile → gems/ospec/lib/ospec/matchers/be.rb} +0 -0
- data/gems/ospec/lib/ospec/matchers/generated_descriptions.rb +20 -0
- data/gems/ospec/lib/ospec/matchers/operator_matcher.rb +52 -0
- data/gems/ospec/lib/ospec/runner.rb +40 -0
- data/gems/ospec/lib/ospec/runner/example_group_runner.rb +44 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/formatter/html_formatter.rb +31 -40
- data/gems/ospec/lib/ospec/runner/formatter/terminal_formatter.rb +48 -0
- data/gems/ospec/lib/ospec/runner/options.rb +36 -0
- data/{opals/opal/spec/lib/spec → gems/ospec/lib/ospec}/runner/reporter.rb +23 -55
- data/gems/ospec/ospec.gemspec +0 -0
- data/gems/rquery/README.md +9 -0
- data/gems/rquery/lib/rquery.rb +10 -0
- data/gems/rquery/lib/rquery/ajax.rb +4 -0
- data/gems/rquery/lib/rquery/css.rb +96 -0
- data/gems/rquery/lib/rquery/document.rb +25 -0
- data/gems/rquery/lib/rquery/element.rb +292 -0
- data/gems/rquery/lib/rquery/event.rb +108 -0
- data/gems/rquery/lib/rquery/jquery.js +8177 -0
- data/gems/rquery/lib/rquery/request.rb +138 -0
- data/gems/rquery/lib/rquery/response.rb +49 -0
- data/gems/rquery/rquery.gemspec +16 -0
- data/lib/opal.js +1597 -0
- data/lib/opal.rb +6 -69
- data/lib/opal/builder.rb +115 -0
- data/lib/opal/bundle.rb +131 -0
- data/lib/opal/command.rb +11 -0
- data/lib/opal/context.rb +69 -0
- data/lib/opal/context/console.rb +12 -0
- data/lib/opal/context/file_system.rb +19 -0
- data/lib/opal/context/loader.rb +117 -0
- data/lib/opal/gem.rb +153 -0
- data/lib/opal/ruby/nodes.rb +1302 -0
- data/lib/opal/ruby/parser.rb +780 -0
- data/lib/opal/ruby/ruby_parser.rb +5170 -0
- data/lib/opal/ruby/ruby_parser.y +1298 -0
- data/opal.gemspec +11 -256
- metadata +179 -240
- data/.gitmodules +0 -6
- data/Opalfile +0 -384
- data/VERSION +0 -1
- data/demos/apps/browser_demo/index.html +0 -11
- data/demos/apps/browser_demo/lib/browser_demo.rb +0 -31
- data/demos/apps/simple_opal/Opalfile +0 -13
- data/demos/apps/simple_opal/index.html +0 -11
- data/demos/apps/simple_opal/lib/app_controller.rb +0 -62
- data/demos/apps/simple_opal/lib/main_window.rb +0 -146
- data/demos/browser/request/index.html +0 -52
- data/demos/browser/request/request.rb +0 -48
- data/gen/browser/__PROJECT_NAME__/Rakefile +0 -12
- data/gen/browser/__PROJECT_NAME__/index.html +0 -11
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.debug.js +0 -4687
- data/gen/browser/__PROJECT_NAME__/javascripts/opal.min.js +0 -175
- data/gen/browser/__PROJECT_NAME__/lib/__PROJECT_NAME__.rb +0 -1
- data/lib/opal/builders/base.rb +0 -50
- data/lib/opal/builders/css.rb +0 -46
- data/lib/opal/builders/javascript.rb +0 -44
- data/lib/opal/builders/opal.rb +0 -79
- data/lib/opal/builders/ruby.rb +0 -50
- data/lib/opal/builders/ruby/generate.rb +0 -1851
- data/lib/opal/builders/ruby/nodes.rb +0 -210
- data/lib/opal/builders/ruby/ruby.rb +0 -916
- data/lib/opal/builders/ruby/ruby_parser.rb +0 -6008
- data/lib/opal/builders/ruby/ruby_parser.rb.y +0 -1451
- data/lib/opal/models/build_item.rb +0 -104
- data/lib/opal/models/hash_struct.rb +0 -40
- data/lib/opal/models/project.rb +0 -252
- data/lib/opal/models/struct_accessors.rb +0 -58
- data/lib/opal/models/target.rb +0 -176
- data/lib/opal/opal/build.rb +0 -169
- data/lib/opal/opal/env/console.rb +0 -66
- data/lib/opal/opal/env/fs.rb +0 -98
- data/lib/opal/opal/env/object.rb +0 -48
- data/lib/opal/opal/environment.rb +0 -139
- data/lib/opal/opal/gen.rb +0 -62
- data/lib/opal/opal/opal.rb +0 -75
- data/lib/opal/opal/repl.rb +0 -38
- data/lib/opal/opalfile/dsl.rb +0 -62
- data/lib/opal/opalfile/opalfile.rb +0 -133
- data/lib/opal/opalfile/task.rb +0 -96
- data/lib/opal/opalfile/task_manager.rb +0 -63
- data/lib/opal/opalfile/task_scope.rb +0 -52
- data/lib/opal/rack/app_server.rb +0 -119
- data/lib/opal/rake/opal_task.rb +0 -34
- data/opals/opal/README.md +0 -37
- data/opals/opal/browser/Opalfile +0 -11
- data/opals/opal/browser/README.md +0 -146
- data/opals/opal/browser/SIZZLE_LICESNSE.txt +0 -148
- data/opals/opal/browser/lib/browser.rb +0 -118
- data/opals/opal/browser/lib/browser/builder.rb +0 -41
- data/opals/opal/browser/lib/browser/canvas_context.rb +0 -115
- data/opals/opal/browser/lib/browser/dimensions.rb +0 -50
- data/opals/opal/browser/lib/browser/document.rb +0 -146
- data/opals/opal/browser/lib/browser/element.rb +0 -487
- data/opals/opal/browser/lib/browser/element/attributes.rb +0 -88
- data/opals/opal/browser/lib/browser/element/css.rb +0 -290
- data/opals/opal/browser/lib/browser/element/form.rb +0 -146
- data/opals/opal/browser/lib/browser/event/dom_events.rb +0 -81
- data/opals/opal/browser/lib/browser/event/event.rb +0 -177
- data/opals/opal/browser/lib/browser/event/trigger_events.rb +0 -53
- data/opals/opal/browser/lib/browser/geometry.rb +0 -97
- data/opals/opal/browser/lib/browser/json.rb +0 -32
- data/opals/opal/browser/lib/browser/request/request.rb +0 -201
- data/opals/opal/browser/lib/browser/sizzle.js +0 -1068
- data/opals/opal/browser/lib/browser/string.rb +0 -42
- data/opals/opal/browser/lib/browser/touch.rb +0 -37
- data/opals/opal/browser/lib/browser/vml_context.js +0 -33
- data/opals/opal/browser/lib/browser/window.rb +0 -36
- data/opals/opal/browser/spec/browser/browser_detection_spec.rb +0 -7
- data/opals/opal/browser/spec/document/aref_spec.rb +0 -110
- data/opals/opal/browser/spec/document/ready_spec.rb +0 -16
- data/opals/opal/browser/spec/element/body_spec.rb +0 -11
- data/opals/opal/browser/spec/element/clear_spec.rb +0 -26
- data/opals/opal/browser/spec/element/empty_spec.rb +0 -29
- data/opals/opal/browser/spec/element/has_class_spec.rb +0 -40
- data/opals/opal/browser/spec/element/hidden_spec.rb +0 -23
- data/opals/opal/browser/spec/element/hide_spec.rb +0 -31
- data/opals/opal/browser/spec/element/remove_spec.rb +0 -25
- data/opals/opal/browser/spec/element/show_spec.rb +0 -31
- data/opals/opal/browser/spec/element/style_spec.rb +0 -69
- data/opals/opal/browser/spec/element/toggle_spec.rb +0 -31
- data/opals/opal/browser/spec/element/visible_spec.rb +0 -23
- data/opals/opal/browser/spec/spec_helper.rb +0 -1
- data/opals/opal/opal/Opalfile +0 -14
- data/opals/opal/opal/spec/core/array/compact_spec.rb +0 -15
- data/opals/opal/opal/spec/fixtures/super.rb +0 -70
- data/opals/opal/opal/spec/language/____temp_remove_this.rb +0 -12
- data/opals/opal/opal/spec/language/block_spec.rb +0 -18
- data/opals/opal/opal/spec/language/case_spec.rb +0 -103
- data/opals/opal/opal/spec/language/metaclass_spec.rb +0 -21
- data/opals/opal/opal/spec/language/super_spec.rb +0 -26
- data/opals/opal/runtime/Opalfile +0 -78
- data/opals/opal/runtime/README.md +0 -12
- data/opals/opal/runtime/docs/debugging.md +0 -51
- data/opals/opal/runtime/lib/array.rb +0 -1516
- data/opals/opal/runtime/lib/basic_object.rb +0 -49
- data/opals/opal/runtime/lib/class.rb +0 -54
- data/opals/opal/runtime/lib/dir.rb +0 -36
- data/opals/opal/runtime/lib/error.rb +0 -49
- data/opals/opal/runtime/lib/false_class.rb +0 -52
- data/opals/opal/runtime/lib/file.rb +0 -79
- data/opals/opal/runtime/lib/hash.rb +0 -791
- data/opals/opal/runtime/lib/io.rb +0 -39
- data/opals/opal/runtime/lib/kernel.rb +0 -288
- data/opals/opal/runtime/lib/match_data.rb +0 -36
- data/opals/opal/runtime/lib/module.rb +0 -109
- data/opals/opal/runtime/lib/nil_class.rb +0 -69
- data/opals/opal/runtime/lib/number.rb +0 -398
- data/opals/opal/runtime/lib/proc.rb +0 -77
- data/opals/opal/runtime/lib/range.rb +0 -63
- data/opals/opal/runtime/lib/regexp.rb +0 -111
- data/opals/opal/runtime/lib/ruby.rb +0 -30
- data/opals/opal/runtime/lib/string.rb +0 -328
- data/opals/opal/runtime/lib/symbol.rb +0 -40
- data/opals/opal/runtime/lib/top_self.rb +0 -33
- data/opals/opal/runtime/lib/true_class.rb +0 -45
- data/opals/opal/runtime/runtime/browser.js +0 -287
- data/opals/opal/runtime/runtime/debug.js +0 -180
- data/opals/opal/runtime/runtime/opal.js +0 -1008
- data/opals/opal/runtime/runtime/post_opal.js +0 -1
- data/opals/opal/runtime/runtime/pre_opal.js +0 -2
- data/opals/opal/runtime/runtime/server_side.js +0 -50
- data/opals/opal/spec/LICENSE.txt +0 -26
- data/opals/opal/spec/Opalfile +0 -5
- data/opals/opal/spec/bin/spec.rb +0 -43
- data/opals/opal/spec/lib/spec.rb +0 -33
- data/opals/opal/spec/lib/spec/dsl.rb +0 -41
- data/opals/opal/spec/lib/spec/example.rb +0 -35
- data/opals/opal/spec/lib/spec/example/before_and_after_hooks.rb +0 -81
- data/opals/opal/spec/lib/spec/example/errors.rb +0 -42
- data/opals/opal/spec/lib/spec/example/example_group.rb +0 -37
- data/opals/opal/spec/lib/spec/example/example_group_factory.rb +0 -43
- data/opals/opal/spec/lib/spec/example/example_group_hierarchy.rb +0 -45
- data/opals/opal/spec/lib/spec/example/example_group_proxy.rb +0 -41
- data/opals/opal/spec/lib/spec/example/example_methods.rb +0 -73
- data/opals/opal/spec/lib/spec/example/example_proxy.rb +0 -48
- data/opals/opal/spec/lib/spec/expectations.rb +0 -46
- data/opals/opal/spec/lib/spec/expectations/errors.rb +0 -35
- data/opals/opal/spec/lib/spec/expectations/fail_with.rb +0 -37
- data/opals/opal/spec/lib/spec/expectations/handler.rb +0 -48
- data/opals/opal/spec/lib/spec/matchers.rb +0 -50
- data/opals/opal/spec/lib/spec/matchers/be.rb +0 -26
- data/opals/opal/spec/lib/spec/matchers/generated_descriptions.rb +0 -47
- data/opals/opal/spec/lib/spec/matchers/operator_matcher.rb +0 -66
- data/opals/opal/spec/lib/spec/runner.rb +0 -48
- data/opals/opal/spec/lib/spec/runner/example_group_runner.rb +0 -71
- data/opals/opal/spec/lib/spec/runner/formatter/terminal_formatter.rb +0 -82
- data/opals/opal/spec/lib/spec/runner/options.rb +0 -63
- data/opals/opal/spec/resources/index.html +0 -25
- data/opals/opal/spec/resources/spec.css +0 -132
- data/spec/cherry_kit/iseq_spec.rb +0 -38
- data/spec/spec_helper.rb +0 -16
- data/spec/vienna_spec.rb +0 -7
- data/yard/index.html +0 -43
- data/yard/style.css +0 -765
|
@@ -0,0 +1,1267 @@
|
|
|
1
|
+
class RubyParser
|
|
2
|
+
|
|
3
|
+
token CLASS MODULE DEF UNDEF BEGIN RESCUE ENSURE END IF UNLESS
|
|
4
|
+
THEN ELSIF ELSE CASE WHEN WHILE UNTIL FOR BREAK NEXT
|
|
5
|
+
REDO RETRY IN DO DO_COND DO_BLOCK RETURN YIELD SUPER
|
|
6
|
+
SELF NIL TRUE FALSE AND OR NOT IF_MOD UNLESS_MOD WHILE_MOD
|
|
7
|
+
UNTIL_MOD RESCUE_MOD ALIAS DEFINED klBEGIN klEND LINE
|
|
8
|
+
FILE IDENTIFIER FID GVAR IVAR CONSTANT CVAR NTH_REF
|
|
9
|
+
BACK_REF STRING_CONTENT INTEGER FLOAT REGEXP_END '+@'
|
|
10
|
+
'-@' '-@NUM' '**' '<=>' '==' '===' '!=' '>=' '<=' '&&'
|
|
11
|
+
'||' '=~' '!~' '.' '..' '...' '[]' '[]=' '<<' '>>'
|
|
12
|
+
'::' '::@' OP_ASGN '=>' PAREN_BEG '(' ')' tLPAREN_ARG
|
|
13
|
+
ARRAY_BEG ']' tLBRACE tLBRACE_ARG SPLAT '*' '&@' '&'
|
|
14
|
+
'~' '%' '/' '+' '-' '<' '>' '|' '!' '^'
|
|
15
|
+
'{@' '}' BACK_REF2 SYMBOL_BEG STRING_BEG XSTRING_BEG REGEXP_BEG
|
|
16
|
+
WORDS_BEG tAWORDS_BEG STRING_DBEG STRING_DVAR STRING_END STRING
|
|
17
|
+
SYMBOL '\\n' '?' ':' ',' SPACE ';' BLOCK_GIVEN
|
|
18
|
+
|
|
19
|
+
prechigh
|
|
20
|
+
right '!' '~' '+@'
|
|
21
|
+
right '**'
|
|
22
|
+
right '-@NUM' '-@'
|
|
23
|
+
left '*' '/' '%'
|
|
24
|
+
left '+' '-'
|
|
25
|
+
left '<<' '>>'
|
|
26
|
+
left '&'
|
|
27
|
+
left '|' '^'
|
|
28
|
+
left '>' '>=' '<' '<='
|
|
29
|
+
nonassoc '<=>' '==' '===' '!=' '=~' '!~'
|
|
30
|
+
left '&&'
|
|
31
|
+
left '||'
|
|
32
|
+
nonassoc '..' '...'
|
|
33
|
+
right '?' ':'
|
|
34
|
+
left RESCUE_MOD
|
|
35
|
+
right '=' OP_ASGN
|
|
36
|
+
nonassoc DEFINED
|
|
37
|
+
right NOT
|
|
38
|
+
left OR AND
|
|
39
|
+
nonassoc IF_MOD UNLESS_MOD WHILE_MOD UNTIL_MOD
|
|
40
|
+
nonassoc tLBRACE_ARG
|
|
41
|
+
nonassoc LOWEST
|
|
42
|
+
preclow
|
|
43
|
+
|
|
44
|
+
rule
|
|
45
|
+
|
|
46
|
+
target:
|
|
47
|
+
compstmt
|
|
48
|
+
{
|
|
49
|
+
result = "result = val[0];"
|
|
50
|
+
# <D-/>result = "result = 100;"
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
bodystmt:
|
|
54
|
+
compstmt opt_rescue opt_else opt_ensure
|
|
55
|
+
{
|
|
56
|
+
result = "result = new this.BodyStatementsNode(val[0], val[1], val[2], val[3]);"
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
compstmt:
|
|
60
|
+
stmts opt_terms
|
|
61
|
+
{
|
|
62
|
+
result = "result = val[0];"
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
stmts:
|
|
66
|
+
none
|
|
67
|
+
{
|
|
68
|
+
result = "result = new this.StatementsNode([]);"
|
|
69
|
+
}
|
|
70
|
+
| stmt
|
|
71
|
+
{
|
|
72
|
+
result = "result = new this.StatementsNode([val[0]]);"
|
|
73
|
+
}
|
|
74
|
+
| stmts terms stmt
|
|
75
|
+
{
|
|
76
|
+
result = "val[0].push(val[2]); result = val[0];"
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
stmt: ALIAS fitem fitem
|
|
80
|
+
| ALIAS GVAR GVAR
|
|
81
|
+
| ALIAS GVAR BACK_REF
|
|
82
|
+
| ALIAS GVAR NTH_REF
|
|
83
|
+
| UNDEF undef_list
|
|
84
|
+
| stmt IF_MOD expr_value
|
|
85
|
+
{
|
|
86
|
+
result = "result = new this.IfModNode(val[1], val[2], val[0]);"
|
|
87
|
+
}
|
|
88
|
+
| stmt UNLESS_MOD expr_value
|
|
89
|
+
{
|
|
90
|
+
result = "result = new this.IfModNode(val[1], val[2], val[0]);"
|
|
91
|
+
}
|
|
92
|
+
| stmt WHILE_MOD expr_value
|
|
93
|
+
| stmt UNTIL_MOD expr_value
|
|
94
|
+
| stmt RESCUE_MOD stmt
|
|
95
|
+
| klBEGIN '{@' compstmt '}'
|
|
96
|
+
| klEND '{@' compstmt '}'
|
|
97
|
+
| lhs '=' command_call
|
|
98
|
+
{
|
|
99
|
+
result = "result = new this.AssignNode(val[0], val[2], val[1]);"
|
|
100
|
+
}
|
|
101
|
+
| mlhs '=' command_call
|
|
102
|
+
| var_lhs OP_ASGN command_call
|
|
103
|
+
{
|
|
104
|
+
# result = "result = ['op_asgn', val[1], val[0], val[2]];"
|
|
105
|
+
result = "result = new this.OpAsgnNode(val[1], val[0], val[2]);"
|
|
106
|
+
}
|
|
107
|
+
| primary_value '[@' aref_args ']' OP_ASGN command_call
|
|
108
|
+
| primary_value '.' IDENTIFIER OP_ASGN command_call
|
|
109
|
+
| primary_value '.' CONSTANT OP_ASGN command_call
|
|
110
|
+
| primary_value '::' IDENTIFIER OP_ASGN command_call
|
|
111
|
+
| backref OP_ASGN command_call
|
|
112
|
+
| lhs '=' mrhs
|
|
113
|
+
| mlhs '=' arg_value
|
|
114
|
+
| mlhs '=' mrhs
|
|
115
|
+
| expr
|
|
116
|
+
|
|
117
|
+
expr: command_call
|
|
118
|
+
| expr AND expr
|
|
119
|
+
{
|
|
120
|
+
result = "result = [val[1], val[0], val[2]];"
|
|
121
|
+
}
|
|
122
|
+
| expr OR expr
|
|
123
|
+
{
|
|
124
|
+
result = "result = [val[1], val[0], val[2]];"
|
|
125
|
+
}
|
|
126
|
+
| NOT expr
|
|
127
|
+
{
|
|
128
|
+
result = "result = ['unary', '!', val[1]];"
|
|
129
|
+
}
|
|
130
|
+
| '!' command_call
|
|
131
|
+
{
|
|
132
|
+
result = "result = ['unary', '!', val[1]];"
|
|
133
|
+
}
|
|
134
|
+
| arg
|
|
135
|
+
|
|
136
|
+
expr_value: expr
|
|
137
|
+
|
|
138
|
+
command_call: command
|
|
139
|
+
| block_command
|
|
140
|
+
| RETURN call_args
|
|
141
|
+
{
|
|
142
|
+
result = "result = new this.ReturnNode(val[0], val[1]);"
|
|
143
|
+
}
|
|
144
|
+
| BREAK call_args
|
|
145
|
+
{
|
|
146
|
+
result = "result = ['break', val[1]];"
|
|
147
|
+
}
|
|
148
|
+
| NEXT call_args
|
|
149
|
+
{
|
|
150
|
+
result = "result = ['next', val[1]];"
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
block_command: block_call
|
|
154
|
+
| block_call '.' operation2 command_args
|
|
155
|
+
| block_call '::' operation2 command_args
|
|
156
|
+
|
|
157
|
+
cmd_brace_block: tLBRACE_ARG opt_block_var compstmt '}'
|
|
158
|
+
|
|
159
|
+
command: operation command_args =LOWEST
|
|
160
|
+
{
|
|
161
|
+
result = "result = new this.CallNode(null, val[0], val[1]);"
|
|
162
|
+
}
|
|
163
|
+
| operation command_args cmd_brace_block
|
|
164
|
+
| primary_value '.' operation2 command_args =LOWEST
|
|
165
|
+
{
|
|
166
|
+
result = "result = new this.CallNode(val[0], val[2], val[3]);"
|
|
167
|
+
}
|
|
168
|
+
| primary_value '.' operation2 command_args cmd_brace_block
|
|
169
|
+
| primary_value '::' operation2 command_args =LOWEST
|
|
170
|
+
{
|
|
171
|
+
result = "result = ['call', val[0], val[2], val[3]];"
|
|
172
|
+
}
|
|
173
|
+
| primary_value '::' operation2 command_args cmd_brace_block
|
|
174
|
+
| SUPER command_args
|
|
175
|
+
{
|
|
176
|
+
result = "result = ['super', val[1]];"
|
|
177
|
+
}
|
|
178
|
+
| YIELD command_args
|
|
179
|
+
{
|
|
180
|
+
result = "result = new this.YieldNode(val[0], val[1]);"
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
mlhs: mlhs_basic
|
|
184
|
+
| PAREN_BEG mlhs_entry ')'
|
|
185
|
+
|
|
186
|
+
mlhs_entry: mlhs_basic
|
|
187
|
+
| PAREN_BEG mlhs_entry ')'
|
|
188
|
+
|
|
189
|
+
mlhs_basic: mlhs_head
|
|
190
|
+
| mlhs_head mlhs_item
|
|
191
|
+
| mlhs_head SPLAT mlhs_node
|
|
192
|
+
| mlhs_head SPLAT
|
|
193
|
+
| SPLAT mlhs_node
|
|
194
|
+
| SPLAT
|
|
195
|
+
|
|
196
|
+
mlhs_item: mlhs_node
|
|
197
|
+
| PAREN_BEG mlhs_entry ')'
|
|
198
|
+
|
|
199
|
+
mlhs_head: mlhs_item ','
|
|
200
|
+
| mlhs_head mlhs_item ','
|
|
201
|
+
|
|
202
|
+
mlhs_node: variable
|
|
203
|
+
| primary_value '[@' aref_args ']'
|
|
204
|
+
| primary_value '.' IDENTIFIER
|
|
205
|
+
| primary_value '::' IDENTIFIER
|
|
206
|
+
| primary_value '.' CONSTANT
|
|
207
|
+
| primary_value '::' CONSTANT
|
|
208
|
+
| '::@' CONSTANT
|
|
209
|
+
| backref
|
|
210
|
+
|
|
211
|
+
lhs: variable
|
|
212
|
+
| primary_value '[@' aref_args ']'
|
|
213
|
+
{
|
|
214
|
+
# result = "result = ['aref', val[0], val[2]];"
|
|
215
|
+
result = "result = new this.ArefNode(val[0], val[2]);"
|
|
216
|
+
}
|
|
217
|
+
| primary_value '.' IDENTIFIER
|
|
218
|
+
{
|
|
219
|
+
# result = "result = ['call', val[0], val[2], [[]]];"
|
|
220
|
+
result = "result = new this.CallNode(val[0], val[2], [[]]);"
|
|
221
|
+
}
|
|
222
|
+
| primary_value '::' IDENTIFIER
|
|
223
|
+
| primary_value '.' CONSTANT
|
|
224
|
+
| primary_value '::' CONSTANT
|
|
225
|
+
| '::@' CONSTANT
|
|
226
|
+
| backref
|
|
227
|
+
|
|
228
|
+
cname: CONSTANT
|
|
229
|
+
|
|
230
|
+
cpath: '::@' cname
|
|
231
|
+
{
|
|
232
|
+
result = "result = ['::', val[1]];"
|
|
233
|
+
}
|
|
234
|
+
| cname
|
|
235
|
+
{
|
|
236
|
+
result = "result = [null, val[0]];"
|
|
237
|
+
}
|
|
238
|
+
| primary_value '::' cname
|
|
239
|
+
{
|
|
240
|
+
result = "result = [val[0], val[2]];"
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
fname: IDENTIFIER
|
|
244
|
+
| CONSTANT
|
|
245
|
+
| FID
|
|
246
|
+
| op
|
|
247
|
+
| reswords
|
|
248
|
+
|
|
249
|
+
fitem: fname
|
|
250
|
+
| symbol
|
|
251
|
+
|
|
252
|
+
undef_list: fitem
|
|
253
|
+
| undef_list ',' fitem
|
|
254
|
+
|
|
255
|
+
op: '|' | '^' | '&' | '<=>' | '==' | '==='
|
|
256
|
+
| '=~' | '>' | '>=' | '<' | '<=' | '<<'
|
|
257
|
+
| '>>' | '+' | '-' | '*' | SPLAT | '/'
|
|
258
|
+
| '%' | '**' | '~' | '+@' | '-@' | '[]'
|
|
259
|
+
| '[]=' | BACK_REF2
|
|
260
|
+
|
|
261
|
+
reswords: LINE | FILE | klBEGIN | klEND | ALIAS | AND
|
|
262
|
+
| BEGIN | BREAK | CASE | CLASS | DEF | DEFINED
|
|
263
|
+
| DO | ELSE | ELSIF | END | ENSURE | FALSE
|
|
264
|
+
| FOR | IN | MODULE | NEXT | NIL | NOT
|
|
265
|
+
| OR | REDO | RESCUE | RETRY | RETURN | SELF
|
|
266
|
+
| SUPER | THEN | TRUE | UNDEF | WHEN | YIELD
|
|
267
|
+
| IF_MOD | UNLESS_MOD | WHILE_MOD | UNTIL_MOD | RESCUE_MOD
|
|
268
|
+
| BLOCK_GIVEN
|
|
269
|
+
|
|
270
|
+
arg:
|
|
271
|
+
lhs '=' arg
|
|
272
|
+
{
|
|
273
|
+
result = "result = new this.AssignNode(val[0], val[2], val[1]);"
|
|
274
|
+
}
|
|
275
|
+
| lhs '=' arg RESCUE_MOD arg
|
|
276
|
+
| var_lhs OP_ASGN arg
|
|
277
|
+
{
|
|
278
|
+
result = "result = new this.OpAsgnNode(val[1], val[0], val[2]);"
|
|
279
|
+
}
|
|
280
|
+
| primary_value '[@' aref_args ']' OP_ASGN arg
|
|
281
|
+
| primary_value '.' IDENTIFIER OP_ASGN arg
|
|
282
|
+
| primary_value '.' CONSTANT OP_ASGN arg
|
|
283
|
+
| primary_value '::' IDENTIFIER OP_ASGN arg
|
|
284
|
+
| primary_value '::' CONSTANT OP_ASGN arg
|
|
285
|
+
| '::@' CONSTANT OP_ASGN arg
|
|
286
|
+
| backref OP_ASGN arg
|
|
287
|
+
| arg '..' arg
|
|
288
|
+
{
|
|
289
|
+
result = "result = ['range', val[1], val[0], val[2]];"
|
|
290
|
+
}
|
|
291
|
+
| arg '...' arg
|
|
292
|
+
{
|
|
293
|
+
result = "result = ['range', val[1], val[0], val[2]];"
|
|
294
|
+
}
|
|
295
|
+
| arg '+' arg
|
|
296
|
+
{
|
|
297
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
298
|
+
}
|
|
299
|
+
| arg '-' arg
|
|
300
|
+
{
|
|
301
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
302
|
+
}
|
|
303
|
+
| arg '*' arg
|
|
304
|
+
{
|
|
305
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
306
|
+
}
|
|
307
|
+
| arg '/' arg
|
|
308
|
+
{
|
|
309
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
310
|
+
}
|
|
311
|
+
| arg '%' arg
|
|
312
|
+
{
|
|
313
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
314
|
+
}
|
|
315
|
+
| arg '**' arg
|
|
316
|
+
{
|
|
317
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
318
|
+
}
|
|
319
|
+
| '-@NUM' INTEGER '**' arg
|
|
320
|
+
| '-@NUM' FLOAT '**' arg
|
|
321
|
+
| '+@' arg
|
|
322
|
+
{
|
|
323
|
+
result = "result = new this.CallNode(val[1], val[0], [[]]);"
|
|
324
|
+
}
|
|
325
|
+
| '-@' arg
|
|
326
|
+
{
|
|
327
|
+
result = "result = new this.CallNode(val[1], val[0], [[]]);"
|
|
328
|
+
}
|
|
329
|
+
| arg '|' arg
|
|
330
|
+
{
|
|
331
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
332
|
+
}
|
|
333
|
+
| arg '^' arg
|
|
334
|
+
{
|
|
335
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
336
|
+
}
|
|
337
|
+
| arg '&' arg
|
|
338
|
+
{
|
|
339
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
340
|
+
}
|
|
341
|
+
| arg '<=>' arg
|
|
342
|
+
{
|
|
343
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
344
|
+
}
|
|
345
|
+
| arg '>' arg
|
|
346
|
+
{
|
|
347
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
348
|
+
}
|
|
349
|
+
| arg '>=' arg
|
|
350
|
+
{
|
|
351
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
352
|
+
}
|
|
353
|
+
| arg '<' arg
|
|
354
|
+
{
|
|
355
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
356
|
+
}
|
|
357
|
+
| arg '<=' arg
|
|
358
|
+
{
|
|
359
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
360
|
+
}
|
|
361
|
+
| arg '==' arg
|
|
362
|
+
{
|
|
363
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
364
|
+
}
|
|
365
|
+
| arg '===' arg
|
|
366
|
+
{
|
|
367
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
368
|
+
}
|
|
369
|
+
| arg '!=' arg
|
|
370
|
+
{
|
|
371
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
372
|
+
}
|
|
373
|
+
| arg '=~' arg
|
|
374
|
+
{
|
|
375
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
376
|
+
}
|
|
377
|
+
| arg '!~' arg
|
|
378
|
+
{
|
|
379
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
380
|
+
}
|
|
381
|
+
| '!' arg
|
|
382
|
+
{
|
|
383
|
+
result = "result = new this.CallNode(val[1], val[0], [[]]);"
|
|
384
|
+
}
|
|
385
|
+
| '~' arg
|
|
386
|
+
{
|
|
387
|
+
result = "result = new this.CallNode(val[1], val[0], [[]]);"
|
|
388
|
+
}
|
|
389
|
+
| arg '<<' arg
|
|
390
|
+
{
|
|
391
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
392
|
+
}
|
|
393
|
+
| arg '>>' arg
|
|
394
|
+
{
|
|
395
|
+
result = "result = new this.CallNode(val[0], val[1], [[val[2]]]);"
|
|
396
|
+
}
|
|
397
|
+
| arg '&&' arg
|
|
398
|
+
{
|
|
399
|
+
result = "result = new this.AndNode(val[1], val[0], val[2]);"
|
|
400
|
+
}
|
|
401
|
+
| arg '||' arg
|
|
402
|
+
{
|
|
403
|
+
result = "result = new this.OrNode(val[1], val[0], val[2]);"
|
|
404
|
+
}
|
|
405
|
+
| DEFINED opt_nl arg
|
|
406
|
+
| arg '?' arg ':' arg
|
|
407
|
+
{
|
|
408
|
+
result = "result = ['ternary', val[0], val[2], val[4]];"
|
|
409
|
+
}
|
|
410
|
+
| primary
|
|
411
|
+
|
|
412
|
+
arg_value: arg
|
|
413
|
+
|
|
414
|
+
aref_args: none
|
|
415
|
+
{
|
|
416
|
+
result = "result = [[], null];"
|
|
417
|
+
}
|
|
418
|
+
| command opt_nl
|
|
419
|
+
| args trailer
|
|
420
|
+
{
|
|
421
|
+
result = "result = [val[0], null];"
|
|
422
|
+
}
|
|
423
|
+
| args ',' SPLAT arg opt_nl
|
|
424
|
+
{
|
|
425
|
+
result = "result = [val[0], val[3]];"
|
|
426
|
+
}
|
|
427
|
+
| assocs trailer
|
|
428
|
+
| SPLAT arg opt_nl
|
|
429
|
+
{
|
|
430
|
+
result = "result = [[], val[1]];"
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
paren_args: '(' none ')'
|
|
434
|
+
{
|
|
435
|
+
result = "result = [[]];"
|
|
436
|
+
}
|
|
437
|
+
| '(' call_args opt_nl ')'
|
|
438
|
+
{
|
|
439
|
+
result = "result = val[1];"
|
|
440
|
+
}
|
|
441
|
+
| '(' block_call opt_nl ')'
|
|
442
|
+
| '(' args ',' block_call opt_nl ')'
|
|
443
|
+
|
|
444
|
+
opt_paren_args: none
|
|
445
|
+
{
|
|
446
|
+
result = "result = [];"
|
|
447
|
+
}
|
|
448
|
+
| paren_args
|
|
449
|
+
|
|
450
|
+
call_args: command
|
|
451
|
+
{
|
|
452
|
+
result = "result = [[val[0]], null, null, null];"
|
|
453
|
+
}
|
|
454
|
+
| args opt_block_arg
|
|
455
|
+
{
|
|
456
|
+
result = "result = [val[0], null, null, val[1]];"
|
|
457
|
+
}
|
|
458
|
+
| args ',' SPLAT arg_value opt_block_arg
|
|
459
|
+
{
|
|
460
|
+
result = "result = [val[0], val[3], null, val[4]];"
|
|
461
|
+
}
|
|
462
|
+
| assocs opt_block_arg
|
|
463
|
+
{
|
|
464
|
+
result = "result = [null, null, val[0], val[1]];"
|
|
465
|
+
}
|
|
466
|
+
| assocs ',' SPLAT arg_value opt_block_arg
|
|
467
|
+
{
|
|
468
|
+
result = "result = [null, val[3], val[0], val[4]];"
|
|
469
|
+
}
|
|
470
|
+
| args ',' assocs opt_block_arg
|
|
471
|
+
{
|
|
472
|
+
result = "result = [val[0], null, val[2], val[3]];"
|
|
473
|
+
}
|
|
474
|
+
| args ',' assocs ',' SPLAT arg opt_block_arg
|
|
475
|
+
{
|
|
476
|
+
result = "result = [val[0], val[5], val[2], val[6]];"
|
|
477
|
+
}
|
|
478
|
+
| SPLAT arg_value opt_block_arg
|
|
479
|
+
{
|
|
480
|
+
result = "result = [null, val[1], null, val[2]];"
|
|
481
|
+
}
|
|
482
|
+
| block_arg
|
|
483
|
+
{
|
|
484
|
+
result = "result = [null, null, null, val[0]];"
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
call_args2: arg_value ',' args opt_block_arg
|
|
488
|
+
| arg_value ',' block_arg
|
|
489
|
+
| arg_value ',' SPLAT arg_value opt_block_arg
|
|
490
|
+
| arg_value ',' args ',' SPLAT arg_value opt_block_arg
|
|
491
|
+
| assocs opt_block_arg
|
|
492
|
+
| assocs ',' SPLAT arg_value opt_block_arg
|
|
493
|
+
| arg_value ',' assocs opt_block_arg
|
|
494
|
+
| arg_value ',' args ',' assocs opt_block_arg
|
|
495
|
+
| arg_value ',' assocs ',' SPLAT arg_value opt_block_arg
|
|
496
|
+
| arg_value ',' args ',' assocs ',' SPLAT arg_value opt_block_arg
|
|
497
|
+
| SPLAT arg_value opt_block_arg
|
|
498
|
+
| block_arg
|
|
499
|
+
|
|
500
|
+
command_args:
|
|
501
|
+
{
|
|
502
|
+
result = "this.cmdarg_push(1);"
|
|
503
|
+
}
|
|
504
|
+
open_args
|
|
505
|
+
{
|
|
506
|
+
result = "this.cmdarg_pop(); result = val[1];"
|
|
507
|
+
}
|
|
508
|
+
|
|
509
|
+
open_args: call_args
|
|
510
|
+
| tLPAREN_ARG ')'
|
|
511
|
+
{
|
|
512
|
+
result = "result = [[]];"
|
|
513
|
+
}
|
|
514
|
+
| tLPAREN_ARG call_args2 ')'
|
|
515
|
+
{
|
|
516
|
+
result = "result = val[1];"
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
block_arg: '&@' arg_value
|
|
520
|
+
{
|
|
521
|
+
result = "result = val[1];"
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
opt_block_arg: ',' block_arg
|
|
525
|
+
{
|
|
526
|
+
result = "result = val[1];"
|
|
527
|
+
}
|
|
528
|
+
| none_block_pass
|
|
529
|
+
{
|
|
530
|
+
result = "result = null;"
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
args: arg_value
|
|
534
|
+
{
|
|
535
|
+
result = "result = [val[0]];"
|
|
536
|
+
}
|
|
537
|
+
| args ',' arg_value
|
|
538
|
+
{
|
|
539
|
+
result = "result = val[0].concat([val[2]]);"
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
mrhs: args ',' arg_value
|
|
543
|
+
| args ',' SPLAT arg_value
|
|
544
|
+
| SPLAT arg_value
|
|
545
|
+
|
|
546
|
+
primary: literal
|
|
547
|
+
| strings
|
|
548
|
+
| xstring
|
|
549
|
+
| regexp
|
|
550
|
+
| words
|
|
551
|
+
| awords
|
|
552
|
+
| var_ref
|
|
553
|
+
| backref
|
|
554
|
+
| FID
|
|
555
|
+
| BEGIN bodystmt END
|
|
556
|
+
{
|
|
557
|
+
result = "result = new this.BeginNode(val[0], val[1], val[2]);"
|
|
558
|
+
}
|
|
559
|
+
| tLPAREN_ARG expr opt_nl ')'
|
|
560
|
+
| PAREN_BEG compstmt ')'
|
|
561
|
+
{
|
|
562
|
+
result = "result = new this.ParenNode(val[0], val[1], val[2]);"
|
|
563
|
+
}
|
|
564
|
+
| primary_value '::' CONSTANT
|
|
565
|
+
{
|
|
566
|
+
result = "result = new this.Colon2Node(val[0], val[2]);"
|
|
567
|
+
}
|
|
568
|
+
| '::@' CONSTANT
|
|
569
|
+
| primary_value '[@' aref_args ']'
|
|
570
|
+
{
|
|
571
|
+
result = "result = new this.CallNode(val[0], { line: val[1].line, value: '[]' }, val[2]);"
|
|
572
|
+
# result = "result = ['aref', val[0], val[2]];"<D-/>
|
|
573
|
+
}
|
|
574
|
+
| '[' aref_args ']'
|
|
575
|
+
{
|
|
576
|
+
result = "result = new this.ArrayNode(val[1], val[0], val[2]);"
|
|
577
|
+
}
|
|
578
|
+
| '{' assoc_list '}'
|
|
579
|
+
{
|
|
580
|
+
result = "result = new this.HashNode(val[1], val[0], val[2]);"
|
|
581
|
+
}
|
|
582
|
+
| RETURN
|
|
583
|
+
{
|
|
584
|
+
result = "result = new this.ReturnNode(val[0], [[]]);"
|
|
585
|
+
}
|
|
586
|
+
| YIELD '(' call_args ')'
|
|
587
|
+
{
|
|
588
|
+
result = "result = new this.YieldNode(val[0], val[2]);"
|
|
589
|
+
}
|
|
590
|
+
| YIELD '(' ')'
|
|
591
|
+
{
|
|
592
|
+
result = "result = new this.YieldNode(val[0], [[]]);"
|
|
593
|
+
}
|
|
594
|
+
| YIELD
|
|
595
|
+
{
|
|
596
|
+
result = "result = new this.YieldNode(val[0], [[]]);"
|
|
597
|
+
}
|
|
598
|
+
| DEFINED opt_nl '(' expr ')'
|
|
599
|
+
| operation brace_block
|
|
600
|
+
{
|
|
601
|
+
result = "result = new this.CallNode(null, val[0], [[]]); result.block = val[1];"
|
|
602
|
+
}
|
|
603
|
+
| method_call
|
|
604
|
+
| method_call brace_block
|
|
605
|
+
{
|
|
606
|
+
# result = "val[0][4] = val[1]; result = val[0];"
|
|
607
|
+
result = "result = val[0]; result.block = val[1];"
|
|
608
|
+
}
|
|
609
|
+
| IF expr_value then compstmt if_tail END
|
|
610
|
+
{
|
|
611
|
+
result = "result = new this.IfNode(val[0], val[1], val[3], val[4], val[5]);"
|
|
612
|
+
}
|
|
613
|
+
| UNLESS expr_value then compstmt opt_else END
|
|
614
|
+
{
|
|
615
|
+
result = "result = ['unless', val[1], val[3], val[4]];"
|
|
616
|
+
}
|
|
617
|
+
| WHILE
|
|
618
|
+
{
|
|
619
|
+
result = "this.cond_push(1);"
|
|
620
|
+
}
|
|
621
|
+
expr_value do
|
|
622
|
+
{
|
|
623
|
+
result = "this.cond_pop();"
|
|
624
|
+
}
|
|
625
|
+
compstmt END
|
|
626
|
+
{
|
|
627
|
+
result = "result = ['while', val[0], val[2], val[5]];"
|
|
628
|
+
}
|
|
629
|
+
| UNTIL
|
|
630
|
+
{
|
|
631
|
+
result = "this.cond_push(1);"
|
|
632
|
+
}
|
|
633
|
+
expr_value do
|
|
634
|
+
{
|
|
635
|
+
result = "this.cond_pop();"
|
|
636
|
+
}
|
|
637
|
+
compstmt END
|
|
638
|
+
{
|
|
639
|
+
result = "result = ['while', val[0], val[2], val[5]];"
|
|
640
|
+
}
|
|
641
|
+
| CASE expr_value opt_terms case_body END
|
|
642
|
+
{
|
|
643
|
+
result = "result = ['case', val[1], val[3]];"
|
|
644
|
+
}
|
|
645
|
+
| CASE opt_terms case_body END
|
|
646
|
+
{
|
|
647
|
+
result = "result = ['case', null, val[2]];"
|
|
648
|
+
}
|
|
649
|
+
| CASE opt_terms ELSE compstmt END
|
|
650
|
+
| FOR block_var IN
|
|
651
|
+
{
|
|
652
|
+
result = "this.cond_push(1);"
|
|
653
|
+
}
|
|
654
|
+
expr_value do
|
|
655
|
+
{
|
|
656
|
+
result = "this.cond_pop();"
|
|
657
|
+
}
|
|
658
|
+
compstmt END
|
|
659
|
+
| CLASS cpath superclass bodystmt END
|
|
660
|
+
{
|
|
661
|
+
# result = "result = ['class', val[1], val[2], val[3]];"
|
|
662
|
+
result = "result = new this.ClassNode(val[0], val[1], val[2], val[3], val[4]);"
|
|
663
|
+
}
|
|
664
|
+
| CLASS '<<' expr term bodystmt END
|
|
665
|
+
{
|
|
666
|
+
result = "result = ['class_shift', val[2], val[4]];"
|
|
667
|
+
}
|
|
668
|
+
| MODULE cpath bodystmt END
|
|
669
|
+
{
|
|
670
|
+
result = "result = new this.ModuleNode(val[0], val[1], val[2], val[3]);"
|
|
671
|
+
}
|
|
672
|
+
| DEF fname f_arglist bodystmt END
|
|
673
|
+
{
|
|
674
|
+
result = "result = new this.DefNode(val[0], null, val[1], val[2], val[3], val[4]);"
|
|
675
|
+
}
|
|
676
|
+
| DEF singleton dot_or_colon fname f_arglist bodystmt END
|
|
677
|
+
{
|
|
678
|
+
result = "result = new this.DefNode(val[0], val[1], val[3], val[4], val[5], val[6]);"
|
|
679
|
+
}
|
|
680
|
+
| BREAK
|
|
681
|
+
{
|
|
682
|
+
result = "result = ['break', null];"
|
|
683
|
+
}
|
|
684
|
+
| NEXT
|
|
685
|
+
{
|
|
686
|
+
result = "result = ['next', null];"
|
|
687
|
+
}
|
|
688
|
+
| REDO
|
|
689
|
+
| RETRY
|
|
690
|
+
|
|
691
|
+
primary_value: primary
|
|
692
|
+
|
|
693
|
+
then: term
|
|
694
|
+
| ':'
|
|
695
|
+
| THEN
|
|
696
|
+
| term THEN
|
|
697
|
+
|
|
698
|
+
do: term
|
|
699
|
+
| ':'
|
|
700
|
+
| DO_COND
|
|
701
|
+
|
|
702
|
+
if_tail:
|
|
703
|
+
opt_else
|
|
704
|
+
{
|
|
705
|
+
result = "result = val[0];"
|
|
706
|
+
}
|
|
707
|
+
| ELSIF expr_value then compstmt if_tail
|
|
708
|
+
{
|
|
709
|
+
result = "result =
|
|
710
|
+
[[val[0], val[1], val[3]]].concat(val[4]);"
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
opt_else:
|
|
714
|
+
none
|
|
715
|
+
{
|
|
716
|
+
result = "result = [];"
|
|
717
|
+
}
|
|
718
|
+
| ELSE compstmt
|
|
719
|
+
{
|
|
720
|
+
result = "result = [[val[0], val[1]]];"
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
# block_var: lhs
|
|
724
|
+
# | mlhs
|
|
725
|
+
|
|
726
|
+
block_var: block_var_args
|
|
727
|
+
{
|
|
728
|
+
result = 'result = [val[0], null];'
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
block_var_args: f_arg ',' f_block_optarg ',' f_rest_arg opt_f_block_arg
|
|
732
|
+
{
|
|
733
|
+
result = "result = [val[0], val[2], val[4], val[5]];"
|
|
734
|
+
}
|
|
735
|
+
| f_arg ',' f_block_optarg opt_f_block_arg
|
|
736
|
+
{
|
|
737
|
+
result = "result = [val[0], val[2], null, val[3]];"
|
|
738
|
+
}
|
|
739
|
+
| f_arg ',' f_rest_arg opt_f_block_arg
|
|
740
|
+
{
|
|
741
|
+
result = "result = [val[0], null, val[2], val[3]];"
|
|
742
|
+
}
|
|
743
|
+
| f_arg opt_f_block_arg
|
|
744
|
+
{
|
|
745
|
+
result = "result = [val[0], null, null, val[1]];"
|
|
746
|
+
}
|
|
747
|
+
| f_block_optarg ',' f_rest_arg opt_f_block_arg
|
|
748
|
+
{
|
|
749
|
+
result = "result = [[], val[0], val[2], val[3]];"
|
|
750
|
+
}
|
|
751
|
+
| f_block_optarg opt_f_block_arg
|
|
752
|
+
{
|
|
753
|
+
result = "result = [[], val[0], null, val[1]];"
|
|
754
|
+
}
|
|
755
|
+
| f_rest_arg opt_f_block_arg
|
|
756
|
+
{
|
|
757
|
+
result = "result = [[], null, val[0], val[1]];"
|
|
758
|
+
}
|
|
759
|
+
| f_block_arg
|
|
760
|
+
{
|
|
761
|
+
result = "result = [[], null, null, val[0]];"
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
f_block_optarg: f_block_opt
|
|
765
|
+
{
|
|
766
|
+
result = "result = [val[0]];"
|
|
767
|
+
}
|
|
768
|
+
| f_block_optarg ',' f_block_opt
|
|
769
|
+
{
|
|
770
|
+
result = "result = val[0].concat([val[2]]);"
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
f_block_opt: IDENTIFIER '=' primary_value
|
|
774
|
+
{
|
|
775
|
+
result = "result = [val[0], val[2]];"
|
|
776
|
+
}
|
|
777
|
+
|
|
778
|
+
opt_block_var: none
|
|
779
|
+
{
|
|
780
|
+
result = "result = [null];"
|
|
781
|
+
}
|
|
782
|
+
| '|' '|'
|
|
783
|
+
{
|
|
784
|
+
result = "result = [null];"
|
|
785
|
+
}
|
|
786
|
+
| '||'
|
|
787
|
+
{
|
|
788
|
+
result = "result = [null];"
|
|
789
|
+
}
|
|
790
|
+
| '|' block_var '|'
|
|
791
|
+
{
|
|
792
|
+
result = "result = val[1];"
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
do_block: DO_BLOCK
|
|
796
|
+
{
|
|
797
|
+
# result = "print('doing half command');"
|
|
798
|
+
}
|
|
799
|
+
opt_block_var compstmt END
|
|
800
|
+
{
|
|
801
|
+
# result = "result = [val[2], val[3]];"
|
|
802
|
+
result = "result = new this.BlockNode(val[0], val[2], val[3], val[4]);"
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
block_call: command do_block
|
|
806
|
+
{
|
|
807
|
+
result = "result = val[0]; val[0].block = val[1];"
|
|
808
|
+
# result = "val[0][4] = val[1]; result = val[0];"
|
|
809
|
+
}
|
|
810
|
+
| block_call '.' operation2 opt_paren_args
|
|
811
|
+
| block_call '::' operation2 opt_paren_args
|
|
812
|
+
|
|
813
|
+
method_call: operation paren_args
|
|
814
|
+
{
|
|
815
|
+
# result = "result = ['call', null, val[0], val[1]];"
|
|
816
|
+
result = "result = new this.CallNode(null, val[0], val[1]);"
|
|
817
|
+
}
|
|
818
|
+
| primary_value '.' operation2 opt_paren_args
|
|
819
|
+
{
|
|
820
|
+
# result = "result = ['call', val[0], val[2], val[3]];"
|
|
821
|
+
result = "result = new this.CallNode(val[0], val[2], val[3]);"
|
|
822
|
+
}
|
|
823
|
+
| primary_value '::' operation2 paren_args
|
|
824
|
+
| primary_value '::' operation3
|
|
825
|
+
| SUPER paren_args
|
|
826
|
+
{
|
|
827
|
+
result = "result = ['super', val[1]];"
|
|
828
|
+
}
|
|
829
|
+
| SUPER
|
|
830
|
+
{
|
|
831
|
+
result = "result = ['super', [[]]];"
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
brace_block:
|
|
835
|
+
'{@' opt_block_var compstmt '}'
|
|
836
|
+
{
|
|
837
|
+
result = "result = new this.BlockNode(val[0], val[1], val[2], val[3]);"
|
|
838
|
+
}
|
|
839
|
+
| DO opt_block_var compstmt END
|
|
840
|
+
{
|
|
841
|
+
result = "result = new this.BlockNode(val[0], val[1], val[2], val[3]);"
|
|
842
|
+
}
|
|
843
|
+
|
|
844
|
+
case_body: WHEN when_args then compstmt cases
|
|
845
|
+
{
|
|
846
|
+
result =
|
|
847
|
+
"result = [['when', val[1], val[3]]].concat(val[4]);"
|
|
848
|
+
}
|
|
849
|
+
|
|
850
|
+
when_args: args
|
|
851
|
+
{
|
|
852
|
+
result = "result = val[0];"
|
|
853
|
+
}
|
|
854
|
+
| args ',' SPLAT arg_value
|
|
855
|
+
{
|
|
856
|
+
result = "result = val[0];"
|
|
857
|
+
}
|
|
858
|
+
| SPLAT arg_value
|
|
859
|
+
{
|
|
860
|
+
result = "result = [];"
|
|
861
|
+
}
|
|
862
|
+
|
|
863
|
+
cases: opt_else
|
|
864
|
+
| case_body
|
|
865
|
+
|
|
866
|
+
opt_rescue:
|
|
867
|
+
RESCUE exc_list exc_var then compstmt opt_rescue
|
|
868
|
+
{
|
|
869
|
+
result = "result = [[val[0], val[1], val[2], val[4]]].concat(val[5]);"
|
|
870
|
+
}
|
|
871
|
+
|
|
|
872
|
+
{
|
|
873
|
+
result = "result = [];"
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
exc_list: arg_value
|
|
877
|
+
| mrhs
|
|
878
|
+
| none
|
|
879
|
+
|
|
880
|
+
exc_var: '=>' lhs
|
|
881
|
+
{
|
|
882
|
+
result = "result = val[1];"
|
|
883
|
+
}
|
|
884
|
+
| none
|
|
885
|
+
{
|
|
886
|
+
result = "result = null;"
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
opt_ensure: ENSURE compstmt
|
|
890
|
+
| none
|
|
891
|
+
|
|
892
|
+
literal: numeric
|
|
893
|
+
| symbol
|
|
894
|
+
| dsym
|
|
895
|
+
|
|
896
|
+
strings: string
|
|
897
|
+
|
|
898
|
+
string: string1
|
|
899
|
+
| string string1
|
|
900
|
+
|
|
901
|
+
string1: STRING_BEG string_contents STRING_END
|
|
902
|
+
{
|
|
903
|
+
result = "result = new this.StringNode(val[1], val[2]);"
|
|
904
|
+
}
|
|
905
|
+
| STRING
|
|
906
|
+
|
|
907
|
+
xstring:
|
|
908
|
+
XSTRING_BEG xstring_contents STRING_END
|
|
909
|
+
{
|
|
910
|
+
result = "result = new this.XStringNode(val[0], val[1], val[2]);"
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
regexp: REGEXP_BEG xstring_contents REGEXP_END
|
|
914
|
+
{
|
|
915
|
+
result = "result = ['regexp', val[1], val[2]];"
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
words: WORDS_BEG SPACE STRING_END
|
|
919
|
+
| WORDS_BEG word_list STRING_END
|
|
920
|
+
|
|
921
|
+
word_list: none
|
|
922
|
+
| word_list word SPACE
|
|
923
|
+
word: string_content
|
|
924
|
+
| word string_content
|
|
925
|
+
|
|
926
|
+
awords: tAWORDS_BEG SPACE STRING_END
|
|
927
|
+
| tAWORDS_BEG qword_list STRING_END
|
|
928
|
+
|
|
929
|
+
qword_list: none
|
|
930
|
+
| qword_list STRING_CONTENT SPACE
|
|
931
|
+
|
|
932
|
+
string_contents: none
|
|
933
|
+
{
|
|
934
|
+
result = "result = [];"
|
|
935
|
+
}
|
|
936
|
+
| string_contents string_content
|
|
937
|
+
{
|
|
938
|
+
result = "result = val[0].concat([val[1]]);"
|
|
939
|
+
}
|
|
940
|
+
|
|
941
|
+
xstring_contents: none
|
|
942
|
+
{
|
|
943
|
+
result = "result = [];"
|
|
944
|
+
}
|
|
945
|
+
| xstring_contents string_content
|
|
946
|
+
{
|
|
947
|
+
result = "result = val[0].concat([val[1]]);"
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
string_content: STRING_CONTENT
|
|
951
|
+
{
|
|
952
|
+
result = "result = ['string_content', val[0]];"
|
|
953
|
+
}
|
|
954
|
+
| STRING_DVAR string_dvar
|
|
955
|
+
{
|
|
956
|
+
result = "result = ['string_dvar', val[1]];"
|
|
957
|
+
}
|
|
958
|
+
| STRING_DBEG
|
|
959
|
+
{
|
|
960
|
+
result = "this.cond_push(0); this.cmdarg_push(0);"
|
|
961
|
+
}
|
|
962
|
+
compstmt '}'
|
|
963
|
+
{
|
|
964
|
+
result = "this.cond_lexpop(); this.cmdarg_lexpop();
|
|
965
|
+
result = ['string_dbegin', val[2]];"
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
string_dvar: GVAR
|
|
969
|
+
| IVAR
|
|
970
|
+
| CVAR
|
|
971
|
+
| backref
|
|
972
|
+
|
|
973
|
+
|
|
974
|
+
symbol:
|
|
975
|
+
SYMBOL_BEG sym
|
|
976
|
+
{
|
|
977
|
+
result = "result = new this.SymbolNode(val[1]);"
|
|
978
|
+
}
|
|
979
|
+
| SYMBOL
|
|
980
|
+
|
|
981
|
+
sym: fname
|
|
982
|
+
| IVAR
|
|
983
|
+
| GVAR
|
|
984
|
+
| CVAR
|
|
985
|
+
|
|
986
|
+
dsym: SYMBOL_BEG xstring_contents STRING_END
|
|
987
|
+
{
|
|
988
|
+
result = "result = ['dsym', val[1]];"
|
|
989
|
+
}
|
|
990
|
+
|
|
991
|
+
numeric:
|
|
992
|
+
INTEGER
|
|
993
|
+
{
|
|
994
|
+
result = "result = new this.NumericNode(val[0]);"
|
|
995
|
+
}
|
|
996
|
+
| FLOAT
|
|
997
|
+
{
|
|
998
|
+
result = "result = new this.NumericNode(val[0]);"
|
|
999
|
+
}
|
|
1000
|
+
| '-@NUM' INTEGER =LOWEST
|
|
1001
|
+
| '-@NUM' FLOAT =LOWEST
|
|
1002
|
+
|
|
1003
|
+
variable: IDENTIFIER
|
|
1004
|
+
{
|
|
1005
|
+
result = "result = new this.IdentifierNode(val[0]);"
|
|
1006
|
+
}
|
|
1007
|
+
| IVAR
|
|
1008
|
+
{
|
|
1009
|
+
result = "result = new this.IvarNode(val[0]);"
|
|
1010
|
+
}
|
|
1011
|
+
| GVAR
|
|
1012
|
+
{
|
|
1013
|
+
result = "result = ['gvar', val[0]];"
|
|
1014
|
+
}
|
|
1015
|
+
| CONSTANT
|
|
1016
|
+
{
|
|
1017
|
+
result = "result = new this.ConstantNode(val[0]);"
|
|
1018
|
+
}
|
|
1019
|
+
| CVAR
|
|
1020
|
+
{
|
|
1021
|
+
result = "result = ['cvar', val[0]];"
|
|
1022
|
+
}
|
|
1023
|
+
| NIL
|
|
1024
|
+
{
|
|
1025
|
+
result = "result = new this.NilNode(val[0]);"
|
|
1026
|
+
}
|
|
1027
|
+
| SELF
|
|
1028
|
+
{
|
|
1029
|
+
# result = "result = ['self'];"
|
|
1030
|
+
result = "result = new this.SelfNode(val[0]);"
|
|
1031
|
+
}
|
|
1032
|
+
| TRUE
|
|
1033
|
+
{
|
|
1034
|
+
result = "result = new this.TrueNode(val[0]);"
|
|
1035
|
+
}
|
|
1036
|
+
| FALSE
|
|
1037
|
+
{
|
|
1038
|
+
result = "result = new this.FalseNode(val[0]);"
|
|
1039
|
+
}
|
|
1040
|
+
| FILE
|
|
1041
|
+
{
|
|
1042
|
+
result = "result = ['file'];"
|
|
1043
|
+
}
|
|
1044
|
+
| LINE
|
|
1045
|
+
{
|
|
1046
|
+
result = "result = ['line'];"
|
|
1047
|
+
}
|
|
1048
|
+
| BLOCK_GIVEN
|
|
1049
|
+
{
|
|
1050
|
+
result = "result = new this.BlockGivenNode(val[0]);"
|
|
1051
|
+
}
|
|
1052
|
+
|
|
1053
|
+
var_ref: variable
|
|
1054
|
+
|
|
1055
|
+
var_lhs: variable
|
|
1056
|
+
|
|
1057
|
+
backref: NTH_REF
|
|
1058
|
+
| BACK_REF
|
|
1059
|
+
|
|
1060
|
+
superclass: term
|
|
1061
|
+
{
|
|
1062
|
+
result = "result = null;"
|
|
1063
|
+
}
|
|
1064
|
+
| '<' expr_value term
|
|
1065
|
+
{
|
|
1066
|
+
result = "result = val[1];"
|
|
1067
|
+
}
|
|
1068
|
+
| error term
|
|
1069
|
+
{
|
|
1070
|
+
result = "result = null;"
|
|
1071
|
+
}
|
|
1072
|
+
|
|
1073
|
+
f_arglist: '(' f_args opt_nl ')'
|
|
1074
|
+
{
|
|
1075
|
+
result = "result = val[1];"
|
|
1076
|
+
}
|
|
1077
|
+
| f_args term
|
|
1078
|
+
{
|
|
1079
|
+
result = "result = val[0];"
|
|
1080
|
+
}
|
|
1081
|
+
|
|
1082
|
+
f_args: f_arg ',' f_optarg ',' f_rest_arg opt_f_block_arg
|
|
1083
|
+
{
|
|
1084
|
+
result = "result = [val[0], val[2], val[4], val[5]];"
|
|
1085
|
+
}
|
|
1086
|
+
| f_arg ',' f_optarg opt_f_block_arg
|
|
1087
|
+
{
|
|
1088
|
+
result = "result = [val[0], val[2], null, val[3]];"
|
|
1089
|
+
}
|
|
1090
|
+
| f_arg ',' f_rest_arg opt_f_block_arg
|
|
1091
|
+
{
|
|
1092
|
+
result = "result = [val[0], [], val[2], val[3]];"
|
|
1093
|
+
}
|
|
1094
|
+
| f_arg opt_f_block_arg
|
|
1095
|
+
{
|
|
1096
|
+
result = "result = [val[0], [], null, val[1]];"
|
|
1097
|
+
}
|
|
1098
|
+
| f_optarg ',' f_rest_arg opt_f_block_arg
|
|
1099
|
+
{
|
|
1100
|
+
result = "result = [[], val[0], val[2], val[3]];"
|
|
1101
|
+
}
|
|
1102
|
+
| f_optarg opt_f_block_arg
|
|
1103
|
+
{
|
|
1104
|
+
result = "result = [[], val[0], null, val[1]];"
|
|
1105
|
+
}
|
|
1106
|
+
| f_rest_arg opt_f_block_arg
|
|
1107
|
+
{
|
|
1108
|
+
result = "result = [[], [], val[0], val[1]];"
|
|
1109
|
+
}
|
|
1110
|
+
| f_block_arg
|
|
1111
|
+
{
|
|
1112
|
+
result = "result = [[], [], null, val[0]];"
|
|
1113
|
+
}
|
|
1114
|
+
|
|
|
1115
|
+
{
|
|
1116
|
+
result = "result = [[], [], null, null];"
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
f_norm_arg: CONSTANT
|
|
1120
|
+
{
|
|
1121
|
+
result = "this.yyerror(
|
|
1122
|
+
'formal argument cannot be a constant');"
|
|
1123
|
+
}
|
|
1124
|
+
| IVAR
|
|
1125
|
+
{
|
|
1126
|
+
result = "this.yyerror(
|
|
1127
|
+
'formal argument cannot be an instance variable');"
|
|
1128
|
+
}
|
|
1129
|
+
| CVAR
|
|
1130
|
+
{
|
|
1131
|
+
result = "this.yyerror(
|
|
1132
|
+
'formal argument cannot be a class variable');"
|
|
1133
|
+
}
|
|
1134
|
+
| GVAR
|
|
1135
|
+
{
|
|
1136
|
+
result = "this.yyerror(
|
|
1137
|
+
'formal argument cannot be a global variable');"
|
|
1138
|
+
}
|
|
1139
|
+
| IDENTIFIER
|
|
1140
|
+
|
|
1141
|
+
f_arg: f_norm_arg
|
|
1142
|
+
{
|
|
1143
|
+
result = "result = [val[0]];"
|
|
1144
|
+
}
|
|
1145
|
+
| f_arg ',' f_norm_arg
|
|
1146
|
+
{
|
|
1147
|
+
result = "result = val[0].concat([val[2]]);"
|
|
1148
|
+
}
|
|
1149
|
+
|
|
1150
|
+
f_opt: IDENTIFIER '=' arg_value
|
|
1151
|
+
{
|
|
1152
|
+
result = "result = [val[0], val[2]];"
|
|
1153
|
+
}
|
|
1154
|
+
|
|
1155
|
+
f_optarg: f_opt
|
|
1156
|
+
{
|
|
1157
|
+
result = "result = [val[0]];"
|
|
1158
|
+
}
|
|
1159
|
+
| f_optarg ',' f_opt
|
|
1160
|
+
{
|
|
1161
|
+
result = "result = val[0].concat([val[2]]);"
|
|
1162
|
+
}
|
|
1163
|
+
|
|
1164
|
+
restarg_mark: '*'
|
|
1165
|
+
| SPLAT
|
|
1166
|
+
|
|
1167
|
+
f_rest_arg: restarg_mark IDENTIFIER
|
|
1168
|
+
{
|
|
1169
|
+
result = "result = val[1];"
|
|
1170
|
+
}
|
|
1171
|
+
| restarg_mark
|
|
1172
|
+
{
|
|
1173
|
+
result = "result = '__unamed_splat__';"
|
|
1174
|
+
}
|
|
1175
|
+
|
|
1176
|
+
blkarg_mark: '&'
|
|
1177
|
+
| '&@'
|
|
1178
|
+
|
|
1179
|
+
f_block_arg: blkarg_mark IDENTIFIER
|
|
1180
|
+
{
|
|
1181
|
+
result = "result = val[1];"
|
|
1182
|
+
}
|
|
1183
|
+
|
|
1184
|
+
opt_f_block_arg: ',' f_block_arg
|
|
1185
|
+
{
|
|
1186
|
+
result = "result = val[1];"
|
|
1187
|
+
}
|
|
1188
|
+
|
|
|
1189
|
+
{
|
|
1190
|
+
result = "result = null;"
|
|
1191
|
+
}
|
|
1192
|
+
|
|
1193
|
+
singleton: var_ref
|
|
1194
|
+
{
|
|
1195
|
+
result = "result = val[0];"
|
|
1196
|
+
}
|
|
1197
|
+
| '(' expr opt_nl ')'
|
|
1198
|
+
{
|
|
1199
|
+
result = "result = val[1];"
|
|
1200
|
+
}
|
|
1201
|
+
|
|
1202
|
+
assoc_list: none
|
|
1203
|
+
{
|
|
1204
|
+
result = "result = [];"
|
|
1205
|
+
}
|
|
1206
|
+
| assocs trailer
|
|
1207
|
+
{
|
|
1208
|
+
result = "result = val[0];"
|
|
1209
|
+
}
|
|
1210
|
+
| args trailer
|
|
1211
|
+
{
|
|
1212
|
+
result = "this.yyerror('unsupported assoc list type');"
|
|
1213
|
+
}
|
|
1214
|
+
|
|
1215
|
+
assocs: assoc
|
|
1216
|
+
{
|
|
1217
|
+
result = "result = [val[0]];"
|
|
1218
|
+
}
|
|
1219
|
+
| assocs ',' assoc
|
|
1220
|
+
{
|
|
1221
|
+
result = "result = val[0].concat([val[2]]);"
|
|
1222
|
+
}
|
|
1223
|
+
|
|
1224
|
+
assoc: arg_value '=>' arg_value
|
|
1225
|
+
{
|
|
1226
|
+
result = "result = [val[0], val[2]];"
|
|
1227
|
+
}
|
|
1228
|
+
|
|
1229
|
+
operation: IDENTIFIER
|
|
1230
|
+
| CONSTANT
|
|
1231
|
+
| FID
|
|
1232
|
+
|
|
1233
|
+
operation2: IDENTIFIER
|
|
1234
|
+
| CONSTANT
|
|
1235
|
+
| FID
|
|
1236
|
+
| op
|
|
1237
|
+
|
|
1238
|
+
operation3: IDENTIFIER
|
|
1239
|
+
| FID
|
|
1240
|
+
| op
|
|
1241
|
+
|
|
1242
|
+
dot_or_colon: '.'
|
|
1243
|
+
| '::'
|
|
1244
|
+
|
|
1245
|
+
opt_terms:
|
|
1246
|
+
| terms
|
|
1247
|
+
|
|
1248
|
+
opt_nl:
|
|
1249
|
+
| '\\n'
|
|
1250
|
+
|
|
1251
|
+
trailer:
|
|
1252
|
+
| '\\n'
|
|
1253
|
+
| ','
|
|
1254
|
+
|
|
1255
|
+
term: ';'
|
|
1256
|
+
| '\\n'
|
|
1257
|
+
|
|
1258
|
+
terms: term
|
|
1259
|
+
| terms ';'
|
|
1260
|
+
|
|
1261
|
+
none:
|
|
1262
|
+
|
|
1263
|
+
none_block_pass:
|
|
1264
|
+
|
|
1265
|
+
end
|
|
1266
|
+
|
|
1267
|
+
---- inner
|