Skip to content

Commit

Permalink
Merge branch 'rapport' of github.com:johang88/haskellinjavascript int…
Browse files Browse the repository at this point in the history
…o rapport
  • Loading branch information
northOfThule committed Apr 28, 2010
2 parents 19fba22 + 2efc6be commit 067b88f
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 4 deletions.
6 changes: 4 additions & 2 deletions rapport/kapitel/metod.tex
Expand Up @@ -42,8 +42,10 @@ \subsection{Kodbibliotek}
Nedan följer en kort beskrivning av de olika kodbibliotek som vi använt i projektet.

\subsubsection{JSParse}
Parsern implementeras med hjälp av ett parser combinator bibliotek kallat JSParse.
En parser combinator består av olika funktioner som parsar exempelvis strängar, listor och blanksteg. Dessa funktioner kombineras för att skapa mer komplexa parsers. JSParse ger oss möjlighet att enkelt implementera både den kontextfria och den del som inte är det av Haskells syntax.
Parsern implementeras med hjälp av ett parser combinator bibliotek kallat JSParse.
En parser combinator består av olika funktioner som parsar exempeliv strängar, listor och blanksteg.
Dessa funktioner kombineras för att skapa mer komplexa parsers. Det ger oss möjlighet att enkelt implementera komplexa
parsers för både dem kontextfria och den icke kontextfria varianterna av Haskell.

\subsubsection{jQuery}

Expand Down
22 changes: 20 additions & 2 deletions rapport/kapitel/resultat.tex
Expand Up @@ -65,10 +65,28 @@ \subsubsection{Steg 2}
som är specifierad i Haskellstandarden. Därefter användads en annan algoritm från samma standard för att sätta in måsvingar och semikolon på rätt ställen.
När de två algoritmerna är klara sätts koden ihop igen och skickas vidare till steg 3.

En av reglerna är att ett inre block inte får vara mindre indenterat än det omslutande blocket, exempelivs:
\begin{lstlisting}
case x of
True -> ...
\end{lstlisting}
Här är "True -> ..." ett inre block till "case" och därmed mer indenterat.

Ett annat exempel är:
\begin{lstlisting}
let x = 5 in x
\end{lstlisting}
Den korrekta översättningen är:
\begin{lstlisting}
let { x = 5 } in x
\end{lstlisting}
För att kunna översätta detta korrekt kommer parsern ihåg den aktuella nästlingsnivån av "let"-uttryck och var deras repsektive "in"-uttryck befinner sig.
Den avslutande måsvingen sätts in där ett matchande "in"-uttryck påträffas.

\subsubsection{Steg 3}
Det tredje steget är en parser för hela den kontextfria varianten av Haskell som den är definerad i standarden.
Samtidigt som koden tolkas byggs en AST upp. Parsern består av en liten parser för varje grammatisk regel som är definerat i Haskellstandarden
dessa parsers kombineras ihop för att bilda den slutgiltliga parsern.
Samtidigt som koden tolkas byggs en AST upp. Parsern består av en liten parser för varje grammatisk regel som är definerad i Haskellstandarden
dessa parsers kombineras ihop för att bilda den slutgiltliga parsern. Det resulterar i ett träd av parsers, en parser för hela programmet som har flera mindre parsers under sig.

\subsection{Abstrakt syntaxträd}
%TODO
Expand Down

0 comments on commit 067b88f

Please sign in to comment.