3

私はOMeta/JSを使用して OMeta を学習しようとしてきましたが、本当に単純であるべき何かに行き詰まっているようです。文法があれば

ometa L <: Parser {
  l letter:l -> l
}
L.match('h', 'l')

期待される出力を生成します

h

私も使える

ometa W1 <: Parser {
  ls letter*:ls -> ls
}
W1.matchAll('hi', 'ls')

生産する

[h, i]

しかし、使用して単語全体を解析しようとすると

ometa W2 <: Parser {
  word letter:l word:w -> (l + w)
     | letter:l -> l
}
W2.match('hi', 'word')
//Also tried W2.matchAll('hi', 'word')

エラーが発生する

match failed { errorPos=61 }

私は何を誤解していますか? また、W2 グラマーが「hi」を出力するように修正するにはどうすればよいですか?

4

1 に答える 1

3

さて、私は自分が望む結果を得る方法を見つけました。答えはここにありますが、W2 が機能しない理由はまだわかりません。当分の間、これを開いたままにしておきます。誰かがそれに答えてくれることを願っています。

ometa W3 <: Parser {
  word letter*:w -> w.join('')
}
W3.matchAll('hi', 'word')

繰り返しますが、短縮形を使用して等号を省略したことがエラーの原因だったようです。それを追加すると、正しい答えが得られます。

ometa W2 <: Parser {
  word = letter:l word:w -> (l + w)
       | letter:l -> l
}
W2.matchAll('hi', 'word')
于 2010-08-16T18:27:03.883 に答える