abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
dnes 06:00 | Komunita

O víkendu probíhá v Praze na Karlově náměstí 13 konference InstallFest 2020. Na programu je celá řada zajímavých přednášek a workshopů. Přednášky lze sledovat také online. Přehled dění na Twitteru.

Ladislav Hagara | Komentářů: 2
včera 15:22 | Komunita

Daniel Vetter ve zprávě rozeslané do vícero e-mailových konferencí shrnuje situaci kolem financování služeb poskytovaných projektům Freedesktop.org, zvláště spojeným s X.Org (grafické knihovny atp.). Vzhledem k rostoucí popularitě služeb jako CI (Continuous Integration) rostou také náklady na hosting (očekávané výdaje od 75 tisíc dolarů za rok), a proto se hledá sponzor, nebo bude nutné služby v horizontu několika měsíců omezit.

Fluttershy, yay! | Komentářů: 8
včera 14:55 | Zajímavý článek

Knot DNS slaví deset let své existence. Projekt autoritativního DNS serveru Knot DNS patří mezi nejstarší projekty Laboratoří CZ.NIC. Dnes je tomu právě deset let od uložení prvotního prototypu serveru commitem 2da03d5da do veřejného repozitáře Git.

Ladislav Hagara | Komentářů: 0
včera 14:11 | Nová verze

Byla vydána nová verze 2.53.1 svobodného multiplatformního balíku internetových aplikací SeaMonkey (Wikipedie). Přehled novinek v poznámkách k vydání. Hlavní změny jsou pod kapotou. Nová hlavní verze 2.53 používá základ z Firefoxu a Thunderbirdu 60.

Ladislav Hagara | Komentářů: 0
včera 07:00 | Zajímavý software

Budou to tři roky, co Canonical ukončil vývoj mj. grafického prostředí Unity8 a souvisejících projektů jako smartphone s Ubuntu Touch. Toho se ujala komunita UBports a vedle toho vznikl fork Yunit, který již neexistuje, zatímco Unity8 se dostane do Debianu. Nebude se však jmenovat Unity8, nýbrž Lomiri, jak bylo nyní oznámeno.

Fluttershy, yay! | Komentářů: 0
včera 06:00 | Zajímavý projekt

Úrad podpredsedu vlády SR pre investície a informatizáciu vyhlásil výzvu na podporu migrácie na open source a podporu budovania inteligentných miest a regiónov. Dátum uzavretia 1. hodnotiaceho kola je 21.04.2020. Žiadatelia môžu získať od 200 000 do 1 000 000 eur.

atirage21 | Komentářů: 0
včera 05:00 | IT novinky

Otevřená certifikační autorita Let's Encrypt oznámila, že vydala již miliardu certifikátů. Při spuštění veřejné bety Let's Encrypt, v prosinci 2015, bylo celosvětově pomocí HTTPS stahováno cca 40 % webových stránek. Dnes je to 81 %. V USA dokonce 91 %. Podrobnosti na stránce se statistikami. Let's Encrypt má aktuálně 13 zaměstnanců na plný úvazek a roční rozpočet přibližně 3,35 milionu dolarů.

Ladislav Hagara | Komentářů: 8
27.2. 15:33 | Komunita

Fedora stále hledá nové logo. První návrhy byly představeny již před rokem. Designérka Fedory Máirín Duffy ukázala na Twitteru aktuální verzi a žádá uživatele o zpětnou vazbu.

Ladislav Hagara | Komentářů: 22
27.2. 13:55 | Nová verze

Android-x86, tj. port mobilního operačního systému Android na standardní PC s architekturou x86, byl vydán v nové stabilní verze 9.0-r1. Přehled novinek v oficiálním oznámení.

Ladislav Hagara | Komentářů: 20
27.2. 13:11 | Komunita

Mozilla definitivně opouští IRC. Vloni začala hledat novou veřejnou komunikační platformu. Dosud používala IRC (plus interně neveřejný Slack a po nějakou dobu i Mattermost). Nicméně IRC i servery zastarávaly a zejména použitelnost na mobilních zařízeních byla často problematická. Po zvažování a zkoušení různých alternativ se Mozilla přiklonila k otevřenému protokolu Matrix (můžete také znát referenčního klienta Riot) a na konci února IRC vypne.

Ladislav Hagara | Komentářů: 38
Vydržela vám novoroční předsevzetí?
 (11%)
 (6%)
 (3%)
 (81%)
Celkem 211 hlasů
 Komentářů: 0
Rozcestník

Scheme snadno a rychle - 2. Gramatiky a tak...

11.3.2007 14:35 | Přečteno: 1163× | Programování | poslední úprava: 12.3.2007 10:41

v beznem clanku o programovacich jazycich je minimalne jedna kapitola venovana gramatikam a podobnym vecem. abych pravdu rekl, neni to tema ktere by me nejak extra rajcovalo a teoreticky by se bez nej i interpretr mohl obejit. ale budiz. muj posledni prispevek budiz ukazkou toho, jak nektere nastroje mam rad. premyslel, jsem jestli parser udelat v ruce nebo generovat. ale jelikoz mam v nadpisu "snadno a rychle" a ne "slozitejc a poradne", tak jsem se rozhodl nakonec pouzit generatory.

gramatika scheme neni zavratne slozita ajak jsem rikal, bez problemu se da udelat v ruce, teda bez pouziti generatoru jako flex a bison, ale radsi jej pouzijeme. r5rs mluvi dokonce o tom, ze diky kvazikvotovani, se nejedna o bezkontextovou gramatiku a tudiz bison by na to mel byt kratky, ale kdyz se kvazikvotovani presune do standardni knihovny, uz tento problem odpada.

2.1. Flex

flex je generator lexikalnich analyzatoru, coz jsou funkce, ktere dokazi vzit jako vstup nejaky retezec a ten rozdelit na kousky (tokeny) a vracet jejich hodnoty. neni potreba nic svetoborneho, v zakladni verzi by stacily tokeny pro zavorky, tecku a symboly. v praxi se pak pouzivaji jeste zkratky pro kvotovani, tj. "'", "`", ",", ",@", ktere se prepisuji na (quote x), (quasiquote x), (unquote x) a (unquote-splicing x)

definice muze vypadat nejak takhle

:
scheme.l:

%{
#include <string.h>
#include "scheme.tab.h"
%}

INITIAL_CHAR    [[:alnum:]]|\+|\*|\-|\\|=|#|\?|\!|<|>|_|\/|~|:|%
INNER_CHAR      [[:alnum:]]|\+|\*|\-|\\|=|#|\?|\!|<|>|_|\/|~|:|%|'|,|@|`|\.
LEFT_PAREN      "("
RIGHT_PAREN     ")"
WHITE_SPACE     [[:space:]]
QUOTE           "'"
UNQUOTE         ","
UNQUOTE_SPLICING "@"
QUASIQUOTE      "`"
DOT             "."
SEMICOL         ";"

%%

{INITIAL_CHAR}{INNER_CHAR}* {
        yylval.symbol = GC_MALLOC(strlen(yytext) + 1);
        strcpy(yylval.symbol, yytext);
        return T_SYMBOL;
}

{LEFT_PAREN}    { return T_LEFT_PAREN; }
{RIGHT_PAREN}   { return T_RIGHT_PAREN; }
{SEMICOL}.*$    /* ignores comments */
{WHITE_SPACE}+  /* ignores white space*/
{QUOTE}         { return T_QUOTE; }
{UNQUOTE}       { return T_UNQUOTE; }
{QUASIQUOTE}    { return T_QUASIQUOTE; }
{UNQUOTE}{UNQUOTE_SPLICING}     { return T_UNQUOTE_SPLICING; }
{DOT}           { return T_DOT; }
%%

za pozornost maximalne stoji, ze cisla tokenu jsou brany z vystupu bisonu a pak dalsi definice, ktere se staraji o ignorovani komentaru. fakt bych nerad sel s touto tematikou nejak do hloubky, protoze o techto vecech byl uz napsan nejeden kilobyte textu.

2.2. Bison

pravidla pro sestaveni samotneho compileru jsou zase vcelku trivialni. a zase se nebudu zatezovat nejakou slozitou teorii a prenecham to povolanejsim.
scheme.y:

%{
#include <stdlib.h>
#include "types.h"
#include "scheme.tab.h"

#define YYERROR_VERBOSE

scm_value * result = NULL;

%}

%union {
        char * symbol;
        scm_value * parsed;
}

%token <symbol> T_SYMBOL
%token T_LEFT_PAREN
%token T_RIGHT_PAREN
%token T_QUOTE
%token T_UNQUOTE
%token T_UNQUOTE_SPLICING
%token T_QUASIQUOTE
%token T_DOT

%type <parsed> expressions symbol symbols list quote quasiquote unquote unquote_splicing

%start expressions

%%

expressions:    symbols { result = $1; }
;

symbol: T_SYMBOL { $$ = scm_value_new_symbol($1); }
| list
| quote
| quasiquote
| unquote
| unquote_splicing

;

symbols: symbol { $$ = scm_value_new_pair($1, SCM_CONST_NIL); }
| symbol T_DOT symbol { $$ = scm_value_new_pair($1, $3); }
| symbol symbols { $$ = scm_value_new_pair($1, $2); }

;

list:   T_LEFT_PAREN T_RIGHT_PAREN { $$ = SCM_CONST_NIL; }
| T_LEFT_PAREN symbols T_RIGHT_PAREN { $$ = $2; }
;


/* Quotation symbols */
quote:  T_QUOTE symbol  { $$ = scm_value_new_pair(
                        scm_value_new_symbol("quote"),
                        scm_value_new_pair($2, SCM_CONST_NIL)); }
;

quasiquote: T_QUASIQUOTE symbol { $$ = scm_value_new_pair(
                            scm_value_new_symbol("quasiquote"),
                            scm_value_new_pair($2, SCM_CONST_NIL)); }
;

unquote: T_UNQUOTE symbol { $$ = scm_value_new_pair(
                         scm_value_new_symbol("unquote"),
                         scm_value_new_pair($2, SCM_CONST_NIL)); }
;
%%

vsimnete si, ze si zatim vystacime s pouzitim, jenom datovych typu -- PAIR, SYMBOL, NIL. zadna cisla, zadne booleovske hodnoty. to vsechno je az soucasti semanticke analyzy, ktere se budu venovat priste.

uznavam, ze tato kapitola je hodne zalostna, ale o gramatikach a takovych tech vecech bylo napsano dost, obzvlast od fundovanejsich osob. dopriste se doufam polepsim.

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Vložit další komentář

12.3.2007 10:20 Michal Vyskočil | skóre: 60 | blog: miblog | Praha
Rozbalit Rozbalit vše Re: Scheme snadno a rychle - 2. Gramatiky a tak...
OT: odkaz na bison je špatně ;-)
When your hammer is C++, everything begins to look like a thumb.
12.3.2007 10:41 deda.jabko | skóre: 23 | blog: blog co se jmenuje "každý den jinak" | za new york city dvakrát doleva a pak už se doptáte
Rozbalit Rozbalit vše Re: Scheme snadno a rychle - 2. Gramatiky a tak...
diky, opraveno
Asi před rokem se dostali hackeři na servry Debianu a ukradli jim zdrojové kódy.
12.3.2007 20:49 User682 | skóre: 38 | blog: aqarium | Praha
Rozbalit Rozbalit vše Re: Scheme snadno a rychle - 2. Gramatiky a tak...
Kdyz uz jste nacli toto tema, tak by me zajimala jedna vec mimo.

Nenasel nekdo nastroj, co umi vygenerovat "call tree" v jave do graphviz formatu ? Pripadne, aby ta vec umela generovat nejake vetveni podminek s volanim method ve stromu taktez v graphvizu.

At to nepisu zbytecne. AST Stromy jsem jiz nejak poskladal, ale nejvice boli, jak z toho dostat nejakou rozumnou strukturu a nejak rozumne orezat zobrazovani prvku.

thx bye gf
10.6.2018 09:36 Thanos
Rozbalit Rozbalit vše online
Here the error code for the all use full to save the internet connection setting in windows so get this code hurry here 0x80072ee7 and save the all update online to thanks for the visit here.
24.10.2019 10:53 Zaida Vargas
Rozbalit Rozbalit vše Re: Scheme snadno a rychle - 2. Gramatiky a tak...

Thaksgiving is coming visit https://onsumo.com/thanksgiving-quotes/ for thanksgiving quotes

21.1. 20:34 Wessel Jacobs
Rozbalit Rozbalit vše Re: Scheme snadno a rychle - 2. Gramatiky a tak...

8 Ball Pool Cheats will let you buy all items for free. Below you will see all the cheats needed to hack 8 Ball Pool These Cheats for 8 Ball Pool work on all iOS and Android devices. You will also not need a jailbreak or rooted phone. Using our website you no longer need to download a hack tool, so it is safer. If you don't know how to use the hack for 8 Ball Pool hack tool then click here.

Založit nové vláknoNahoru

ISSN 1214-1267   www.czech-server.cz
© 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.