私は単純なパーサーを構築していますが、一般的な設計について理解するのに苦労しています。ベストプラクティスは何ですか?
パーサーは単純なテキスト ファイルを受け取り、それを HTML ファイルに構造化します。これにより、ネストされたリストが多用され、リスト アイテムごとにインデックスと ID が追加されます。
入力 (わかりやすくするためにインデントを追加)。
A. ランダムな名前の最初のセクション 第1条 スパムと卵など 第2条 1. 最初のメンバー 2. 2人目のメンバー 3. 最終メンバー B. 2 番目のセクションの名前は何でも 第3条 これにはメンバーがいませんが、サブが含まれています を。項目 1 b. 項目 2 第4条 1.会員 2.サブを持つメンバー を。サブ1はこちら b. サブ2はこちら c. 最終サブ C. 別のセクション 等
行番号付きのさまざまなリスト項目を見つけるための正規表現があります(現在、レクサーを使用していますが、それはやり過ぎかもしれませんよね?)
前述したように、リスト アイテムごとに ID を使用して、ネストされた HTML リストを作成する必要があります。あなたの経験では、ドキュメントの構造をどのように表現しますか?
一連のタプルまたは辞書として、アイテムごとに ( id , line-number ):
list_section = ( ('A',1), ('B',8), ('C',18), ... )
list_article = ( ('1',2), ('2',4), ('3',9), ('4',13), ... )
list_member = ( ('2-1',5), ('2-2',6), ('2-3',7), ('4-1',14), ...)
etc
または、すべてのトークンが ( TYPE 、 id 、 line-number ) を持つネストされたタプルとして:
(('SECTION','A',1 ,
('ARTICLE','1',2),
('ARTICLE','2',4 ,
('MEMBER','2-1',5),
('MEMBER','2-2',6),
('MEMBER','2-3',7)
)
)
現在、私は2番目のオプションに傾いています。最初のものは構築と反復が簡単ですが、階層は周囲の行番号を見て推測することしかできません。
このようにしますか、それともまったく別の方法で行いますか? パーサーや正規表現を書くように頼んでいるわけではありません。ベスト プラクティスについて適切なアドバイスを求めているだけです。
必要な出力を HTML に追加しました。インデックス:
<div id="index">
<ol class="indexlist sections">
<li><a href="#listref_A">First section with random name</a><br>
Article 1 - 2</li>
<li><a href="#listref_B">Second section called whatever</a><br>
Artikel 3 - 4</li>
<li><a href="#listref_C">Another section</a><br>
Article 5</li>
</ol>
そして内容:
<div id="content">
<ol class="sections">
<li id="listref_D"><h2></h2>
<ol class="articles">
<li id="listref_8">Article 8
<ol class="members">
<li id="listref_8-1">Member 1.</li>
<li id="listref_8-2">Member 2</li>
<li id="listref_8-3">Member 3</li>
<li id="listref_8-4">Member 4.</li>
</ol>
</li>
</ol>
</li>
<li id="listref_E">Section E
<ol class="articles">
<li id="listref_9">Article 9
<ol class="members">
<li id="listref_9-1">Member 1 has subs:
<ol class="subs">
<li id="listref_9-1-a">sub a;</li>
<li id="listref_9-1-b">sub b;</li>
<li id="listref_9-1-c">sub c.</li>
</ol>
</li>
<li id="lijstref_9-2">Member 2, refers to <a href="#listref_8-2">article 8 sub 2</a>.</li>
</ol>