Humanista w twoim Linuksie, czyli nie tylko     o jądrach ale i języku słów kilka           Adam Przybyła <adam@ertel.com....
Gandhi i jego SwaradżMonopol solny obcych kor ... kompaniiMarsze solneRodzime tkactwo – własne narzędziaBierny opórCzy to ...
Swaradź, swaraj (z sanskrytu swaradźia ­  "panowanie, rząd, samorząd"), hasło  wysunięte 1906 na sesji Indyjskiego  Kongre...
Jądro ciemności czyli co tkwi w systemach                LinuksowychJądro – czyli systemInterpretery  Python, Perl, PhpFil...
[adam@tao ~]$ file {/usr,}/bin/*|cut ­f2­ ­d: |awk {print $1,$2}|sort |uniq ­c|sort    ­rn   2008 ELF 32­bit    315 POSIX ...
 Pliki weryfikowalne ­ XMLSAXDOMPULL
Opis CSV w EBNFCSV file­­­­­­­­file         ::= [ header ] { line }header       ::= [ { entry separator } entry ] newlinel...
Flex i BisonFlex – analizator leksykalnyRozszerzona wersja programu lexGeneruje tablice przejśćParsery LR i LL
Gramatyka pliku definicji{definicje}%%{reguły}%%{procedury użytkownika}
Plik konfiguracyjny analizatora %%         leksylalnego,                     {return COMMA;}n                    {return N...
Kod Bisona%token COMMA NEWLINE ITEM%%csv_file : line_list | line_list line;line_list : line_list line newline | line newli...
Program wynikowy we Flexstatic yyconst flex_int32_t yy_ec[256] =   {   0,        1,    1,    1,    1,    1,    1,    1,   ...
Program wynikowy we Bisonstatic const yytype_uint8 yytranslate[] ={       0,     2,     2,     2,     2,     2,     2,    ...
Problemy analizyShift/ReduceReduce/reduceStany początkoweSemantyczne predykaty a[i] (Ruby)
Flex z kernelemFiltr klasyfikujący do kernelahttps://github.com/AdamPrzybyla/layer7­flexKilka razy szybsze rozwiązanie niż...
Analizator leksykalny ANTLRPCTTSDla leniwychAnalizator LL(*)Przejrzysty kodGeneracja kodu Java,c#,Python,C++
Tryby pracy ANTLRAnalizator leksykalnyTworzenie ASTWalker ASTGenerowanie plików graphvizPrzetwarzanie ASTJęzyk template
Przetwarzanie drzew ASTKompilator c kiedyś:  Źródło w C  C z rozwiniętymi makrami  Asembler  Plik .o + linkowanieKompilato...
Przepływ w parserze ANTLR
Język dziedzinowy ­ DSLGraphviz ­ DOTYaccSQLHTMLVHDL
Edytor ANTLRWorks
Gramatyka CSV w ANTLRgrammar csv;options {    language=Python; }file : record (NEWLINE record)* EOF ;record : (quoted_fiel...
Zrozumiały kod (Java)case CHAR:                    {  alt5=1;                     }                    break;             ...
Wywołanie funkcji – jak w                 ręcznych parserachif alt2 == 1:                 # csv.g:26:8: quoted_field      ...
Innowacja wg KalamaKto to jest Abdul Kalam?Open SourcePrace nad językiemTechnologie satelitarne
Pytania?
Upcoming SlideShare
Loading in …5
×

Humanista w twoim linuksie

577 views
521 views

Published on

Humanista w twoim linuksie - wykład podczas Dni Wolnego Oprogramowania - Bielsko 2012

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
577
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Humanista w twoim linuksie

  1. 1. Humanista w twoim Linuksie, czyli nie tylko  o jądrach ale i języku słów kilka Adam Przybyła <adam@ertel.com.pl> (mail i JID) (Creative Commons CC-by-nd) Dni Wolnego Oprogramowania - Bielsko 2012
  2. 2. Gandhi i jego SwaradżMonopol solny obcych kor ... kompaniiMarsze solneRodzime tkactwo – własne narzędziaBierny opórCzy to nie brzmi znajomo?
  3. 3. Swaradź, swaraj (z sanskrytu swaradźia ­  "panowanie, rząd, samorząd"), hasło  wysunięte 1906 na sesji Indyjskiego  Kongresu Narodowego, 1920 wpisane do jego  programu. Wolność ale także w sensie  ekonomicznym. 
  4. 4. Jądro ciemności czyli co tkwi w systemach  LinuksowychJądro – czyli systemInterpretery Python, Perl, PhpFiltry Awk, Sed, Tr, Grep, Translatory Flex, Bison, ANTLR, M4
  5. 5. [adam@tao ~]$ file {/usr,}/bin/*|cut ­f2­ ­d: |awk {print $1,$2}|sort |uniq ­c|sort  ­rn   2008 ELF 32­bit    315 POSIX shell    311 symbolic link    105 a /usr/bin/python     95 a /usr/bin/perl     21 Bourne­Again shell     16 a python     13 setuid ELF      5 setuid executable,      4 setgid ELF      3 setgid executable,      3 a perl[adam@tao ~]$
  6. 6.  Pliki weryfikowalne ­ XMLSAXDOMPULL
  7. 7. Opis CSV w EBNFCSV file­­­­­­­­file         ::= [ header ] { line }header       ::= [ { entry separator } entry ] newlineline         ::= [ { entry separator } entry ] newlineentry        ::= character+ | { character* " separator " } | " entry  newline entry "newline      ::= nseparator    ::= ,character    ::= a|b|..|A|B|..|0|1|..escapedQuote ::= ""
  8. 8. Flex i BisonFlex – analizator leksykalnyRozszerzona wersja programu lexGeneruje tablice przejśćParsery LR i LL
  9. 9. Gramatyka pliku definicji{definicje}%%{reguły}%%{procedury użytkownika}
  10. 10. Plik konfiguracyjny analizatora %% leksylalnego,                     {return COMMA;}n                    {return NEWLINE;}rn                  {return NEWLINE;}[^,nr]+             {return ITEM;}
  11. 11. Kod Bisona%token COMMA NEWLINE ITEM%%csv_file : line_list | line_list line;line_list : line_list line newline | line newline |  line_list newline | newline;line : line comma | line item | item | comma;comma : COMMA ;newline : NEWLINE;item : ITEM ;
  12. 12. Program wynikowy we Flexstatic yyconst flex_int32_t yy_ec[256] =   {   0,        1,    1,    1,    1,    1,    1,    1,    1,    1,    2,        1,    1,    3,    1,    1,    1,    1,    1,    1,    1,        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,        1,    1,    1,    4,    1,    1,    1,    1,    1,    1,        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,[ciach]
  13. 13. Program wynikowy we Bisonstatic const yytype_uint8 yytranslate[] ={       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,         2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
  14. 14. Problemy analizyShift/ReduceReduce/reduceStany początkoweSemantyczne predykaty a[i] (Ruby)
  15. 15. Flex z kernelemFiltr klasyfikujący do kernelahttps://github.com/AdamPrzybyla/layer7­flexKilka razy szybsze rozwiązanie niż wyrażenia  regularne niż oryginalne rozwiązanie
  16. 16. Analizator leksykalny ANTLRPCTTSDla leniwychAnalizator LL(*)Przejrzysty kodGeneracja kodu Java,c#,Python,C++
  17. 17. Tryby pracy ANTLRAnalizator leksykalnyTworzenie ASTWalker ASTGenerowanie plików graphvizPrzetwarzanie ASTJęzyk template
  18. 18. Przetwarzanie drzew ASTKompilator c kiedyś: Źródło w C C z rozwiniętymi makrami Asembler Plik .o + linkowanieKompilator C teraz: Kolejne modyfikacje drzew AST
  19. 19. Przepływ w parserze ANTLR
  20. 20. Język dziedzinowy ­ DSLGraphviz ­ DOTYaccSQLHTMLVHDL
  21. 21. Edytor ANTLRWorks
  22. 22. Gramatyka CSV w ANTLRgrammar csv;options {    language=Python; }file : record (NEWLINE record)* EOF ;record : (quoted_field | unquoted_field) (COMMA (quoted_field | unquoted_field))* ;quoted_field : DQUOTE ( CHAR | COMMA | DQUOTE DQUOTE | NEWLINE)*  DQUOTE ;unquoted_field : CHAR* ;CHAR : u0000 .. u0009 | u000b .. u000c | u000e .. u0021 | u0023 ..  u002b     | u002d .. uffff ;COMMA : u002c ;DQUOTE : u0022 ;NEWLINE : u000d? u000a | u000d ;
  23. 23. Zrozumiały kod (Java)case CHAR:                    {  alt5=1;                     }                    break;                case COMMA:                    {   alt5=2;                     }                    break;                case NEWLINE:                    {  alt5=4;                    }                    break;
  24. 24. Wywołanie funkcji – jak w  ręcznych parserachif alt2 == 1:                 # csv.g:26:8: quoted_field                    pass                    self._state.following.append(self.FOLLOW_quoted_field_in_record57)                    self.quoted_field()                    self._state.following.pop()
  25. 25. Innowacja wg KalamaKto to jest Abdul Kalam?Open SourcePrace nad językiemTechnologie satelitarne
  26. 26. Pytania?

×