[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [CPROG] Hvordan skrives en compiler ?



Bjørn Houdorf wrote:
> Et lille spørgsmål:
>
> Hvordan skriver man f.eks. en compiler for et programmeringssprog som
> endnu ikke findes til Linux ?
> Skrives en sådan compiler i maskinkode, assembler eller et højniveau-sprog
> som f.eks. C++ ??

   Som en tommelfinger-regel kan du programmere alt i et Turing-komplet
sprog. Jeg indroemmer gerne at jeg aldrig har proevet at skrive
compilere i assembly, men det kan selvfoelgelig goeres. C, C++ eller
Java er derimod et godt valg; let at overskue og portabelt (i
modsaetning til de fleste stoerre assembly programmer).

   Det er dog de faereste der skriver compilere i 'direkte' C(++) nu om
dage. Som sagt i en anden besked, er vaerktoejerne lex (flex) og yacc
(bison) blevet standarden inden for lexikal analyse og parsing,
henholdvis. Disse vaerktoej hjaelper meget med oversaettelse af
kildekode til et andet format. Der er dog mere til en compiler end en
parser og tokenizer. Dette er et typisk diagram over processen, som lex
og yacc klarer for dig (undskyld for det daarlige ASCII):

    _____                         _______               ________
   |     |--read character------>|lexical|  token og   |        |
   |input|                       |analyse|------------>| parser |
   |_____|<-push back character--|_______|  attributer |________|

   Som sagt er der mere mht. compiler-skrivning end det. Til 'rigtige'
sprog konstruerer man normalt intermediate forms (normalt parse- eller
AST-traer), som saa yderligere bliver oversat til dit target
assembly-agtige sprog (det kan vaere maskinkode til Linux/x86, men kan
ogsaa vaere kode til din egen VM).

> Findes der mon noget information om det på internettet ?

   Hvis man er interesseret i noget (ret simpel) compiler teori, saa er
Chris Crenshaw's "Let's Build a Compiler" tutorial nok sagen. Det
snakker dog udelukkende om haandskrevne parsere (LL(1) og
recursive-descent), men er ellers en udemaerket introduktion til
interesserede.

   Til dem som er mere serioese vil jeg henvise til Drage bogen; den
definitive klassiker paa compiler. Den daekker samtlige alle processer
mht. compiler-skrivning og har mange eksempler og oevelser:

   "Compilers: Principles, Techniques, and Tools"
   skrevet af Alfred V. Aho, Ravi Sethi, and Jeff D. Ullman
   ISBN 0-201-10194-7

> Det er sikkert alt for svært for mig nu, men det ville da være interessant
> at vide noget om.

   Med udgivelse af software-udviklings systemer som PCCTS/ANTLR (til
C++) og SableCC (til Java) er det blevet meget lettere at skrive
compilere. 

   Her er nogle links faa mht. compilere:

   ANTLR/PCCTS (C++, Java): http://www.antlr.org
   SableCC (Java):          http://http://www.sable.mcgill.ca/sablecc/
   Crenshaw's Tutorial:     http://www.iecc.com/compilers/crenshaw/

-- 
| Per Vognsen (Randers - Denmark)| "Superstition is a  word the |
| Mail: <sslug@sslug>   | ignorant  use   to  describe |
| Voice: +45 20639009            | their own ignorance." - Sifu |


 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 20:07 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *