代码之家  ›  专栏  ›  技术社区  ›  bmavity

如何将单词与OMetaJS匹配?

  •  4
  • bmavity  · 技术社区  · 16 年前

    我一直在试着用 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语法输出'嗨'?

    1 回复  |  直到 16 年前
        1
  •  3
  •   bmavity    16 年前

    好吧,我想办法得到我想要的结果。答案就在这里,尽管我仍然不明白为什么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')
    
    推荐文章