rsec 0.4.3 → 1.0.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: '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: