DO CASE CASE ... CASE ... OTHERWISE ... ENDCASE

23/06/2010 - 21:02 von Jens Kallup | Report spam
Hallo,

gegeben sei untenstehende Funktion in der Sprache S.
Wie kann man buw. wie schaut die DO CASE CASE OTHERWISE ENDCASE
Struktur in ein in Assembler programmiertes Programm aus.
Zu beachten sei das "OR" zwischen "-" und "_"!

Danke für Eure Hilfe
Jens

Hilfreich wàre auch ein in YACC Definiertes Schaubild.

function key( nChar, nPosition )
local c1
c1 = upper( chr( nChar ))
do case
case c1 == "T" // Heutiges Datum
this.value := date( )
case c1 == "-" or c1 == "_" // Nàchster Tag
this.value--
case c1 == "+" or c1 == "=" // Vorheriger Tag
this.value++
case c1 == "M" // Erster Tag des Monats
// ...
otherwise
this.value := date()+1
return true // Normale Tastenbearbeitung
endcase
return false // Ignorieren des Tastendrucks
 

Lesen sie die antworten

#1 Jens Kallup
23/06/2010 - 22:11 | Warnen spam
Hallo,

anbei eine Yacc Definition, die ich aufgestellt habe.
Vielleicht làsst sich ja "case_does" vereinfachen, so dass man
mehrere OR oder AND Anweisungen durchführen kann.
Expression entspricht hierbei: "ident = expr".

case_does
:
| TOK_CASE Expression TOK_OR Expression stmtseq case_does
| TOK_CASE Expression TOK_AND Expression stmtseq case_does
| TOK_CASE Expression stmtseq case_does
| TOK_CASE Expression case_does
;

other_case
:
| TOK_OTHERWISE
| TOK_OTHERWISE stmtseq
;

casestmt
:
| TOK_DO TOK_CASE case_does other_case TOK_ENDCASE
;


Ich habe mit den gcc -S folgenden Code bekommen:

_test:
pushl %ebp
movl %esp, %ebp
subl $8, %esp
movl _f2, %eax
movl %eax, -4(%ebp)
cmpl $1, -4(%ebp)
je L3
cmpl $2, -4(%ebp)
je L4
jmp L5
L3:
movl $LC0, (%esp)
call _printf
jmp L2
L4:
movl $LC1, (%esp)
call _printf
jmp L2
L5:
movl $LC2, (%esp)
call _printf
L2:
leave
ret

Doch, wie làsst sich dieser AsmCode auf die obige
Syntax übertragen?

Danke für Hilfe
Jens

Ähnliche fragen