skip to main content

kiesler.at

Random Guide to whatever
updated by rck, 2004-10-10

Another case of trying out the swallow hack 0.2. This time, I'm shuffling some sections around. Enjoy!

0 < n < 100

Wie beginnt die Präsentation? Interessanter Weise mit dem Anfang. Wie bei einem Zwigespräch mit einer unbekannten Person: mit der Vorstellung.

Kennt man das Publikum schon gut, kann auch eine kurze Begrüßung ausreichen. Auf jeden Fall sollte man den Anfang aufschieben, bis man die volle Aufmerksamkeit des Publikums genießt. Ruhiges dastehen und der Aufbau von Augenkontakt reicht im Normalfall.

Inhaltliches

Vom Inhalt her gibt es bei der Einleitung verschiedene Spielarten. Die einen beginnen gerne mit einem passenden Zitat. Die nächsten zitieren auch, und zwar aus der Geschichte ("Um die 70er Jahre war die Zeit der Softwarekriese. Programme wurden immer komplexer und unwartbarer. Firmen schrieben rote Zahlen, die Softwareindustrie ging den Bach runter").

Die Pragmatiker wiederum skizzieren eine Situation ("Programme wurden immer komplexer") und dessen Lösung ("also hat man sie graphisch dargestellt"). Vielleicht auch mit weiteren, positiven Nebeneffekten ("dadurch konnten die Anwender gleich von Anfang an in die Programmerstellung mit einbezogen werden und bekamen Programme, die genau ihren Vorstellungen entsprachen"). Genau das wäre auch mein Ansatz.

100 < n < 200

1 /*                      scanner.lex
2                         (c) 2004 René C. Kiesler
3 
4                         please visit http://www.kiesler.at/
5                         for further informations & support.
6 */
7 
8                 
9                         #include <math.h>
10 
11                         int num_lines = 1;
12                         int last_open_sighting = -1;
13 
14 
15 KEYWORD                 func|where|end|if|then|else|not|hd|tl|islist|and
16 OPERATOR                \:|\;|\,|\=|\-|\+|\*|\<|\(|\)
17 LEXEM                   {KEYWORD}|{OPERATOR}
18 
19 HEXZAHL                 0x[0-9a-fA-F]+
20 DECZAHL                 [0-9]+
21 
22 IDENTIFIER              [a-zA-Z][0-9a-zA-Z]*
23 
24 WHITESPACE              [ \t]+
25 COMMENT_START           \(\*
26 COMMENT_END             \*\)
27 
28 NEWLINE                 \n
29 
30 ANYCHAR                 .
31 
32 
33 %x COMMENT
34 %%
35 
36 
37 {COMMENT_START}         {       BEGIN(COMMENT);
38                                 last_open_sighting = num_lines;
39                         }
40 <COMMENT>{COMMENT_END}  BEGIN(INITIAL);
41 <COMMENT><<EOF>>        {       fprintf(stderr,
42                                         "unmatched opening comment in line %d, %s\n",
43                                         last_open_sighting, "eof reached.");
44                                 exit(1);
45                         }
46 <COMMENT>\n             num_lines++;
47 <COMMENT>.              /* alles im Kommentar ignorieren */
48 
49 {WHITESPACE}            /* Whitespace, wird ignoriert */
50 {NEWLINE}               num_lines++;
51 
52 {LEXEM}                 printf("%s\n", yytext);
53 
54 {DECZAHL}               printf("num 0x%x\n", atoi(yytext));
55 {HEXZAHL}               printf("num 0x%x\n", strtol(yytext, 0, 16));
56 
57 {IDENTIFIER}            printf("ident %s\n", yytext);
58 
59 {ANYCHAR}               {       fprintf(stderr,
60                                         "unknown character '%s' in line %d.\n",
61                                         yytext, num_lines);
62                                 exit(1);
63                         }
64 
65 %%
66 
67 
68                         main(int argc, char **argv) {
69                                 yyin=argc>1 ? fopen(argv[1], "r") : stdin;
70                                 yylex();
71                                 exit(0);
72                         }
73 

200 < n < 300

Ich habe für jeden Knoten eine eigene Behandlungsroutine geschrieben, die Folgende ist beispielsweise für die Behandlung von "add"-Befehlen zuständig. Das gezeigte Prinzip sollte aber für so ziemlich alle binären Operationen anwendbar sein.

83 /*              arithmetics
84 */
85 
86 
87 node_add(treenodep a, treenodep b, treenodep dest) {
88 
89         if((a->regnr!=-1) && (b->regnr!=-1)) {
90 
91                 if(is_work_reg(a->regnr))
92                         dest->regnr=a->regnr;
93                 else
94                 if(is_work_reg(b->regnr))
95                         dest->regnr=b->regnr;
96                 else
97                         dest->regnr=alloc_register();
98 
99                 print_add(a->regnr, b->regnr, dest->regnr);
100 
101         } else
102         if(a->regnr!=-1) {
103 
104                 if(is_work_reg(a->regnr)) {
105 
106                         dest->regnr=a->regnr;
107                         print_add_const(a->regnr, b->num, a->regnr);
108 
109                 } else {
110 
111                         dest->regnr=alloc_register();
112                         print_add_const(a->regnr, b->num, dest->regnr);
113                 }
114 
115         } else
116         if(b->regnr!=-1) {
117 
118 
119                 if(is_work_reg(b->regnr)) {
120 
121                         dest->regnr=b->regnr;
122                         print_add_const(b->regnr, a->num, b->regnr);
123 
124                 } else {
125 
126                         dest->regnr=alloc_register();
127                         print_add_const(b->regnr, a->num, dest->regnr);
128                 }
129 
130         } else {
131 
132                 /* herzlichen Dank an Peter / Informatik-Forum
133                    für diese GENIALE Idee! :-) */
134 
135                 if(((a->num+b->num)>-254) &&
136                    ((a->num+b->num)< 255)) {
137 
138                         dest->num=a->num+b->num;
139                         dest->regnr=-1;
140 
141                 } else {
142 
143                         dest->regnr=alloc_register();
144                         print_store_const(a->num, dest->regnr);
145                         print_add_const(dest->regnr, b->num, dest->regnr);
146 
147                 }
148 
149         }
150 }

here you can see some nonsense article. in case it makes sense, it's all fault of Swallow Hack 0.5 for Article Manager!



RSSComments - Make a comment
The comments are owned by the poster. We are not responsible for its content.
RSSAll Articles
2008, 2007, 2006, 2005, 2004

What's Related

Article Manager

Hacks

Latest Updates

AdministrativeTexts
updated by freddiemac1993, 2013-06-14
wiki

Re: adventures
created by brittdavis10, 2012-02-23 (1 rply, 3 views)
thread

Re: how to run phpwebsite...
created by alexander, 2011-08-25 (2 rpls, 3607 views)
thread

Re: Forum tags
created by HaroldFaragher, 2011-08-22 (3 rpls, 8488 views)
thread


Zu den KO2100 Foren