Program drawing logical systems which are described in language created by me

This program was written by me on VI term of studies on the subject "Formal languages and compilators". Project was written in Java in Netbeans environment.

    Here you can find jar file with program. GUI in that program is written in polish. Here is translation of phrases used in program:

    "Przykładowy kod (0 węzłów)" - example code without nodes
    "Przykładowy kod (1 węzeł)" - example code with one node
    "Przykładowy kod (2 węzły)" - example code with two nodes
    "Kod dla kompilatora" - source code
    "Wynik kompilatora" - compilator output
    "Kompiluj" - compile

  1. Introduction

  2. The aim of the project was to write a program, which would draw logical system described in language created by the author of the whole program. Language had to handle defined elements such as OR, AND, NOT, XOR, input-output and connections between them. What is more, language had to have an extension to create nodes (own components, created from defined elements, e. g. multiplexer). Application had to be written in Java and should present its output in a window. Lexical and syntax analysis had to be performed by own written classes (compatible with structure of LL(1) compilators).

  3. Definition of context-free grammar

  4. Ʃ = {'T_OR', 'T_AND', 'T_NOT', 'T_XOR', 'T_NUMERURZADZENIA', 'T_LICZBAWEJSC', 'T_NUMERWEJSCIA', 'T_KONIECPROGRAMU', 'T_WEZEL', 'T_KONIECWEZLA', 'T_WEJSCIE', 'T_WYJSCIE', 'T_KONIECWEJSC', 'T_NUMERWEJSCIAZEWNETRZNEGO', 'T_TWORZWEZEL'}

    Γ = {'URZADZENIE', 'NAZWAURZADZENIA', 'WEJSCIA', 'WEZEL', 'NOWYWEZEL', 'CIAŁO'}

    S = 'CIALO'

    P = {
    CIALO → URZADZENIE CIALO
    CIALO → NOWYWEZEL CIALO
    CIALO → T_KONIECPROGRAMU
    URZADZENIE → NAZWAURZADZENIA T_NUMERURZADZENIA
    T_LICZBAWEJSC WEJSCIA
    URZADZENIE → T_WEJSCIE T_NUMERURZADZENIA
    URZADZENIE → T_WYJSCIE T_NUMERURZADZENIA T_NUMERWEJSCIA
    NAZWAURZADZENIA → T_OR
    NAZWAURZADZENIA → T_AND
    NAZWAURZADZENIA → T_NOT
    NAZWAURZADZENIA → T_XOR
    NAZWAURZADZENIA → T_WEZEL
    NOWYWEZEL → T_TWORZWEZEL WEZEL
    WEZEL → URZADZENIE WEZEL
    WEZEL → T_KONIECWEZLA T_NUMERURZADZENIA
    WEJSCIA → T_NUMERWEJSCIA WEJSCIA
    WEJSCIA → T_NUMERWEJSCIAZEWNETRZNEGO WEJSCIA
    WEJSCIA → T_KONIECWEJSC
    }


    lookahead1(CIALO) = {'T_OR'}
    lookahead1(CIALO) = {'T_AND'}
    lookahead1(CIALO) = {'T_NOT'}
    lookahead1(CIALO) = {'T_XOR'}
    lookahead1(CIALO) = {'T_WEZEL'}
    lookahead1(CIALO) = {'T_WEJSCIE'}
    lookahead1(CIALO) = {'T_WYJSCIE'}
    lookahead1(CIALO) = {'T_TWORZWEZEL'}
    lookahead1(CIALO) = {'T_KONIECPROGRAMU'}
    Disjoint sets
    lookahead1(URZADZENIE) = {'T_OR'}
    lookahead1(URZADZENIE) = {'T_AND'}
    lookahead1(URZADZENIE) = {'T_NOT'}
    lookahead1(URZADZENIE) = {'T_XOR'}
    lookahead1(URZADZENIE) = {'T_WEZEL'}
    lookahead1(URZADZENIE) = {'T_WEJSCIE'}
    lookahead1(URZADZENIE) = {'T_WYJSCIE'}
    Disjoint sets
    lookahead1(NAZWAURZADZENIA) = {'T_OR'}
    lookahead1(NAZWAURZADZENIA) = {'T_AND'}
    lookahead1(NAZWAURZADZENIA) = {'T_NOT'}
    lookahead1(NAZWAURZADZENIA) = {'T_XOR'}
    lookahead1(NAZWAURZADZENIA) = {'T_WEZEL'}
    Disjoint sets
    lookahead1(WEZEL) = {'T_OR'}
    lookahead1(WEZEL) = {'T_AND'}
    lookahead1(WEZEL) = {'T_NOT'}
    lookahead1(WEZEL) = {'T_XOR'}
    lookahead1(WEZEL) = {'T_WEZEL'}
    lookahead1(WEZEL) = {'T_TWORZWEZEL'}
    lookahead1(WEZEL) = {'T_KON'}
    Disjoint sets
    lookahead1(WEJSCIA) = {'T_NUMERWEJSCIA'}
    lookahead1(WEJSCIA) = {'T_KONIECWEJSC'}
    lookahead1(WEJSCIA) = {'T_NUMERWEJSCIAZEWNETRZNEGO'}
    Disjoint sets
    1. Regular expressions describing language

    2. T_OR or
      T_AND and
      T_NOT not
      T_NUMERURZADZENIA u[0-9]{1,3}
      T_LICZBAWEJSC we[0-9]{1,3}
      T_NUMERWEJSCIA [0-9]{1,3}
      T_WEZEL wezel
      T_KONIECWEZLA \\}
      T_WEJSCIE wejscie
      T_WYJSCIE wyjscie
      T_KONIECWEJSC ;
      T_NUMERWEJSCIAZEWNETRZNEGO Z[0-9]{1,3}
      T_TWORZWEZEL tworzwezel_\\{
      T_KONIECPROGRAMU EOF
  5. Screenshots:


Start view After successful compilation syntax tree is published (in lower textarea) Presentation of example of logical system with two nodes Example of lexical error found by program (invalid lexeme) Syntax error found by program (in line: or and u9 we2 4 5 ; - double declaration of gate)




Made by Krzysztof Ruszczyński (on the basis of own CMS system)
Graphics provided by jcd.pl