我目前正在学习编译器设计中的词法分析。为了了解词法分析器的工作原理,我试图自己构建一个。我打算用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)的前缀。
我希望上述方法可以用于构建词法分析器。如果可以在词法分析器的范围内进行,那么如何将页码添加到目录中呢?
答案 0 :(得分:2)
你真的可以按照你想要的方式添加它们。我建议将.tex文件的内容存储在您自己的树状或类似地图的结构中,然后读入您的页码文件,并适当地应用它们。
更古老的选择是编写第二个解析器来解析第一个解析器的输出和行号文件并适当地附加它们。
这真的取决于你。由于这是一个学习练习,尝试建立好像其他人使用它。它的用户友好性如何?制作只有你可以使用的东西仍然有利于概念学习,但如果你在现实世界中使用它,可能会导致混乱的做法!
答案 1 :(得分:0)
你所描述的实际上是词法分析器和解析器。这里词法分析器的工作是返回令牌并忽略空格。这里的标记是'\'引入的各种关键字,'{','}'中的字符串文字和其他地方的任意文本。您描述的其他所有内容都是解析和树木构建。