Skip to content

Commit c440744

Browse files
committed
specified semantics of the whole program.
1 parent ff2f325 commit c440744

File tree

1 file changed

+49
-19
lines changed

1 file changed

+49
-19
lines changed

bil.ott

Lines changed: 49 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,13 @@ metavar string,str ::= {{ com quoted string literal }}
55

66
grammar
77

8+
9+
insn :: insn_ ::=
10+
| { addr = w1 ; size = w2; code = bil } :: S :: insn
11+
12+
bil,seq :: seq_ ::=
13+
| { s1 ; .. ; sn } :: S :: many
14+
815
stmt,s :: stmt_ ::=
916
| var := exp :: :: move
1017
| jmp exp :: :: jump
@@ -14,9 +21,6 @@ grammar
1421
| if ( e ) seq :: S :: ifthen
1522
| if ( e ) seq1 else seq2 :: :: if
1623

17-
seq :: seq_ ::=
18-
| { stmt } :: S :: one
19-
| { s1 ; .. ; sn } :: S :: many
2024

2125
exp,e :: exp_ ::=
2226
| ( exp ) :: S :: paren
@@ -171,7 +175,6 @@ defns helpers :: '' ::=
171175
-------------------------------- :: succ
172176
succ num:sz = num:sz1 .+ 1:sz1
173177

174-
175178
defns reduce_exp :: '' ::=
176179

177180
defn delta |- exp ~> exp' :: :: exp :: '' by
@@ -451,30 +454,26 @@ defns reduce_stmt :: '' ::=
451454

452455

453456
delta |- e ~> true
454-
delta,word |- seq ~> delta',word',{s}
455-
delta',word' |- s ~> delta'',word''
457+
delta,word |- seq ~> delta',word',{}
456458
------------------------------------- :: ifthen_true
457-
delta,word |- if (e) seq ~> delta'', word''
459+
delta,word |- if (e) seq ~> delta', word'
458460

459461
delta |- e ~> true
460-
delta,word |- seq ~> delta',word',{s}
461-
delta',word' |- s ~> delta'',word''
462+
delta,word |- seq ~> delta',word',{}
462463
------------------------------------- :: if_true
463-
delta,word |- if (e) seq else seq1 ~> delta'', word''
464+
delta,word |- if (e) seq else seq1 ~> delta', word'
464465

465466
delta |- e ~> false
466-
delta,word |- seq ~> delta',word',{s}
467-
delta',word' |- s ~> delta'',word''
467+
delta,word |- seq ~> delta',word',{}
468468
------------------------------------- :: if_false
469-
delta,word |- if (e) seq1 else seq ~> delta'', word''
469+
delta,word |- if (e) seq1 else seq ~> delta', word'
470470

471471

472472
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
476475
--------------------------------------------- :: while
477-
delta1,word1 |- while (e) seq ~> delta4,word4
476+
delta1,word1 |- while (e) seq ~> delta3,word3
478477

479478
delta |- e ~> false
480479
----------------------------------------- :: while_false
@@ -492,9 +491,40 @@ defns reduce_stmt :: '' ::=
492491
------------------------------------------------------------- :: seq_last
493492
delta,word |- {s1; s2} ~> delta', word', {s2}
494493

495-
494+
delta,word |- s1 ~> delta',word'
496495
------------------------------------------------------------- :: 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''
498528

499529

500530
defns typing_exp :: '' ::=

0 commit comments

Comments
 (0)