
    

    <?xml version="1.0" encoding="utf-8"?>
<!-- generator="FeedCreator 1.7.2-ppt DokuWiki" -->
<?xml-stylesheet href="http://ocw.cs.pub.ro/courses/lib/exe/css.php?s=feed" type="text/css"?>
<rdf:RDF
    xmlns="http://purl.org/rss/1.0/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
    xmlns:dc="http://purl.org/dc/elements/1.1/">
    <channel rdf:about="http://ocw.cs.pub.ro/courses/feed.php">
        <title>CS Open CourseWare cpl:labs</title>
        <description></description>
        <link>http://ocw.cs.pub.ro/courses/</link>
        <image rdf:resource="http://ocw.cs.pub.ro/courses/lib/tpl/arctic/images/favicon.ico" />
       <dc:date>2026-05-17T01:38:13+03:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/01?rev=1475520978&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/02?rev=1475698704&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/03?rev=1475698620&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/04?rev=1477149872&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/05?rev=1509512392&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/06?rev=1478556178&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/07?rev=1479170157&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/08?rev=1511239961&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/09?rev=1481058177&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/10?rev=1512455672&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/11?rev=1482191978&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/12?rev=1484089590&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/13?rev=1484593359&amp;do=diff"/>
                <rdf:li rdf:resource="http://ocw.cs.pub.ro/courses/cpl/labs/llvm-pass?rev=1449527572&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="http://ocw.cs.pub.ro/courses/lib/tpl/arctic/images/favicon.ico">
        <title>CS Open CourseWare</title>
        <link>http://ocw.cs.pub.ro/courses/</link>
        <url>http://ocw.cs.pub.ro/courses/lib/tpl/arctic/images/favicon.ico</url>
    </image>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/01?rev=1475520978&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-10-03T21:56:18+03:00</dc:date>
        <title>01. Introduction to Flex</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/01?rev=1475520978&amp;do=diff</link>
        <description>Introducere

De-a lungul acestui semestru, veți studia în cadrul cursului modul de implementare al unui compilator. La nivel conceptual, compilatorul este un program ce face translatarea dintr-un limbaj în altul. Cel mai adesea, compilatorul face translatarea dintr-un limbaj de nivel înalt (C, C++, Java), ce este scris și înteles de un programator, într-un limbaj low level (bytecode, limbaj asamblare, cod mașina) ce poate fi mai apoi executat de procesor (eventual după aplicarea unei noi transla…</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/02?rev=1475698704&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-10-05T23:18:24+03:00</dc:date>
        <title>02. Introduction to Bison</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/02?rev=1475698704&amp;do=diff</link>
        <description>Nice to read

	*  Bison manual
	*  flex &amp; bison O'Reilly book

Prezentare teoretică



Bison este un generator de analizoare sintactice. Acesta primește la intrare gramatica unui limbaj pe care o translatează într-un parser pentru acel limbaj. Gramaticile pentru bison sunt descrise folosind o variantă a BNF (Backus Naur Form). Gramaticile BNF pot fi folosite pentru limbaje independente de context. Parserele generate cu Bison pot folosi una din urmatoarele metode de parsare:</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/03?rev=1475698620&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-10-05T23:17:00+03:00</dc:date>
        <title>03. Bison Advanced</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/03?rev=1475698620&amp;do=diff</link>
        <description>În acest laborator vom aprofunda cunoștințele de bison și vom incepe să discutăm despre prima temă.

Să reluăm cum comunică bison-ul cu flex-ul în vederea generării parser-ului.

În fișierul reprezentând input-ul pentru bison vom scrie funcția main(), în care vom apela yyparse(). Funcția yyparse() este deja implementată și o vom regăsi în fișierul .c al parserului.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/04?rev=1477149872&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-10-22T18:24:32+03:00</dc:date>
        <title>04. Introduction to LLVM</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/04?rev=1477149872&amp;do=diff</link>
        <description>04. Introduction to LLVM

LLVM conține o serie de biblioteci și utilitare care pot fi folosite pentru a construi compilatoare, interpretoare și alte tool-uri similare. Găsiți aici o introducere și câteva exemple interesante de utilizare a LLVM-ului. Pentru și mai multe exemple, există o pagină cu proiecte care folosesc LLVM.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/05?rev=1509512392&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-11-01T06:59:52+03:00</dc:date>
        <title>05. LLVM IR - C++ API</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/05?rev=1509512392&amp;do=diff</link>
        <description>05. LLVM IR - C++ API

În laboratorul trecut ne-am folosit de reprezentarea textuală a codului intermediar LLVM pentru a înțelege mai bine forma și structura acestuia. Laboratorul curent își propune să vă familiarizeze cu API-ul C++ cu care lucrează bibliotecile LLVM-ului pentru a reprezenta în memorie instrucțiuni.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/06?rev=1478556178&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-11-08T00:02:58+03:00</dc:date>
        <title>06. Code generation. Structure of data and objects in memory</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/06?rev=1478556178&amp;do=diff</link>
        <description>În urma compilării și linkării unui program rezultă un fişier binar care, indiferent de formatul lui, este reprezentarea programului în memoria procesorului pentru care a fost compilat. Aceasta reprezentare conține în mod uzual mai multe secțiuni implicite, secțiuni care în funcție de format au diverse denumiri, dar scopul lor este asemănător.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/07?rev=1479170157&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-11-15T02:35:57+03:00</dc:date>
        <title>07. Code generation. Function calls and stack frames</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/07?rev=1479170157&amp;do=diff</link>
        <description>Transmiterea parametrilor

În limbajele de nivel înalt, exista câteva modalități de transmitere a parametrilor și de întoarcere a rezultatelor, dintre care amintim:

	*  apelul prin valoare
	*  apelul prin referinta 
	*  apelul prin rezultat
	*  apelul prin valoare-rezultat
	*  apelul prin nume.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/08?rev=1511239961&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-11-21T06:52:41+03:00</dc:date>
        <title>08. LLVM backend</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/08?rev=1511239961&amp;do=diff</link>
        <description>08. LLVM backend

Nice to read

	*  The LLVM Target-Independent Code Generator
	*  Building an LLVM backend
	*  Building a 
backend in 24 hours
	*  Creating an LLVM Backend for the Cpu0 Architecture
	*  TableGen

Introducere

Backend-ul de LLVM primește cod scris în limbajul intermediar și generează asamblare.
Binarul este llc.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/09?rev=1481058177&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-12-06T23:02:57+03:00</dc:date>
        <title>09. LLVM Passes - displaying code structure</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/09?rev=1481058177&amp;do=diff</link>
        <description>Control Flow Analysis

Înainte de a putea optimiza un program, unui compilator îi sunt necesare componente care sa îl ajute sa “înțeleagă” cum folosește programul respectiv resursele disponibile.

Astfel, compilatorul trebuie sa fie capabil sa descrie:</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/10?rev=1512455672&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-12-05T08:34:32+03:00</dc:date>
        <title>10. LLVM Passes - code analysis</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/10?rev=1512455672&amp;do=diff</link>
        <description>10. LLVM Passes - code analysis

Analiza fluxului de date oferă informație globală despre modul în care o procedură sau, în general, un segment de program manipulează datele.

Un exemplu de optimizare ce se poate realiza cu o analiză a fluxului de date este propagarea constantelor:</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/11?rev=1482191978&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2016-12-20T01:59:38+03:00</dc:date>
        <title>11. LLVM - transformări de cod</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/11?rev=1482191978&amp;do=diff</link>
        <description>11. LLVM - transformări de cod

Introducere

În LLVM optimizările sunt implementate sub formă de Pass-uri care traversează programul pentru a-l analiza și a-l transforma. Obținerea de informații despre program prin analiza fluxului de date sau de control constituie un pas important în implementarea optimizărilor.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/12?rev=1484089590&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-01-11T01:06:30+03:00</dc:date>
        <title>12. Linkers and Loaders</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/12?rev=1484089590&amp;do=diff</link>
        <description>Nice to read

	*  Linkers and Loaders,  John R. Levine


linkăreloadăre


Prezentare teoretică

Linkerele unesc mai multe fișiere compilate (obiect) pentru a genera un singur fișier executabil.

Loaderele încarcă un program executabil la o anumită adresă în memorie.</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/13?rev=1484593359&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2017-01-16T21:02:39+03:00</dc:date>
        <title>13. Garbage Collection</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/13?rev=1484593359&amp;do=diff</link>
        <description>Termenul de Garbage Collection (gc) se referă la algoritmii de eliberare implicită a memoriei dinamice sau, altfel
spus, de colectare a zonelor de memorie devenite inaccesibile.

Zonele care pot să fie eliberate (garbage) sunt zone de memorie la care nu se mai poate ajunge prin intermediul unui pointer sau eventual a unei succesiuni de pointeri accesibili. Despre aceste zone se spune că sunt inaccesibile spre deosebire de zonele care sunt accesibile şi despre care se spune că sunt în viaţă.…</description>
    </item>
    <item rdf:about="http://ocw.cs.pub.ro/courses/cpl/labs/llvm-pass?rev=1449527572&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2015-12-08T00:32:52+03:00</dc:date>
        <title>LLVM Passes</title>
        <link>http://ocw.cs.pub.ro/courses/cpl/labs/llvm-pass?rev=1449527572&amp;do=diff</link>
        <description>LLVM Passes este un subsistem al framework-ului LLVM ce permite crearea de module simple pentru transformarea, prelucrarea și analiza codului intermediar LLVM IR.

Există numeroase pass-uri deja implementate în versiunea oficială LLVM. Acestea primesc ca input cod LLVM IR și oferă ca output fie LLVM IR (în cazul în care este un pass de transformare), fie un text cu diverse statistici (în cazul în care este un pass de analiză).</description>
    </item>
</rdf:RDF>
