lrama 0.3.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ccec35a8c70236b675ecd03905a2ca5bed3fa7bf0ca37ec89658b99211572df2
4
- data.tar.gz: 337dbb0772531a9325e381387a8867635ad9a3191677e064d1654726cf3ab954
3
+ metadata.gz: 0a8a1b04a3e761af04029af3e3b74aaaf4fe9a9e2741205f430264ee3399f66c
4
+ data.tar.gz: a97ec2c2b2007f3bad6cbe5d1b37baa87d520cc3025e82403a9d8a70cddccc8a
5
5
  SHA512:
6
- metadata.gz: 6f6588f355970ad490cd93184556d2fa3f39a1df1ce354ead1200dd93736e247a2f3e82e9a43b96430b0459456777ea07dcf141d59bb56bac4a52e5f210ed2a9
7
- data.tar.gz: 26ed741e7cfc5f827cb12241329529f915026b50ff34d7f38e79ad3926e88ec4cd5afb4956cc6e8e76cf610739bc4bbaace14b4d1e61b8dbaba377d0ca9f1758
6
+ metadata.gz: 820bce06aefc235c02995cc957f9e0d9b2e8d588ce7748225896f0d63c319135068da39977be860815276c360a66e3dd6c2132802aa30e3292d706bc6ae7ef9d
7
+ data.tar.gz: d5c4ec405196bca888c78bf8a16cc9aef47da0f9943d7eee2bf9033c104f9a07fcb07c4cb6aabb3bb49f0e3665bf37932e2206cd9acad925702c30c7124210fb
@@ -13,7 +13,7 @@ jobs:
13
13
  strategy:
14
14
  fail-fast: false
15
15
  matrix:
16
- ruby: ['head', '3.2', '3.1', '3.0', '2.7']
16
+ ruby: ['head', '3.2', '3.1', '3.0', '2.7', '2.6', '2.5']
17
17
  steps:
18
18
  - uses: actions/checkout@v3
19
19
  - uses: ruby/setup-ruby@v1
@@ -40,10 +40,12 @@ jobs:
40
40
  bundler-cache: true
41
41
  - run: git clone --depth=1 https://github.com/ruby/ruby.git -b ${{ matrix.ruby_branch }} ../ruby
42
42
  working-directory:
43
- - run: mkdir tool/lrama
43
+ - run: mkdir -p tool/lrama
44
44
  working-directory: ../ruby
45
45
  - name: Copy Lrama to ruby/tool
46
- run: cp -r exe lib template ../ruby/tool/lrama
46
+ run: cp -r exe lib ../ruby/tool/lrama
47
+ # TODO: Consider how to manage changes on ruby/ruby master and ruby/lrama
48
+ # run: cp -r exe lib template ../ruby/tool/lrama
47
49
  working-directory:
48
50
  - run: tree tool/lrama
49
51
  working-directory: ../ruby
data/lib/lrama/command.rb CHANGED
@@ -57,14 +57,18 @@ module Lrama
57
57
  end
58
58
 
59
59
  if !grammar_file
60
- puts "File should be specified\n"
61
- exit 1
60
+ abort "File should be specified\n"
62
61
  end
63
62
 
64
63
  Report::Duration.enable if trace_opts[:time]
65
64
 
66
65
  warning = Lrama::Warning.new
67
- y = File.read(grammar_file)
66
+ if grammar_file == '-'
67
+ grammar_file = argv.shift or abort "File name for STDIN should be specified\n"
68
+ y = STDIN.read
69
+ else
70
+ y = File.read(grammar_file)
71
+ end
68
72
  grammar = Lrama::Parser.new(y).parse
69
73
  states = Lrama::States.new(grammar, warning, trace_state: (trace_opts[:automaton] || trace_opts[:closure]))
70
74
  states.compute
data/lib/lrama/output.rb CHANGED
@@ -25,26 +25,35 @@ module Lrama
25
25
  @grammar = grammar
26
26
  end
27
27
 
28
+ if ERB.instance_method(:initialize).parameters.last.first == :key
29
+ def self.erb(input)
30
+ ERB.new(input, trim_mode: '-')
31
+ end
32
+ else
33
+ def self.erb(input)
34
+ ERB.new(input, nil, '-')
35
+ end
36
+ end
37
+
38
+ def eval_template(file, path)
39
+ erb = self.class.erb(File.read(file))
40
+ erb.filename = file
41
+ tmp = erb.result_with_hash(context: @context, output: self)
42
+ replace_special_variables(tmp, path)
43
+ end
44
+
28
45
  def render
29
46
  report_duration(:render) do
30
- erb = ERB.new(File.read(template_file), trim_mode: '-')
31
- erb.filename = template_file
32
- tmp = erb.result_with_hash(context: @context, output: self)
33
- tmp = replace_special_variables(tmp, @output_file_path)
47
+ tmp = eval_template(template_file, @output_file_path)
34
48
  @out << tmp
35
49
 
36
50
  if @header_file_path
37
- erb = ERB.new(File.read(header_template_file), trim_mode: '-')
38
- erb.filename = header_template_file
39
- tmp = erb.result_with_hash(context: @context, output: self)
40
- tmp = replace_special_variables(tmp, @header_file_path)
51
+ tmp = eval_template(header_template_file, @header_file_path)
41
52
 
42
53
  if @header_out
43
54
  @header_out << tmp
44
55
  else
45
- File.open(@header_file_path, "w+") do |f|
46
- f << tmp
47
- end
56
+ File.write(@header_file_path, tmp)
48
57
  end
49
58
  end
50
59
  end
@@ -141,7 +150,7 @@ module Lrama
141
150
 
142
151
  <<-STR
143
152
  #{comment}
144
- #line #{@grammar.initial_action.line} "#{@grammar_file_path}"
153
+ #line #{@grammar.initial_action.line} "#{@grammar_file_path}"
145
154
  #{@grammar.initial_action.translated_code}
146
155
  STR
147
156
  end
data/lib/lrama/states.rb CHANGED
@@ -776,7 +776,7 @@ module Lrama
776
776
  state.reduces.each do |reduce|
777
777
  next if reduce.look_ahead.nil?
778
778
 
779
- intersection = a.intersection(reduce.look_ahead)
779
+ intersection = a & reduce.look_ahead
780
780
  a += reduce.look_ahead
781
781
 
782
782
  if !intersection.empty?
data/lib/lrama/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lrama
2
- VERSION = "0.3.0".freeze
2
+ VERSION = "0.5.0".freeze
3
3
  end
data/lrama.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.homepage = "https://github.com/yui-knk/lrama"
12
12
  # See LEGAL.md file for detail
13
13
  spec.license = "GNU GPLv3"
14
- spec.required_ruby_version = Gem::Requirement.new(">= 2.7.0")
14
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
15
15
 
16
16
  spec.files = Dir.chdir(File.expand_path(__dir__)) do
17
17
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
@@ -1,5 +1,5 @@
1
1
  <%# b4_generated_by -%>
2
- /* A Bison parser, made by GNU Bison 3.8.2. */
2
+ /* A Bison parser, made by Lrama <%= Lrama::VERSION %>. */
3
3
 
4
4
  <%# b4_copyright -%>
5
5
  /* Bison implementation for Yacc-like parsers in C
@@ -1,5 +1,5 @@
1
1
  <%# b4_generated_by -%>
2
- /* A Bison parser, made by GNU Bison 3.8.2. */
2
+ /* A Bison parser, made by Lrama <%= Lrama::VERSION %>. */
3
3
 
4
4
  <%# b4_copyright -%>
5
5
  /* Bison interface for Yacc-like parsers in C
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lrama
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Yuichiro Kaneko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-05-11 00:00:00.000000000 Z
11
+ date: 2023-05-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: LALR (1) parser generator written by Ruby
14
14
  email:
@@ -58,7 +58,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - ">="
60
60
  - !ruby/object:Gem::Version
61
- version: 2.7.0
61
+ version: 2.5.0
62
62
  required_rubygems_version: !ruby/object:Gem::Requirement
63
63
  requirements:
64
64
  - - ">="