statemachine: parser
[hwmod.git] / spec / spec.tex
index 1d8bb580895712af0e36d7e91a94919897fe15b0..88e0045663ffc6e0462c25c41e06617f52ff2c0d 100644 (file)
@@ -364,6 +364,49 @@ Modul wird dadurch getriggert das anliegende Zeichen in den Buffer zu \"ubernehm
 \label{fig:parser}
 \end{figure}
 
+\begin{lstlisting}
+procedure exec() {
+       z := z*s;
+       switch(opp) {
+               case NOP: 
+                       if(aktop != '\0')
+                               c1();
+                       break;
+               case '-':
+                       z := z * (-1);
+               case '+':
+                       c1();
+                       break;
+
+               case '/':
+               case '*':
+                 if(aktop in ['+','-','\0']) {
+                         alu(opp, z, punkt);
+                         do_calc = 1;
+                         while(calc_done == 0);
+
+                         alu(ADD, punkt, strich);
+                         punkt = 1;
+                 }
+                 else if (aktop in ['*','/']) {
+                         alu(opp, z, punkt);
+                 }
+                 break;
+       }
+       do_calc = 1;
+       opp = aktop;
+}
+
+procedure c1() {
+       if(aktop in ['+','-','\0']) {
+               alu(ADD, z, strich);
+       }
+       else if (aktop in ['*','/']) {
+               alu(MUL, z, punkt);
+       }
+}
+\end{lstlisting}
+
 \begin{itemize}
 \item \textbf{idle}: Das Modul ist unt\"atig und wartet auf eine steigende Flanke von \emph{do\_it}.
 
@@ -374,17 +417,17 @@ History Modul angefordert.
 
 \item \textbf{calc}: Zeichen f\"ur Zeichen wird eingelesen und die Zahl wird daraus berechnet.
 
-\item \textbf{ALU1/2}: Punkt- und Strichrechnungen m\"ussen getrennt behandelt werden, daher ergibt
-sich dieses Konstrukt.
+\item \textbf{ALU}: Punkt- und Strichrechnungen m\"ussen getrennt behandelt werden, daher ergibt
+sich dieses Konstrukt im Codebeispiel.
 
 \item \textbf{null}: Sonderbehandlung ist n\"otig wenn die Expression mit '\textbackslash 0'
 abgeschlossen wird.
 
-\item \textbf{done}: In diesem Zustand wird das Ergebnis das sich je nach \emph{opd} in
+\item \textbf{done}: In diesem Zustand wird das Ergebnis das sich je nach \emph{opp} in
 \emph{strich} oder \emph{punkt}  befindet als String in den Ergebnisbuffer des History Modules
 geschrieben und danach wird \emph{finnnnnished\_result} f\"ur einen Zyklus auf high gesetzt.
 
-\item \textbf{error}: Zwecks \"ubersichtlichkeit wurden die Transitionen zu diesem Zustand
+\item \textbf{error}: Zwecks \"Ubersichtlichkeit wurden die Transitionen zu diesem Zustand
 vernachl\"assigt. Dieser Zustand wird erreicht sobald ein Grammatikfehler oder ein Fehler der ALU
 auftritt. Es wird der String ``Error'' in den Ergebnisbuffer geschrieben und
 \emph{finnnnnished\_result} wird f\"ur einen Zyklus auf high gesetzt.
@@ -394,7 +437,7 @@ auftritt. Es wird der String ``Error'' in den Ergebnisbuffer geschrieben und
 \subsection{Bin/Dez-Converter}
 
 \subsection{ALU}
-opcodes: NOP, ADD, SUB, MUL, DIV, DONE (als enum)
+opcodes: NOP, ADD, MUL, DIV, DONE (als enum)
 
 \subsection{Display}