1

引用符とエスケープを解析するとき (cf.空の文字列リテラルを解析するときに、 Parslet (in Ruby) が空の配列を返すのはなぜですか? )(escape_char.absent? >> str('"')).absent? >> any そこにいる。

require 'parslet'
require 'rspec'
require 'parslet/rig/rspec'
require 'parslet/convenience'

class Parser < Parslet::Parser
  root(:quote)

  rule :quote do
    quote >> text >> quote
  end

  rule :text do
    (quote.absent? >> any).repeat
  end

  rule :quote do
    escape_char.absent? >> str('"')
  end

  rule :escape_char do
    str('\\')
  end
end

describe Parser do
  it 'should parse text in quotes' do
    is_expected.to parse('"hello"')
  end

  it 'should parse text in quotes with escaped quote' do
    is_expected.to parse('"foo\"bar"')
  end

  it 'should parse text in quotes with trailing escaped quote' do
    is_expected.to parse('"text\""')
  end
end

上記のリンク先の投稿で既に説明されているように、これを解決する方法にはあまり興味がありませんが、この動作を理解したいだけです。最初は直感に反するように思えますが、これには十分な理由があると確信しています。

4

1 に答える 1