Browse Source

* some stuff to the overview added

florian 27 years ago
parent
commit
a1cdc96c84
1 changed files with 44 additions and 8 deletions
  1. 44 8
      docs/internal.tex

+ 44 - 8
docs/internal.tex

@@ -56,7 +56,7 @@ writing. Since the compiler is under continuous development, some of the
 things described here may be outdated. In case of doubt, consult the
 \file{README} files distributed with the compiler.
 The \file{README} files are, in case of conflict with this manual,
- authoritative.
+authoritative.
 
 I hope, my poor english is quite understandable. Feel free to correct
 spelling mistakes.
@@ -71,7 +71,7 @@ spelling mistakes.
 
 The ultimate source for information about compiler internals is
 the compiler source, though it isn't very well documented. If you
-need more infomration you should join the developers mailing
+need more information you should join the developers mailing
 list or you can contact the developers.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -79,15 +79,46 @@ list or you can contact the developers.
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{Overview}
 
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% History
+\section{History}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% The compiler passes
+\section{The compiler passes}
+
+It isn't easy to divide the compilation process of \fpc into passes
+how it is described by many thesis about compiler building,
+but I would say \fpc does the compilation in five passes:
+
+\begin{enumerate}
+\item Scanning and Parsing. The compiler reads the input file,
+does preprocessing (i. e.
+reading include files, expanding macros ...) (\ref{ch:scanner})
+and the parser (\ref{ch:parser}) creates a parse tree (\ref{ch:parse_tree}).
+While this pass the compiler builds also the symbol tables
+(\ref{ch:symbol_tables}).
+\item Semantic analysis. This pass checks if semantic of
+the code is correct, i.e. if the types of expressions matches
+to the operators (\ref{ch:semantical_analysis}). This pass determines
+also how many registers are needed to evalute an expression, this
+information is used by the code generator later.
+\item Code generation
+\item Optimizing of the assembler
+\item Assembler writing
+\end{enumerate}
+
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The scanner
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The scanner}
+\label{ch:scanner}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The symbol tables
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{The symbol tables}
+\label{ch:symbol_tables}
 
 The symbol table is used to store information about all
 symbols, declarations and definitions in a program.
@@ -130,37 +161,42 @@ To make it more clear let's have a look at the fields of tdef:
 % The parse tree
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The parse tree}
+\label{ch:parse_tree}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The parser
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The parser}
+\label{ch:parser}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The semantical analysis
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The semantical analysis}
+\label{ch:semantical_analysis}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The code generation
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %% \chapter{The code generation}
+\label{ch:code_generation}
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % The assembler writers
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 \chapter{The assembler writers}
+\label{ch:assembler_writers}
 
 \fpc doesn't generate machine language, it generates
 assembler which must be assembled and linked.
 
 The assembler output is configurable, \fpc can create
-assembler for the GNU AS, the NASM (Netwide assembler) and
+assembler for the \file{GNU AS}, the \file{NASM} (Netwide assembler) and
 the assemblers of Borland and Microsoft. The default assembler
-is the GNU AS, because it is fast and and available on
-many platforms. Why don't we use the NASM? It is 2-4 times
-slower than the GNU AS and it is created for
-hand-written assembler, while the GNU AS is designed
+is the \file{GNU AS}, because it is fast and and available on
+many platforms. Why don't we use the \file{NASM}? It is 2-4 times
+slower than the \file{GNU AS} and it is created for
+hand-written assembler, while the \file{GNU AS} is designed
 as back end for a compiler.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -366,7 +402,7 @@ procedure test;
 \section{Future plans}
 \label{se:future_plans}
 
-\Appendix
+\appendix
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 % Coding style guide