0

終了タグの行番号を見つけるために、親切なお願いが必要です。例えば:

<tr>
  <td>...</td>
  <td>...</td>
</tr>

<tr>
  <td>...</td>
  <td>...</td>

<tr>
  <td>...</td>
  <td>...</td>
</tr>

上記の行では、最初の<tr>タグがそれに応じて開閉されます。2番目<tr>は開いていますが閉じていません。それを閉じず<tr>に3番目に開き<tr>ます。この状況では、行番号をエラーとして表示する必要があります。行番号の開始タグを見つけることができます。終了タグの行番号を見つける必要があります。私はWPF C#で作業しています。

4

1 に答える 1

2

解析中にそれらを「スタック」に置く必要があります。開始タグがある場合はスタックにプッシュし、終了タグが発​​生した場合は逆の順序で削除します。close-tag <> open タグ タイプの場合はエラーです。

解析中に行を数え、不一致が発生した場合は、現在の行番号を出力します。改行をカウントして行番号をカウントします (Windows/Linux では 10 文字、Mac では 13 文字を使用)。

終了タグを比較する"/" + opening-tag

スタック (「力学」を示すための疑似表現):

Parser res   Current stack
----------   -------------
Found TR  -> TR
Found TD  -> TR-TD
Found /TD -> TR (it matched last tag on stack) 
Found TD  -> TR-TD
Found /TD -> TR (it matched last tag on stack) 
Found /TR ->  (it matched last tag on stack - stack is empty, all ok) 

Found TR  -> TR
Found TD  -> TR-TD
Found /TD -> TR (it matched last tag on stack) 
Found TD  -> TR-TD
Found /TD -> TR (it matched last tag on stack) 
Found TR  -> TR (mismatch! /+TR <> TR as expected), print error + line number
于 2012-12-20T05:05:01.210 に答える