Как мне сопоставить слово с OMetaJS? - PullRequest
4 голосов
/ 16 августа 2010

Я пытался изучить OMeta, используя OMeta / JS , и мне кажется, что я застрял на чем-то, что должно быть действительно простым. Если у меня есть грамматика

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'?

1 Ответ

4 голосов
/ 16 августа 2010

Ну, я понял, как получить желаемый результат.Ответ здесь, хотя я все еще не понимаю, почему 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')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...