rsec 0.4.3 → 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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '0729a60e389265baab9ff529159db7a7027c4b0635640ecfb50cf83c2cc2a0db'
4
- data.tar.gz: d74e398d26955b73151494f55b3315e06f61483dbedd5136076bb90164e3f24d
3
+ metadata.gz: 8977b875ff6997eb73fd119f4227073e59cc8f03252b7393d730169177930373
4
+ data.tar.gz: 7493d1f6ae1f5e2a8d85d32d0fc1f5c98e1f3dbfed06453dad2c1bc5c02075d1
5
5
  SHA512:
6
- metadata.gz: e5c81b3f0727c69ff705dcbd0aa077eed43a1f99c7d760e60c49dd4a4a98fd3417c86987a65776f0c88279c1c636cb3812e0be3693d0d3d871653ccee2437251
7
- data.tar.gz: 468b07ca8e630158a0605315b381ab40df83c0a4a3bab56e92d60868ddcfcc5fec4e83cc944efdb63e7bd609240fd384f459b3e8204fc8e990363e133fe1fca3
6
+ metadata.gz: 1e3f20dca6a450a0ef36da2b619ea7bd5083ac99c900b82da08302a02b7ca05db3ea95861fd76f8e87e0518076fc0d8b17091f30dd859094a55a42b9d8fd48be
7
+ data.tar.gz: 332d704b8ba296f4dd09de79fed738ba23e2e95162ef8230f6da862d0eda05a7379a36ab79c876c1b0d525d9157453129253c294b8fbe5fcf4e73d1e0efcad7b
@@ -91,7 +91,7 @@ class CMinus
91
91
  # p expr.parse! "gcd (v ,u- u/v *v)"
92
92
  expr.map{|e| Expr[e] }
93
93
  end
94
-
94
+
95
95
  # statement parser builder, returns [stmt, block]
96
96
  def statement var_decl
97
97
  expr = expression()
@@ -114,9 +114,10 @@ class CMinus
114
114
  }
115
115
  stmt = block | if_stmt | while_stmt | return_stmt | expr_stmt
116
116
  # p if_stmt.parse! 'if(v == 0)return u;'
117
+ # p block.parse! '{ int x; }'
117
118
  [stmt, block]
118
119
  end
119
-
120
+
120
121
  def initialize
121
122
  type_id = seq_(TYPE, ID).cached
122
123
  # p type_id.parse! 'int a'
@@ -137,10 +138,10 @@ class CMinus
137
138
  [ty, id, *maybe_bra]
138
139
  }
139
140
  params = param.join(COMMA).even | 'void'.r{[]}
140
- brace = seq_('(', params, ')')[1]
141
- fun_decl = seq_(type_id, brace, block){
142
- |(type, id), params, block|
143
- Function[type, id, params, block]
141
+ paren_args = seq_('(', params, ')')[1]
142
+ fun_decl = seq_(type_id, paren_args, block){|results|
143
+ type_id_result, params_result, block_result = results
144
+ Function[*type_id_result, params_result, block_result]
144
145
  }
145
146
  # p fun_decl.parse! 'int gcd(int u, int v){return 2;}'
146
147
  @program = SPACE.join(fun_decl | var_decl | EOSTMT).odd.eof
@@ -65,7 +65,7 @@ class LittleMarkdown
65
65
  "<span id='#{id}'>#{text}</span>"
66
66
  }
67
67
  line = (img | link | strong | em | code | escape | id | text).star
68
- line.eof.map &:join
68
+ line.eof.map {|parts, _| parts.join }
69
69
  end
70
70
 
71
71
  # pseudo xml tag parser, except <br> and <hr> and <script>
@@ -42,7 +42,7 @@ module NASMManualParser
42
42
  tr_class = 'TR3/4/5/6/7'
43
43
  classes = (imm_class.r | memoffs_class | mem_class | reg_class | tr_class).fail 'operand class'
44
44
  reg = reg_parser.fail 'register'
45
- num = /\d/.r(&:to_i).fail 'num'
45
+ num = /\d/.r{|n, _| n.to_i }.fail 'num'
46
46
  # memoffs should be left of mem
47
47
  operand = classes | reg | num
48
48
  operands = operand.join('/').even.join(',').even
@@ -107,7 +107,7 @@ module NASMManualParser
107
107
  parsed = ''
108
108
  parser = instruction_parser.eof
109
109
  src = File.read filename
110
- src.lines.with_index do |raw_line, idx|
110
+ src.lines.to_a.each_with_index do |raw_line, idx|
111
111
  line = raw_line.strip
112
112
  # this shapy shows the line is something defining an nemonic
113
113
  if line =~ /^\w+\s+[^;\[]+;\ [^;\[]+\[.+\]$/
@@ -40,7 +40,7 @@ class SlowJSON
40
40
  end
41
41
 
42
42
  def generate_parser
43
- string = '"'.r >> chars_parser.star.map(&:join) << '"'
43
+ string = '"'.r >> chars_parser.star.map{|cs, _| cs.join } << '"'
44
44
  # -? int frac? exp?
45
45
  number = prim(:double, allowed_sign: '-')
46
46
  @value = string | number | lazy{@object} | lazy{@array} |
@@ -11,7 +11,7 @@ module Rsec
11
11
  TO_PARSER_METHOD = :r
12
12
  end
13
13
 
14
- VERSION = '0.4.3'
14
+ VERSION = '1.0.0'
15
15
  end
16
16
 
17
17
  require "strscan"
@@ -5,7 +5,7 @@ module Rsec #:nodoc
5
5
  def _parse ctx
6
6
  res = left()._parse ctx
7
7
  return INVALID if INVALID[res]
8
- right()[res]
8
+ right()[res, ctx]
9
9
  end
10
10
  end
11
11
 
@@ -41,6 +41,18 @@ class TestMisc < TC
41
41
  ase 'bb', p.parse('b')
42
42
  ase INVALID, p.parse('.')
43
43
  end
44
+
45
+ def test_seq_map
46
+ p = seq('"'.r, /\w/.r, '"'.r).map{|(_, n, _)| n*2}
47
+ ase 'bb', p.parse('"b"')
48
+ ase INVALID, p.parse('.')
49
+ end
50
+
51
+ def test_seq_map_with_context
52
+ p = seq('"'.r, /\w/.r, '"'.r).map{|(_, n, _), ctx| n*ctx.pos}
53
+ ase 'bbb', p.parse('"b"')
54
+ ase INVALID, p.parse('.')
55
+ end
44
56
 
45
57
  def test_fail
46
58
  p = 'v'.r.fail 'omg!'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - NS
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-03-13 00:00:00.000000000 Z
11
+ date: 2019-12-10 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Easy and extreme fast dynamic PEG parser combinator.
14
14
  email: