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.2.1)被读取和写入。

我希望上述方法适用于构建词法分析器。如果在词法分析器的范围内可能的话,我该如何在目录中添加页码?

4

2 回答 2

2

你真的可以以任何你想要的方式添加它们。我建议将 .tex 文件的内容存储在您自己的树状或地图状结构中,然后读入您的页码文件,并适当地应用它们。

一个更古老的选择是编写第二个解析器,它解析第一个解析器的输出和行号文件并适当地附加它们。

这真的取决于你。由于这是一项学习练习,因此请尝试像其他人一样使用它来构建。它的用户友好性如何?制作只有您可以使用的东西仍然有利于概念学习,但如果您在现实世界中使用它,可能会导致混乱的实践!

于 2010-06-23T14:46:56.780 回答
0

你所描述的实际上是一个词法分析器加解析器。这里词法分析器的工作是返回标记并忽略空格。这里的记号是由 '\' 引入的各种关键字、'{'、'}' 中的字符串文字和其他地方的任意文本。您描述的所有其他内容都是解析和树构建。

于 2010-06-24T03:43:02.307 回答