0

解析エラーをスローする代わりに、PEG.js がデフォルト値を返すようにすることはできますか?

基本的に私は持っていたい

/ anything:.* {return anything} 

私の文法では、ルールが部分的に一致する場合でも、解析エラーがスローされます。

そう

start 
  = digits:[0-9]+ 
  / anything:.* {return "hello world"+anything}

「546aueu」で解析エラーがスローされます。http://pegjs.org/onlineでお試しください

エラーをスローする代わりに、パーサーに何かを返すように指示するにはどうすればよいでしょうか。

私の知る限り、最初のルールと一致するように試み、失敗した場合は 2 番目のルールと一致する必要があります。

助けと提案をありがとう。

4

2 に答える 2

1

演算子を使用してみることができます!

start 
  = digits:[0-9]+ ![^0-9] { return {type: 'digits', number: digits.join('')}; }
  / anything:.* { return { type: 'anything', anything: anything.join('') }; }


parser.parse('123456')

{
   "type": "digits",
   "number": "123456"
}

parser.parse('123abc456')

{
   "type": "anything",
   "anything": "123abc456"
}
于 2015-03-12T12:08:19.567 に答える
0

これを行うには、失敗する可能性のあるすべてのルールの最後の項目としてフォールバックを配置する必要があります。これは、pegjs がバックトラッキングを行わないためです。そのため、ルールが一致すると、成功するか、解析エラーでプロセス全体が終了します。

于 2016-06-06T14:29:30.363 に答える