Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Humanista w twoim linuksie

683 views

Published on

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

Published in: Technology
  • Be the first to comment

  • Be the first to like this

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?

×