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