/media/sda-magnetic/david/Dok-15-2023-11-27/Dokumente-15-appended-2023-10-11/append-temporarly/beitragx.txt


Beitrag2:

https://www.davidvajda.de/viewtopic.php?t=79&start=1

Ich wurde gerade auf Facebook gesperrt - für 24h, weil ich mich nicht an die Gemeinschaftsstandards halte. Warum? Weil ich das hier poste. Keine Sorge, ich bin nicht dauerhaft auf Facebook gesperrt, 24h. Und nicht richtig gesperrt, nur nichts posten, wegen dem Spam. Ich habe die Funktion zu oft genutzt. Zu schnell etwas zu posten. Oder sie haben den Zusammenhang, zwischen fpga und aussagenlogik nicht verstanden. Darauf will ich ja hinaus. Für Info brauchen sie diese zwei Dinge. 

Beitrag 3:


OK, ich habe das Programm verbessert. Dadurch, dass ich zunächst auf ein



IF-ELSE

ausserhalb der Schachtelung, weiteren Code folgen lassen konnte und das zu 3 Nachfolgern geführt hätte, war ich auf die Idee gekommen, jedes IF bedienen zu lassen. Das war schon ein kleiner Denkfehler. Ich bin ja jetzt aber dazu durchgedrungen. Dass auf ein



IF-ELSE

kein Block folgen kann. Das heisst, die sind Geschachtelt und das



GOTO

steht immer am Ende. Jetzt macht es keinen Sinn, jedes



IF

zu bedienen. weil, da sie nur geschachtelt auftreten, nicht hintereinander, macht es jetzt keinen Sinn mehr. Jetzt kann das



GOTO

überall hinzeigen. Es ist egal wohin, weil, es wird so oder so - jedes



IF

bedient. Weil die nur geschachtelt stehen können. Jetzt hinter



GOTO

einfach ein Zufallswert, der die Anzahl an Zeilen nicht überschreitet. Hier der Code



/*
Grammatik

Sporadische Sammlung
- Zuweisung
- Addition
if 
- Vergleiche
    - <=, >=, ==, !=, <, >
- Subtraktion
- Shift
    << >>
- Null setzen
    
Operationen
    - Mathematische: 
        + (Addition)
        - (Subtraktion) 
    - Verschieben
        >> Rechtsshift
        << Linksshift
    - 0 setzen 
Vergleiche
    - <=, >=, ==, !=, <, >
Zuweisung
    <-
    
Zeichensatz: Variablen, Register, Operatoren und Konstante Werte

Operand ::= <Register> | <Const>
CMP ::= <= | >= | == | != | < | >
MathOperator ::= + | - | << | >>
BitBooleanOperator ::= '&&' | '||' | '!'
Operator ::= <MathOperator> | <BitBooleanOperator>
Expr ::= <Register> <- <Operand> | <Operand> <Operator> <Operand> | 0
Condition ::= IF <Register> <CMP> <Operand> THEN <Program> FI

Programm ::= <Expr> | <Condition> <Program>
*/
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>

#define     MAX_STATES                              1024
#define     MAX_EXPR_CONST_VAL                      128
#define     MAX_EXPR_REG_VAL                        4
#define     FIRST_REG_VAL                           'a'
#define     MAX_EXPR_OPERATOR_VAL                   6
#define     MAX_EXPR_CMP_OPERATOR_VAL               5
#define     RAND_OPERAND_CONST_REGISTER             2
#define     RAND_EXPR_OPERATOR_OPERAND_FOLLOW       2
#define     RAND_COND_TRUE_FALSE_DESICION           2
#define     RAND_PROGRAM_COND_EXPR_DESICION         4
#define     IF_ELSE_DEPTH                           3
#define     STD_PROGRAM_N                           6   
#define     STD_PROGRAM2_N                          4
#define     RAND_COND_END_OR_GO_ON                  3

FILE *fout = NULL;

int line = 0;
int nline = 1;
int maxstate = 0;

char *opstr [] = {"+", "-", "<<", ">>", "&&", "||", "!"};
char *cmpstr [] = {"<=", ">=", "==", "!=", "<", ">"};

void operator (void);
void cmp (void);
void operand (void);
void expr (int);
void condition (int, int, int, int);
void condition2 (int, int, int, int);
void program (int, int, int, int);
void program2 (int, int, int, int);
void registr (void);
void cnst (void);
void operator (void);
void printemptyspace (int);

void printemptyspace (int n) {
    int i;
    
    for (i = 0;  i < n*2;  i++)
        fprintf (fout, " ");
}


void registr (void) {
    fprintf (fout, " %c ", (rand () % MAX_EXPR_REG_VAL) + FIRST_REG_VAL);
return;
}

void cnst (void) {
    fprintf (fout, " %i ", rand () % MAX_EXPR_CONST_VAL);
return;
}

void operator (void) {
    fprintf (fout, " %s ", opstr [rand () % MAX_EXPR_OPERATOR_VAL]);
return;
}

void cmp (void) {
    fprintf (fout, " %s ", cmpstr [rand () % MAX_EXPR_CMP_OPERATOR_VAL]);
return;
}

void operand (void) {
    if ((rand () % RAND_OPERAND_CONST_REGISTER) == 0)
        cnst ();
    else
        registr ();
return;
}

void expr (int emptyspacen) {
    fprintf (fout, "%4i:", line++);
    printemptyspace (emptyspacen);
    registr ();
    fprintf (fout, " <- ");
    operand ();
    if ((rand () % RAND_EXPR_OPERATOR_OPERAND_FOLLOW) == 0) {
        operator ();
        operand ();
    }
    fprintf (fout, "\n");
return;
}

void condition (int n, int i, int emptyspacen, int depth) {
    int goto1or2;
      
    fprintf (fout, "%4i:", line++);
    printemptyspace (emptyspacen);
    fprintf (fout, " IF ", line);
    registr ();
    cmp ();
    operand ();
    fprintf (fout, " THEN \n", line);
    program (n, i+1, emptyspacen+1, depth+1);
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen+1);
    fprintf (fout, "      %4c\n", ' ');
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen); 
    fprintf (fout, " ELSE \n", line);
    program (n, i+1, emptyspacen+1, depth+1);
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen+1);    
    fprintf (fout, "      %4c\n", ' ');
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen); 
    fprintf (fout, " FI \n", ' ');
return;
}


void condition2 (int n, int i, int emptyspacen, int depth) {
    int goto1or2;
    
    
    fprintf (fout, "%4i:", line++);
    printemptyspace (emptyspacen);
    fprintf (fout, " IF ", line);
    registr ();
    cmp ();
    operand ();
    fprintf (fout, " THEN \n", line);
    program2 (n, i+1, emptyspacen+1, depth+1);
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen+1);
    fprintf (fout, " GOTO %i\n", rand () % nline);
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen); 
    fprintf (fout, " ELSE \n", line);
    program2 (n, i+1, emptyspacen+1, depth+1);
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen+1);    
    fprintf (fout, " GOTO %i\n", rand () % nline);
    fprintf (fout, "%4c ", ' ');
    printemptyspace (emptyspacen); 
    fprintf (fout, " FI \n", ' ');
return;
}


void program2 (int n, int i, int emptyspacen, int depth) {
    if (((rand () % RAND_PROGRAM_COND_EXPR_DESICION) == 0)) 
        expr (emptyspacen);
    if (i < n) {
        program2 (n, i+1, emptyspacen, depth);
    }
return;
}

void program (int n, int i, int emptyspacen, int depth) {
    program2 (STD_PROGRAM2_N, 0, emptyspacen, depth);
    if ((rand () % RAND_COND_END_OR_GO_ON) == 0)
        condition2 (n, i+1, emptyspacen, depth+1);
    else if ((i < n) && (depth < IF_ELSE_DEPTH))
        condition (n, i+1, emptyspacen, depth+1);
    else {
        fprintf (fout, "%4c ", ' ');
        printemptyspace (emptyspacen);
        fprintf (fout, " GOTO %i\n", rand () % nline);
        return;
    }
}



int main (void) {
    time_t t;
    int j;
    srand (t = time(NULL));
    fout = stderr;
    program (STD_PROGRAM_N, 0, 0, 0);
    maxstate = line;
    srand (t);
    fout = stdout;
    nline = line;
    line = 0;
    program (STD_PROGRAM_N, 0, 0, 0);
return 0;
}

Der Fehler war nicht so schlimm, es ging nur darum, die übungen zu machen, natürlich war der Code aufgebläht.


Beitrag 3:

https://www.davidvajda.de/viewtopic.php?t=64&start=34

Und richtige Beispiele

   0: b  <-  c 
   1: a  <-  d 
   2: IF  a  <=  123  THEN 
   3:   b  <-  a 
   4:   c  <-  b  +  121 
   5:   IF  c  !=  c  THEN 
   6:     a  <-  72 
   7:     a  <-  12 
   8:     a  <-  b  &&  112 
   9:     IF  c  <  108  THEN 
  10:       a  <-  29 
            GOTO 7
          ELSE 
            GOTO 4
          FI 
                   
        ELSE 
          GOTO 8
                   
        FI 
                 
      ELSE 
  11:   c  <-  80  -  b 
  12:   IF  b  <=  c  THEN 
  13:     IF  c  >=  b  THEN 
            GOTO 9
          ELSE 
            GOTO 4
          FI 
                   
        ELSE 
  14:     b  <-  b  <<  81 
          GOTO 8
                   
        FI 
                 
      FI 




   0: IF  b  !=  88  THEN 
   1:   IF  d  ==  122  THEN 
   2:     a  <-  c 
   3:     a  <-  79  -  60 
          GOTO 9
                   
        ELSE 
   4:     a  <-  30 
   5:     b  <-  20 
   6:     a  <-  18  ||  93 
          GOTO 8
                   
        FI 
                 
      ELSE 
   7:   a  <-  97  <<  c 
   8:   b  <-  c  &&  65 
   9:   b  <-  121 
  10:   IF  d  <=  15  THEN 
  11:     a  <-  54  <<  109 
  12:     c  <-  11  >>  81 
          GOTO 0
        ELSE 
  13:     b  <-  b 
  14:     c  <-  3 
          GOTO 2
        FI 
                 
      FI