}
@article{metricsSuite1994,
- title = {A Metrics Suite for Object Oriented Design},
- volume = {20},
- issn = {0098-5589},
- doi = {10.1109/32.295895},
- pages = {476-493},
- number = {6},
- journaltitle = {{IEEE} Transactions on Software Engineering},
- author = {Chidamber, {S.R.} and Kemerer, {C.F.}},
- date = {1994-06},
+ title = {A Metrics Suite for Object Oriented Design},
+ volume = {20},
+ issn = {0098-5589},
+ doi = {10.1109/32.295895},
+ pages = {476-493},
+ number = {6},
+ journaltitle = {{IEEE} Transactions on Software Engineering},
+ author = {Chidamber, {S.R.} and Kemerer, {C.F.}},
+ date = {1994-06},
+}
+
+@book{louden1997,
+ location = {Boston},
+ title = {Compiler construction: principles and practice},
+ isbn = {0534939724 9780534939724},
+ publisher = {{PWS} Pub. Co.},
+ author = {Louden, Kenneth C},
+ date = {1997},
}
processarrow/.style={black, ->, >=angle 90, shorten >=1pt, align=center,
font=\small},
}
- \begin{tikzpicture}[node distance=2.5cm, scale=0.8, every
+ \begin{tikzpicture}[node distance=1cm and 2.4cm, scale=1, every
node/.style={transform shape}]
\node[base](AuxNode1){};
- \node[primary, right=of AuxNode1, xshift=0.4cm](Scanner){Scanner};
+ \node[primary, right=of AuxNode1](Scanner){Scanner};
\node[primary, right=of Scanner, xshift=0.5cm](Parser){Parser};
- \node[dashedbox, right=of Parser,
- xshift=1cm](SemanticAnalyzer){Semantic\\Analyzer};
- \node[dashedbox, below=of SemanticAnalyzer,
- yshift=1cm](SourceCodeOptimizer){Source Code\\Optimizer};
- \node[dashedbox, left=of SourceCodeOptimizer, xshift=-0.8cm,
+ \node[dashedbox, below=of Parser](SemanticAnalyzer){Semantic\\Analyzer};
+ \node[dashedbox, left=of SemanticAnalyzer](SourceCodeOptimizer){Source
+ Code\\Optimizer};
+ \node[dashedbox, below=of SourceCodeOptimizer
](CodeGenerator){Code\\Generator};
- \node[dashedbox, left=of CodeGenerator,
- xshift=0.2cm](TargetCodeOptimizer){Target Code\\Optimizer};
- \node[base, left=of TargetCodeOptimizer](AuxNode2){};
+ \node[dashedbox, right=of CodeGenerator](TargetCodeOptimizer){Target
+ Code\\Optimizer};
+ \node[base, right=of TargetCodeOptimizer](AuxNode2){};
\draw[processarrow](AuxNode1) -- node [above]{source code}(Scanner);
\draw[processarrow](Scanner) -- node [above]{tokens}(Parser);
- \draw[processarrow](Parser) -- node [above]{syntax tree}(SemanticAnalyzer);
+ \draw[processarrow](Parser) -- node [right]{syntax tree}(SemanticAnalyzer);
\draw[processarrow, dashed](SemanticAnalyzer) -- node
- [right]{annotated\\tree}(SourceCodeOptimizer);
- \draw[processarrow, dashed](SourceCodeOptimizer) -- node
- [above]{intermediate code}(CodeGenerator);
+ [above]{annotated\\tree}(SourceCodeOptimizer);
+ \draw[processarrow, dashed](SourceCodeOptimizer) -- node [left]{intermediate
+ code}(CodeGenerator);
\draw[processarrow, dashed](CodeGenerator) -- node [above]{target
code}(TargetCodeOptimizer);
\draw[processarrow, dashed](TargetCodeOptimizer) -- node [above]{target
code}(AuxNode2);
\end{tikzpicture}
- \caption{Interrupted compilation process}
+ \caption{Interrupted compilation process. {\footnotesize (Full compilation
+ process from \emph{Compiler construction: principles and practice} by
+ Kenneth C. Louden\citing{louden1997}.)}}
\label{fig:interruptedCompilationProcess}
\end{figure}