簡體   English   中英

用 Lark 語法識別多行部分

[英]recognizing multi-line sections with lark grammar

我正在嘗試編寫一個簡單的語法來解析具有多行部分的文本。我無法理解如何去做。 這是我到目前為止寫的語法 - 在這里將不勝感激。

ps:我意識到雲雀對於這個問題來說太過分了,但這只是我試圖解析的一個非常簡化的版本。

from unittest import TestCase
from lark import Lark

text = '''
[section 1]
line 1.1
line 1.2

[section 2]
line 2.1
'''

class TestLexer(TestCase):

    def test_basic(self):
        p = Lark(r"""

            _LB: "["
            _RB: "]"
            _NL: /\n/+
            name: /[^]]+/
            content: /.+/s

            section: _NL* _LB name _RB _NL* content
            doc: section*

        """, parser='lalr', start='doc')


        parsed = p.parse(text)

問題是您的content正則表達式可以匹配任何長度的任何位置,這意味着語法的 rest 無法正常工作。 取而代之的是,您將終端重新划分為單行,並賦予其低於 rest 的優先級。

p = Lark(r"""

    _NL: /\n/+
    name: /[^]]+/
    content: (ANY_LINE _NL)+
    ANY_LINE.-1: /.+/

    section: _NL* "[" name "]" _NL* content
    doc: section*

""", parser='lalr', start='doc')

您現在可能需要一些額外的工作來將content規則轉換為您想要的內容,但是由於您聲稱這實際上不是您的確切問題,所以我不會在這里打擾。

暫無
暫無

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

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