0

私は現在、コンパイラー設計で字句解析を学んでいます。字句解析器が実際にどのように機能するかを学ぶために、私は自分で字句解析器を構築しようとしています。Javaでビルドする予定です。

字句解析プログラムへの入力は、次の形式の.texファイルです。

\begin{document}

    \chapter{Introduction}

    \section{Scope}

    Arbitrary text.

    \section{Relevance}

    Arbitrary text.

    \subsection{Advantages}

    Arbitrary text.

    \subsubsection{In Real life}

    \subsection{Disadvantages}

    \end{document}

レクサーの出力は、おそらく別のファイルのページ番号を含む目次である必要があります。

1. Introduction   1
  1.1 Scope         1 
  1.2 Relevance     2  
    1.2.1 Advantages  2
       1.2.1.1 In Real Life  2
     1.2.2 Disadvantages   3 

この問題が字句解析の範囲内にあることを願っています。

私のレクサーは.texファイルを読み取り、「\」をチェックし、検索を続行すると、それが実際にセクショニングコマンドの1つであるかどうかをチェックします。セクショニングのタイプを示すためにフラグ変数が設定されます。セクショニングコマンドに続く中括弧内の単語は、タイプと深さに応じて、接頭辞付きの数字(1.2.1など)に沿って読み書きされます。

上記のアプローチがレクサーの構築に役立つことを願っています。レクサーの範囲内で可能であれば、目次にページ番号を追加するにはどうすればよいですか?

4

2 に答える 2

2

あなたは本当にあなたが望む方法でそれらを追加することができます。.texファイルの内容を独自のツリーまたはマップのような構造で保存してから、ページ番号ファイルを読み込んで適切に適用することをお勧めします。

より古風なオプションは、最初のパーサーの出力と行番号ファイルを解析し、それらを適切に追加する2番目のパーサーを作成することです。

それは本当にあなた次第です。これは学習演習なので、他の誰かがそれを使用するかのように構築してみてください。それはどれくらいユーザーフレンドリーですか?自分だけが使えるものを作ることは、概念学習にはまだ良いのですが、現実の世界でそれを使うと、厄介な練習につながる可能性があります。

于 2010-06-23T14:46:56.780 に答える
0

あなたが説明するのは、実際にはレクサーとパーサーです。ここでの字句解析プログラムの役割は、トークンを返し、空白を無視することです。ここでのトークンは、「\」によって導入されたさまざまなキーワード、「{」、「}」内の文字列リテラル、および他の場所の任意のテキストです。あなたが書いた他のすべては、構文解析とツリー構築です。

于 2010-06-24T03:43:02.307 に答える