<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/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="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/feed.php">
        <title>DokuWiki - prekl</title>
        <description></description>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/</link>
        <image rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/lib/exe/fetch.php?media=wiki:dokuwiki.svg" />
       <dc:date>2026-05-20T13:25:17+00:00</dc:date>
        <items>
            <rdf:Seq>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c1&amp;rev=1742133448&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c2&amp;rev=1742133474&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3_comp&amp;rev=1741956207&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3_python&amp;rev=1741956286&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3&amp;rev=1742133493&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c4&amp;rev=1741956356&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:choose&amp;rev=1588779637&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cindex&amp;rev=1693727804&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_comp&amp;rev=1741956489&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_grammar&amp;rev=1741956438&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_qt&amp;rev=1741956526&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:dots&amp;rev=1713277996&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:expr&amp;rev=1741023471&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_html&amp;rev=1741954508&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_lout&amp;rev=1742133555&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_nullable&amp;rev=1742133618&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_parser&amp;rev=1678378873&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_symbols&amp;rev=1741955691&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_view&amp;rev=1742133665&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram&amp;rev=1588255677&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:lexer&amp;rev=1742133695&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:mini_parser&amp;rev=1742133718&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:mini_table&amp;rev=1742133740&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:parser_tree&amp;rev=1742133773&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:parser&amp;rev=1741955584&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:pokus&amp;rev=1646065391&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:prekl&amp;rev=1776784457&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:product&amp;rev=1588780073&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:select&amp;rev=1588779759&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:stat&amp;rev=1677773886&amp;do=diff"/>
                <rdf:li rdf:resource="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:syntax_tree&amp;rev=1588589580&amp;do=diff"/>
            </rdf:Seq>
        </items>
    </channel>
    <image rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/lib/exe/fetch.php?media=wiki:dokuwiki.svg">
        <title>DokuWiki</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/</link>
        <url>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/lib/exe/fetch.php?media=wiki:dokuwiki.svg</url>
    </image>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c1&amp;rev=1742133448&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T13:57:28+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>c1</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c1&amp;rev=1742133448&amp;do=diff</link>
        <description>C1 - tutorial/cecko.g

Jednoduchá gramatika pro výrazy a příkazy používaná v kapitole “Strojově generované syntaktické analyzátory”

cecko.g


while_stat :  &quot;while&quot; &quot;(&quot; expr &quot;)&quot; stat   ;

if_stat    :  &quot;if&quot; &quot;(&quot; expr &quot;)&quot; stat ( &quot;else&quot; stat  )?   ;

compound_stat : &quot;{&quot; ( stat )* &quot;}&quot; ;

simple_stat :  expr &quot;;&quot; ;

empty_stat :  &quot;;&quot; ;

stat : while_stat | if_stat | compound_stat | simple_stat | empty_stat ;


simple_expr : identifier | number  | &quot;(&quot; expr &quot;)&quot; ;

mult_expr :  simple_expr ( (&quot;*&quot;|&quot;/&quot;) si…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c2&amp;rev=1742133474&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T13:57:54+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>c2</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c2&amp;rev=1742133474&amp;do=diff</link>
        <description>C2 - tutorial/cecko2.g

Jednoduchá gramatika pro výrazy a příkazy používaná v kapitole “Objektově orientované syntaktické stromy”.
cecko2.g


while_stat &lt; TWhileStat: TStat &gt; :
   &quot;while&quot;
   &quot;(&quot; cond:expr &quot;)&quot;
   code:inner_stat ;

if_stat &lt; TIfStat: TStat &gt;  :
   &quot;if&quot;
   &quot;(&quot; cond:expr &quot;)&quot;
   then_code:inner_stat
   (
      &lt;new_line&gt;
      &quot;else&quot;
      else_code:inner_stat
   )?   ;

compound_stat &lt; TCompoundStat: TStat &gt; :
   &quot;{&quot;
    &lt;indent&gt;
    (
       &lt;new_line&gt;
       &lt;add&gt; stat
    )*
   …</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3_comp&amp;rev=1741956207&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:43:27+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>c3_comp</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3_comp&amp;rev=1741956207&amp;do=diff</link>
        <description>C3 - zpracování deklarací - sémantická analýza

cecko3_compiler.py




from __future__ import print_function
from cecko3_parser import *

class Compiler (Parser) :

   def __init__ (self) :
       super (Compiler, self).__init__ ()
       self.display = [ ]

   # initialization

   def on_start_program (self, decl_list) :
       decl_list.item_name = &quot;&quot;
       decl_list.item_qual = &quot;&quot;
       decl_list.item_dict = { }
       decl_list.item_list = [ ]
       self.display.append (decl_list)

   # s…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3_python&amp;rev=1741956286&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:44:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>c3_python</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3_python&amp;rev=1741956286&amp;do=diff</link>
        <description>C3 - převod do jazyka Python

Náznak převodu zdrojového textu z C++ do Pythonu
cecko3_to_python.py

Vstup

c3win.cc


// #include &quot;QApplication&quot;
// #include &quot;QWidget&quot;
// #include &quot;QPushButton&quot;
// #include &quot;QMainWindow&quot;
// #include &quot;QTreeWidget&quot;
// #include &quot;QTreeWidgetItem&quot;

int main () /* (int argc, char * * argv) */
{
     dcl QApplication * appl = new QApplication (sys.argv); /* (argc, argc) */

     if (false)
     {
        dcl QWidget * window = new QWidget ();
        window-&gt;resize (320,…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3&amp;rev=1742133493&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T13:58:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>c3</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c3&amp;rev=1742133493&amp;do=diff</link>
        <description>C3 - tutorial/cecko3.g

Gramatika zjednodušeného C++ používaná v kapitole “Objektově orientované syntaktické stromy”
cecko3.g

Abychom odlišili lokální deklaraci od jednoduchého příkazu obsahujícího výraz a středník, 

musíme si jazyk upravit a před deklaraci přidat klíčové slovo</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c4&amp;rev=1741956356&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:45:56+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>c4</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:c4&amp;rev=1741956356&amp;do=diff</link>
        <description>C4 - generování instrukcí

Syntaktické predikáty

Gramatika využívá syntaktické predikáty
cecko4.g


   [ predicate ] =&gt; grammar_expression


Pokud nalezneme dva identifikátory následované = nebo ; zpracujeme deklaraci


stat &lt; select CmmStat &gt; :
  [ identifier identifier  ( '=' | ';' ) ] =&gt; decl_stat |
  while_stat |
  if_stat |
  for_stat |
  return_stat |
  compound_stat |
  simple_stat |
  empty_stat ;</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:choose&amp;rev=1588779637&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-05-06T15:40:37+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>choose</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:choose&amp;rev=1588779637&amp;do=diff</link>
        <description>Choose - opožděné rozhodnutí

Při zpracování aritmetických výrazů není vhodné vytvářet novou instanci pro každé zpracovávané pravidlo


simple_expr :          identifier | number  | &quot;(&quot; expr &quot;)&quot; ;
multiplicative_expr :  simple_expr ( (&quot;*&quot;|&quot;/&quot;) simple_expr )* ;
additive_expr :        multiplicative_expr ( (&quot;+&quot;|&quot;-&quot;) multiplicative_expr )* ;
expr :                 additive_expr ( &quot;=&quot; expr )? ;</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cindex&amp;rev=1693727804&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-09-03T07:56:44+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cindex</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cindex&amp;rev=1693727804&amp;do=diff</link>
        <description>&lt;http://gitlab.fjfi.cvut.cz/culikzde/prekl-2022/-/tree/main/clang-tree&gt;

cindex


from clang.cindex import Index, Cursor

def print_branch (cursor, level = 0) :
    txt = level * &quot;   &quot; + cursor.kind.name + &quot;: &quot; + cursor.spelling
    print (txt)

    for item in cursor.get_children () :
        print_branch (item, level + 1)

index = Index.create ()
tu = index.parse (&quot;example.cc&quot;)

for item in tu.diagnostics :
    print (&quot;MESSAGE:&quot;, str (item))

cursor = tu.cursor
print_branch (cursor)</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_comp&amp;rev=1741956489&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:48:09+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cmm_comp</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_comp&amp;rev=1741956489&amp;do=diff</link>
        <description>C-- zpracování deklarací

cmm_comp.py



# cmm_comp.py

from __future__ import print_function

import os, copy
import inspect

from cmm_parser import *
from cmm_product import *

from input import quoteString
from util import findColor

from code import *
# from cmm_code import *

from grammar import Grammar
from toparser  import ToParser
from toproduct import ToProduct

# --------------------------------------------------------------------------

class NoQuote (object) :
   def __init__ (self, …</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_grammar&amp;rev=1741956438&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:47:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cmm_grammar</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_grammar&amp;rev=1741956438&amp;do=diff</link>
        <description>C--

Sémantické predikáty


    { function_name }?    grammar_expression



flexible_stat &lt;choose CmmStat&gt;:
   expr
   (
      { is_expression }? simple_stat
   |
      { is_expression }? block_stat
   |
      continue_simple_declaration
   ) ;
 
simple_stat &lt;CmmSimpleStat:CmmStat, mode=simpleStat&gt;:
   &lt;store inner_expr:CmmExpr&gt;
   ';'
   &lt;execute on_simple_statement&gt; ;
 
block_stat &lt;CmmBlockStat:CmmStat, mode=blockStat&gt;:
   &lt;store inner_expr:CmmExpr&gt;
   &lt;new_line&gt;
   body:compound_stat
   &lt;exec…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_qt&amp;rev=1741956526&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:48:46+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>cmm_qt</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:cmm_qt&amp;rev=1741956526&amp;do=diff</link>
        <description>C-- převod do jazyka Python

Vstup

component.t


class Example : public QMainWindow
{
   // this-&gt;setWindowTitle (&quot;Example&quot;);
   QMenuBar * mainMenu
   {
       QMenu * file
       {
           title = &quot;&amp;File&quot;;
           QAction * quit
           {
               text = &quot;&amp;Quit&quot;;
               shortcut = &quot;Ctrl+Q&quot;;
               triggered () { this-&gt;close (); }
           }
       }
   }
   QToolBar * toolbar
   {
       QToolButton * tool_button
       {
           text = &quot;first&quot;;
           …</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:dots&amp;rev=1713277996&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2024-04-16T14:33:16+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>dots</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:dots&amp;rev=1713277996&amp;do=diff</link>
        <description>#include &lt;iostream&gt;
using namespace std;

void put (string s)
{
    cout &lt;&lt; &quot;retezec &quot; &lt;&lt; s &lt;&lt; endl;
}

void put (int p)
{
    cout &lt;&lt; &quot;cele cislo &quot; &lt;&lt; p &lt;&lt; endl;
}

void put (double p)
{
    cout &lt;&lt; &quot;cislo &quot; &lt;&lt; p &lt;&lt; endl;
}

void put (char c)
{
    cout &lt;&lt; &quot;pismeno &quot; &lt;&lt; c &lt;&lt; endl;
}

void print ()
{
}

template &lt;class T, class ... S&gt;
void print (T head, S ... other)
{
    put (head);
    print (other ...);
}

void f ()
{
    print (1, 1.2, &quot;abc&quot;, 'c');
}</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:expr&amp;rev=1741023471&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-03T17:37:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>expr</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:expr&amp;rev=1741023471&amp;do=diff</link>
        <description>Syntaktická analýza výrazů

Soubory lex.h, lex.cc, decl.h a expr.cc obsahují parser zjednodušeného jazyka C. 

&lt;http://kmlinux.fjfi.cvut.cz/~culikzde/prekl/Comp11.tgz&gt; 

nebo &lt;http://gitlab.fjfi.cvut.cz/culikzde/c-parser&gt;

Budeme zpracovávat výrazy, ktere mohou obsahovat identifikatory, cela cisla, vyrazy v zavorkach, plus a krat :


  simple : identifier | number | '(' expr ')' ;
  mul    : simple ( '*' simple )* ;
  expr   : mul    ( ( '+' | '-' ) mul )* ;</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_html&amp;rev=1741954508&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:15:08+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gram_html</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_html&amp;rev=1741954508&amp;do=diff</link>
        <description>Zobrazení pomocí HTML

&lt;http://gitlab.fjfi.cvut.cz/culikzde/simple-view/-/blob/master/tutorial/plain-grammar/plain_tohtml.py&gt;


while_stat :  &quot;while&quot; &quot;(&quot; expr &quot;)&quot; stat   ;

if_stat    :  &quot;if&quot; &quot;(&quot; expr &quot;)&quot; stat ( &quot;else&quot; stat  )?   ;

compound_stat : &quot;{&quot; ( stat )* &quot;}&quot; ;

simple_stat :  expr &quot;;&quot; ;

empty_stat :  &quot;;&quot; ;

stat : while_stat | if_stat | compound_stat | simple_stat | empty_stat ;


simple_expr : identifier | number  | &quot;(&quot; expr &quot;)&quot; ;

mult_expr :  simple_expr ( (&quot;*&quot;|&quot;/&quot;) simple_expr )* ;
…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_lout&amp;rev=1742133555&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T13:59:15+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gram_lout</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_lout&amp;rev=1742133555&amp;do=diff</link>
        <description>Zobrazení programem LOUT

Program Lout

&lt;http://jeffreykingston.id.au/lout/&gt; 

Manuál, kapitola 9.8. Syntaktické diagramy

Mějme na vstupu gramatické pravidlo


   if_stat  :  &quot;if&quot; &quot;(&quot; expr &quot;)&quot; stat ( &quot;else&quot; stat  )? ;


Program plain_tolout.py &lt;http://gitlab.fjfi.cvut.cz/culikzde/simple-view/-/blob/master/tutorial/plain-grammar/plain_tolout.py&gt; 

prochází gramatiku uloženou ve stromu a</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_nullable&amp;rev=1742133618&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T14:00:18+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gram_nullable</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_nullable&amp;rev=1742133618&amp;do=diff</link>
        <description>Vypouštějící pravidla

Nejprve nalezneme Vypouštějící pravidla, tedy pravidla, která lze přepsat na prázdnou posloupnost.

Zde je odkaz na program hledající vypouštějící pravidla (a který si zde popíšeme) 

&lt;https://gitlab.fjfi.cvut.cz/culikzde/simple-view&gt;

Pro připomenutí načtení popisu gramatiky a uložení do stromové struktury,</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_parser&amp;rev=1678378873&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-03-09T16:21:13+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gram_parser</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_parser&amp;rev=1678378873&amp;do=diff</link>
        <description>Parser pro popis gramatiky a uložení gramatiky do stromu

&lt;http://github.com/zdenekzc/plain-grammar/blob/main/plain_grammar.py&gt;

Na vstupu bude nějaká gramatika, například:


while_stat :  &quot;while&quot; &quot;(&quot; expr &quot;)&quot; stat   ;

if_stat    :  &quot;if&quot; &quot;(&quot; expr &quot;)&quot; stat ( &quot;else&quot; stat  )?   ;

compound_stat : &quot;{&quot; ( stat )* &quot;}&quot; ;

simple_stat :  expr &quot;;&quot; ;

empty_stat :  &quot;;&quot; ;

stat : while_stat | if_stat | compound_stat | simple_stat | empty_stat ;</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_symbols&amp;rev=1741955691&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:34:51+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gram_symbols</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_symbols&amp;rev=1741955691&amp;do=diff</link>
        <description>Množiny symbolů, kterými začínají jednotlivá syntaktická pravidla

Když máme naleznena vypouštějící pravidla, můžeme hledat množiny terminálních symbolů, kterými začínají jednotlivá syntaktická pravidla. 

Tyto množiny vyuzijeme při rozhodování, kterou alternativou má pokračovat parser.</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_view&amp;rev=1742133665&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T14:01:05+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gram_view</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram_view&amp;rev=1742133665&amp;do=diff</link>
        <description>Zobrazení množiny symbolů

&lt;http://gitlab.fjfi.cvut.cz/culikzde/simple-view/-/blob/master/tutorial/plain-grammar/plain_view.py&gt;</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram&amp;rev=1588255677&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-04-30T14:07:57+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>gram</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:gram&amp;rev=1588255677&amp;do=diff</link>
        <description>Gramatika popisující gramatiku

Zápis gramatiky použitý v předchozí kapitole můžeme považovat za svého druhu programovací jazyk. 

K tomuto jazyku můžeme napsat gramatiku:

Gramatika

Celá gramatika je poslouplností pravidel


   grammar : ( rule )* ;</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:lexer&amp;rev=1742133695&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T14:01:35+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>lexer</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:lexer&amp;rev=1742133695&amp;do=diff</link>
        <description>Lexikální analyzátor

Program (v jazyce Python) čtoucí jednotlivé znaky zdrojového textu napsaného v jazyce C 

a vytvářející posloupnost lexikálních symbolů.

Lexikálních symboly jsou identifikátory, celá čísla, desetinná čísla, řetězcové konstanty v jednoduchých nebo dvojitých uvozovkách a oddělovače.</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:mini_parser&amp;rev=1742133718&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T14:01:58+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>mini_parser</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:mini_parser&amp;rev=1742133718&amp;do=diff</link>
        <description>Příklad syntaktického analyzátoru

Příklad ručně psaného syntaktického analyzátoru, který rozpoznává jednoduché příkazy. 

Na místě výrazů dovoluje pouze identifikátory. 

Funkce openBranch, closeBranch a put zobrazují výsledky ve stromu.</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:mini_table&amp;rev=1742133740&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T14:02:20+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>mini_table</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:mini_table&amp;rev=1742133740&amp;do=diff</link>
        <description>Příklad parseru pro popis databázových tabulek

Příklad popisu tabulky 


table
{
   name = &quot;person&quot;;
   column { name = &quot;first_name&quot;; type = &quot;string&quot;; }
   column { name = &quot;last_name&quot;; type = &quot;string&quot;; }
}


Náš parser bude ze vstupu číst popis tabulky.</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:parser_tree&amp;rev=1742133773&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-16T14:02:53+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>parser_tree</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:parser_tree&amp;rev=1742133773&amp;do=diff</link>
        <description>Syntaktický analyzátor vytvářející syntaktický strom

Vstupní gramatika s atributy

Rozšíříme vstupní gramatiku o atributy popisující ukládání informací do syntaktického stromy.

Před jménem neterminálu může být uvedeno jméno proměnné, do které bude uložen příslušný syntaktický podstrom.</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:parser&amp;rev=1741955584&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2025-03-14T12:33:04+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>parser</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:parser&amp;rev=1741955584&amp;do=diff</link>
        <description>Syntaktický analyzátor (parser) rozpoznávající zadaný jazyk

Programy pro generování syntaktických analyzátorů čtou ze vstupu popis gramatiky a vytvářejí zdrojový text parseru.

Začneme syntaktických analyzátory, které pouze rozpoznávají daný jazyk.</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:pokus&amp;rev=1646065391&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2022-02-28T16:23:11+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>pokus</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:pokus&amp;rev=1646065391&amp;do=diff</link>
        <description>def readIdent (self, lexer) :
        result = lexer.tokenText
        if not lexer.isIdentifier () :
           lexer.error (&quot;Identifier expected&quot;)
        lexer.nextToken ()
        return result

    def parseItem (self, lexer) :
        if lexer.isIdentifier () :
           result = lexer.tokenText
           lexer.nextToken ()
        elif lexer.isNumber () :
           result = lexer.tokenText
           lexer.nextToken ()
        elif lexer.isSeparator ('(') :
           lexer.checkSepara…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:prekl&amp;rev=1776784457&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2026-04-21T15:14:17+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>prekl</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:prekl&amp;rev=1776784457&amp;do=diff</link>
        <description>Literatura

Niklaus Wirth: Compiler Construction  

&lt;http://inf.ethz.ch/personal/wirth/CompilerConstruction/CompilerConstruction1.pdf&gt; 

&lt;http://inf.ethz.ch/personal/wirth/CompilerConstruction/CompilerConstruction2.pdf&gt; 


Steven Pemberton and Martin Daniels: Pascal Implementation: The P4 Compiler and Interpreter  

&lt;http://homepages.cwi.nl/~steven/pascal&gt;

Andrew W. Appel: Modern Compiler Implementation in C  

&lt;http://www.cs.princeton.edu/~appel/modern/c/&gt;

Příklady

Příklady v Pythonu 

&lt;http…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:product&amp;rev=1588780073&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-05-06T15:47:53+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>product</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:product&amp;rev=1588780073&amp;do=diff</link>
        <description>Tisk programu uloženého v syntaktickém stromu

Zdrojový text uložený v syntaktickém stromu vytiskne třída Product.

Tuto třídu vytvoří generátor podobně jako třídu Parser. 

Nečte se zdrojový text ze vstupu, ale data se získávají z uzl; syntaktického stromu.</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:select&amp;rev=1588779759&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-05-06T15:42:39+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>select</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:select&amp;rev=1588779759&amp;do=diff</link>
        <description>Selectn - dědičnost tříd

Klíčové slovo select před typem pravidla.

Pravidlo je tvořeno výběrem z několika jednoduchých alternativ, 

které mají výsledný typ odvozený z typu zmíněného pravidla.


   stat &lt; select TStat &gt; :
      while_stat | if_stat | compound_stat | simple_stat | empty_stat ;</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:stat&amp;rev=1677773886&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2023-03-02T16:18:06+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>stat</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:stat&amp;rev=1677773886&amp;do=diff</link>
        <description>Gramatika popisující příkazy zjednodušeného jazyka C


while_stat :  &quot;while&quot; &quot;(&quot; expr &quot;)&quot; stat   ;

if_stat    :  &quot;if&quot; &quot;(&quot; expr &quot;)&quot; stat ( &quot;elif&quot; &quot;(&quot; expr&quot;)&quot; stat  )* ( &quot;else&quot; stat  )?   ;

compound_stat : &quot;{&quot; ( stat )* &quot;}&quot; ;

simple_stat :  expr &quot;;&quot; ;

empty_stat :  &quot;;&quot; ;

stat : while_stat | if_stat | compound_stat | simple_stat | empty_stat ;


simple_expr : identifier | number  | &quot;(&quot; expr &quot;)&quot; ;

mult_expr :  simple_expr ( (&quot;*&quot;|&quot;/&quot;) simple_expr )* ;

add_expr :  mult_expr ( (&quot;+&quot;|&quot;-&quot;) mult_exp…</description>
    </item>
    <item rdf:about="https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:syntax_tree&amp;rev=1588589580&amp;do=diff">
        <dc:format>text/html</dc:format>
        <dc:date>2020-05-04T10:53:00+00:00</dc:date>
        <dc:creator>Anonymous (anonymous@undisclosed.example.com)</dc:creator>
        <title>syntax_tree</title>
        <link>https://kmlinux.fjfi.cvut.cz/~culikzde/wiki/doku.php?id=prekl:syntax_tree&amp;rev=1588589580&amp;do=diff</link>
        <description>Syntaktické stromy

&lt;http://cs.wikipedia.org/wiki/Syntaktick%C3%BD_strom&gt;</description>
    </item>
</rdf:RDF>
