7

解析したい

'This,is,an,example,text'

findTokens のように

'This,is,an,example,text' findTokens: $, 
an OrderedCollection('This' 'is' 'an' 'example' 'text')

しかし、PetitParser、delimitedBy:、separatedBy: でそれを行う方法がわかりません。

( #any asParser delimitedBy: $, asParser ) plus flatten parse:  'This,is,an,example,text'

しかし、明らかに機能していません

4

4 に答える 4

3

delimitedBy:次のものと組み合わせて使用​​できますwithoutSeparators

|text parser|

text := 'This,is,an,example,text'.
parser := (#word asParser plus flatten delimitedBy: ($, asParser)) withoutSeparators.

parser parse: text

PetitParser に対する最近の改善のようです。

于 2012-09-04T09:24:13.187 に答える
2

a #delimitedBy: bに展開されるa , (b , a) starので、パーサーはそのまま「コンマで区切られた1文字を教えてください」と言っています。

あまり読みにくいですが、これはあなたが望むことをします:

((($, asParser not , #any asParser) ==> [:nodes | nodes second])
  plus flatten delimitedBy: $, asParser

最初の句は、「コンマ以外のものはすべて解析する」と述べています。だから'12,24'あなたが得るとすれば#('12' $, '24')

于 2011-10-18T09:03:20.313 に答える
1

試す

(#word asParser plus flatten separatedBy: $, asParser) 
     ==> [:nodes| nodes copyWithout: $, ]

私はあなたが望んでいたことを理解したと思います

于 2011-10-18T10:11:28.977 に答える
1

何かを除外したい場合、PetitParser で常にこのパターンを使用します。「探しているもの」または「除外したいもの」のいずれか (記述しやすい方) をパーサーとして定義し、それを否定して、必要に応じて処理します。

s := 'This,is,an,example,text'.
separator := $, asParser ==> [ :n | nil ].
token := separator negate plus flatten.
p := (token separatedBy: separator) ==> [ :nodes |
    nodes copyWithout: nil ].
p parse: s.
于 2011-10-18T14:42:51.207 に答える