Saya memiliki bahasa di mana ada contoh berulang dari pola yang sama di mana saya hanya peduli dengan simbol pertama. Sebagai contoh:
system OBJECT IDENTIFIER ::= { mib-2 1 }
interfaces OBJECT IDENTIFIER ::= { mib-2 2 }
at OBJECT IDENTIFIER ::= { mib-2 3 }
ip OBJECT IDENTIFIER ::= { mib-2 4 }
icmp OBJECT IDENTIFIER ::= { mib-2 5 }
tcp OBJECT IDENTIFIER ::= { mib-2 6 }
udp OBJECT IDENTIFIER ::= { mib-2 7 }
egp OBJECT IDENTIFIER ::= { mib-2 8 }
Contoh sederhana ini dapat dicocokkan dengan pola ini (di mana _ adalah spasi putih):
identifier _ "OBJECT IDENTIFIER" _ "::=" _ "{" _ identifier _ number _ "}"
Ini bukan masalah besar dalam kasus ini (saya sudah mengetik polanya :-) Tetapi bahasa tersebut memiliki satu set konstruksi berbulu besar lainnya yang tidak menjamin penguraian penuh (saya hanya ingin pengenal awal pada setiap baris untuk melakukan pekerjaan yang saya pikirkan).
Saya ingin mengetik sesuatu seperti pola ini:
identifier _ "OBJECT IDENTIFIER" .*? "}"
Dimana ".*?" tidak serakah - hanya mengkonsumsi terminal kemunculan pertama. Mungkinkah ini ada dalam daftar untuk PEG.js? Terimakasih banyak.
Pembaruan: Ini dapat dipenuhi dengan jumlah pengulangan (yang merupakan generalisasi dari pemikiran awal saya) seperti yang disarankan di Grup Google di: http://groups.google.com/group/pegjs/browse_thread/thread/2bea15581be45187
Dalam formalisme PEG , Anda dapat dengan mudah mencocokkan hingga terminator dengan menggunakan predikat bersama dengan metakarakter .
. Sesuatu seperti:
"OBJECT IDENTIFIER" (!"}" .)* "}"
Apakah itu cukup bagi Anda?
Ya, itu bekerja dengan sempurna. Terima kasih!
@dmajda Apa praktik yang disarankan untuk !"}"
?
Sebagai contoh:
= chars:(!"-suffix" .)+ "-suffix"
"foo-suffix" => [[ '', 'f' ], ['', 'o' ], ['', 'o' ]] // result
"foo-suffix" => ['f', 'o', 'o' ] // desired result
Saya dapat mencapai ini dengan memecah !"-suffix" .
menjadi aturannya sendiri yang hanya mengembalikan hasil .
, tetapi saya ingin tahu apakah ada cara yang lebih baik.
Saya pikir sementara Anda dapat menggunakan:
= chars:(!"-suffix" c:. {return c})+ "-suffix"
@islandr Tolong jangan gunakan isu sebagai tempat untuk bertanya tentang penggunaan PEG.js. Terutama ketika mereka tutup dan terutama ketika Anda menanyakan sesuatu yang orang lain di samping saya dapat membantu Anda. Saluran yang tepat adalah Grup Google .
maaf david. Kupikir ini akan menjadi tempat yang bagus sejak itu
berhubungan langsung dengan contoh yang Anda berikan.
Pada Wed, Jan 9, 2013 at 21:51, David Majda [email protected] :
@islandr https://github.com/islandr Tolong jangan gunakan masalah sebagai tempat
untuk bertanya tentang penggunaan PEG.js. Apalagi saat mereka tutup dan
terutama ketika Anda menanyakan sesuatu yang orang lain di samping saya bisa
membantu Anda. Saluran yang tepat adalah Grup Googlehttp://groups.google.com/group/pegjs
.—
Balas email ini secara langsung atau lihat di Gi tHubhttps://github.com/dmajda/pegjs/issues/57#issuecomment -12083927.
Komentar yang paling membantu
Dalam formalisme PEG , Anda dapat dengan mudah mencocokkan hingga terminator dengan menggunakan predikat bersama dengan metakarakter
.
. Sesuatu seperti:Apakah itu cukup bagi Anda?