@@ -5,6 +5,13 @@ metavar string,str ::= {{ com quoted string literal }}
5
5
6
6
grammar
7
7
8
+
9
+ insn :: insn_ ::=
10
+ | { addr = w1 ; size = w2; code = bil } :: S :: insn
11
+
12
+ bil,seq :: seq_ ::=
13
+ | { s1 ; .. ; sn } :: S :: many
14
+
8
15
stmt,s :: stmt_ ::=
9
16
| var := exp :: :: move
10
17
| jmp exp :: :: jump
@@ -14,9 +21,6 @@ grammar
14
21
| if ( e ) seq :: S :: ifthen
15
22
| if ( e ) seq1 else seq2 :: :: if
16
23
17
- seq :: seq_ ::=
18
- | { stmt } :: S :: one
19
- | { s1 ; .. ; sn } :: S :: many
20
24
21
25
exp,e :: exp_ ::=
22
26
| ( exp ) :: S :: paren
@@ -171,7 +175,6 @@ defns helpers :: '' ::=
171
175
-------------------------------- :: succ
172
176
succ num:sz = num:sz1 .+ 1:sz1
173
177
174
-
175
178
defns reduce_exp :: '' ::=
176
179
177
180
defn delta |- exp ~> exp' :: :: exp :: '' by
@@ -451,30 +454,26 @@ defns reduce_stmt :: '' ::=
451
454
452
455
453
456
delta |- e ~> true
454
- delta,word |- seq ~> delta',word',{s}
455
- delta',word' |- s ~> delta'',word''
457
+ delta,word |- seq ~> delta',word',{}
456
458
------------------------------------- :: ifthen_true
457
- delta,word |- if (e) seq ~> delta'' , word' '
459
+ delta,word |- if (e) seq ~> delta', word'
458
460
459
461
delta |- e ~> true
460
- delta,word |- seq ~> delta',word',{s}
461
- delta',word' |- s ~> delta'',word''
462
+ delta,word |- seq ~> delta',word',{}
462
463
------------------------------------- :: if_true
463
- delta,word |- if (e) seq else seq1 ~> delta'' , word' '
464
+ delta,word |- if (e) seq else seq1 ~> delta', word'
464
465
465
466
delta |- e ~> false
466
- delta,word |- seq ~> delta',word',{s}
467
- delta',word' |- s ~> delta'',word''
467
+ delta,word |- seq ~> delta',word',{}
468
468
------------------------------------- :: if_false
469
- delta,word |- if (e) seq1 else seq ~> delta'' , word' '
469
+ delta,word |- if (e) seq1 else seq ~> delta', word'
470
470
471
471
472
472
delta1 |- e ~> true
473
- delta1,word1 |- seq ~> delta2,word2,{s}
474
- delta2,word2 |- s ~> delta3,word3
475
- delta3,word3 |- while (e) seq ~> delta4,word4
473
+ delta1,word1 |- seq ~> delta2,word2,{}
474
+ delta2,word2 |- while (e) seq ~> delta3,word3
476
475
--------------------------------------------- :: while
477
- delta1,word1 |- while (e) seq ~> delta4,word4
476
+ delta1,word1 |- while (e) seq ~> delta3,word3
478
477
479
478
delta |- e ~> false
480
479
----------------------------------------- :: while_false
@@ -492,9 +491,40 @@ defns reduce_stmt :: '' ::=
492
491
------------------------------------------------------------- :: seq_last
493
492
delta,word |- {s1; s2} ~> delta', word', {s2}
494
493
495
-
494
+ delta,word |- s1 ~> delta',word'
496
495
------------------------------------------------------------- :: seq_one
497
- delta,word |- {s1} ~> delta, word, {s1}
496
+ delta,word |- {s1} ~> delta', word', {}
497
+
498
+
499
+ ------------------------------------------------------------- :: seq_nil
500
+ delta,word |- {} ~> delta, word, {}
501
+
502
+
503
+ defns program :: '' ::=
504
+
505
+ defn delta,w |-> insn :: :: fetch :: '' by
506
+
507
+
508
+ --------------------------------- :: fetch
509
+ delta,w |-> insn
510
+
511
+
512
+ defns program_exec :: '' ::=
513
+
514
+ defn delta , w |- insn ~> delta' , w' :: :: exec :: '' by
515
+
516
+ delta,w1 |- bil ~> delta',w',{}
517
+ ------------------------------------------------------ :: step
518
+ delta,w |- {addr=w1; size=w2; code=bil} ~> delta',w'.+w2
519
+
520
+
521
+ defn delta , w ~> delta' , w' :: :: loop :: '' by
522
+
523
+ delta,w |-> insn
524
+ delta,w |- insn ~> delta',w'
525
+ delta',w' ~> delta'',w''
526
+ ---------------------------- :: loop
527
+ delta',w' ~> delta'',w''
498
528
499
529
500
530
defns typing_exp :: '' ::=
0 commit comments