簡體   English   中英

對雲雀語法中標記優先級的混淆

[英]Confusion around priority of tokens in lark grammar

較早的問題之后,我對/.+/正則表達式行的優先級感到有些困惑; 我希望下面的測試能夠產生

  line
  line  x
  chunk abc

相反,我得到:

  line
  line  x
  line  abc
    def test_tokenizing(self):
        p = Lark(r"""

        _NL: /\n/
        line.-1: /.+/? _NL
        chunk: /abc/ _NL
        start: (line|chunk)+

        """, parser='lalr')

        text = '\nx\nabc\n'
        print(p.parse(text).pretty())

在 Lark 中,優先級對於規則和終端來說意味着不同的東西。

快速提醒一下,規則的名稱是小寫的,而終端的名稱是大寫的。

在 LALR 模式下,規則的優先級僅影響在減少/減少沖突的情況下選擇哪一個。 它對里面的端子沒有影響。

您想要的是更改終端本身的優先級:

def test_tokenizing():
    p = Lark(r"""

    _NL: /\n/
    line: EVERYTHING? _NL
    EVERYTHING.-1: /.+/
    chunk: /abc/ _NL
    start: (line|chunk)+

    """, parser='lalr')

    text = '\nx\nabc\n'
    print(p.parse(text).pretty())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM