Parsodus/docs/abstract.tex

30 lines
3.1 KiB
TeX

\documentclass{article}
\usepackage[utf8]{inputenc}
\title{Projectvoorstel Machines en Berekenbaarheid\\
\large Parser generator: \texttt{\emph{Parsodus}}}
\author{Thomas Avé, Robin Jadoul, Kobe Wullaert}
\date{}
\begin{document}
\clearpage\maketitle
\thispagestyle{empty}
\clearpage
\paragraph{}
In fase \texttt{I} werd door deze groep reeds de omzetting van een CFG naar CNF\footnote{Kobe Wullaert}, van een CFG naar een PDA en het CYK algoritme\footnote{Thomas Avé}, PDA naar CFG, een SLR(1) en een LL(1) parser geïmplementeerd\footnote{Robin Jadoul}.
\paragraph{}
Voor fase \texttt{II} stellen we onszelf tot doel een programmeertaal agnostische generator voor parsers te maken. In tegenstelling tot de bekende en frequent gebruikte \emph{yacc} of \emph{bison} is het ons doel hierbij in de feitelijke specificatie voor de analysator geen specifieke programmeertaal te laten voorkomen (bij yacc/bison moet men specifieke code schrijven in de gewenste programmeertaal). Dit heeft tot voordeel dat eenzelfde input bestand eenvoudig hergebruikt kan worden in meerdere projecten, zonder verdere compatibiliteitsproblemen. Zo kan bijvoorbeeld een standaardcomité van een programmeertaal een voorbeeldspecificatie in dit inputformaat vrijgeven, en kunnen verschillende toepassingen daarvan gebruik maken zonder op eender welke manier gerestricteerd te zijn, of van elkaar afhankelijk te zijn.
\paragraph{}
Intern zal de generator werken door een context-vrije grammatica (die aanvaard wordt door het gewenste type parser) die de specificatie van een taal beschrijft om te zetten naar een \texttt{LR of LL parse table}, waarop een generisch LR/LL parse algoritme kan werken (het exacte type parse table is mogelijk variabel en specifieerbaar door de gebruiker), dat extra annotaties of code kan hebben om het aanmaken van een \emph{abstract syntax tree} of het uitvoeren van acties tijdens het parsen kan bevorderen. Een mogelijke uitbreiding voor het oplossen van ambiguïteiten in de grammatica zou het ondersteunen van voorrangsregels (zoals wiskundig gezien: eerst vermenigvuldiging, dan optelling), en associativiteitsspecificaties zijn.
\paragraph{}
Voor een gegeven invoerbestand zal dan de mogelijkheid bestaan om dit om te zetten naar een sourcecode bestand naar keuze\footnote{Indien de gewenste taal geïmplementeerd is, initieel wordt enkel \texttt{C++} ondersteuning gepland}. Dit bestand kan dan mee gecompileerd worden (of geïnterpreteerd, afhankelijk van de taal) en op die manier een interface beschikbaar stellen waarmee de uiteindelijke toepassing een inputstroom (van tokens, dankzij de geplande integratie met Lexesis) zal kunnen parsen en verder verwerken. Bovendien zal de generator in staat zijn (dankzij de programmeertaal-onafhankelijkheid) een idiomatische interface vrij te geven, per programmeertaal.
\paragraph{}
Om verder ook het nut en de gebruiksvriendelijkheid van onze generator aan te tonen, zullen we mogelijk ook trachten een eenvoudige programmeertaal (bv. \emph{brainfuck}) te parsen en te interpreteren of compileren en de regex-parser van Lexesis te vervangen door een nieuwe gegenereerde parser.
\end{document}