Not logged in

Artifact f617e407166befd836dc6d0051a0609a7fbb5fa8:

File langs/bf.rx part of check-in [d844f9fff0] - add assembler, brainf*** compiler by charleschilders on 2011-05-31 03:24:50. [annotate]


0000: 28 20 53 75 70 70 6f 72 74 20 66 75 6e 63 74 69  ( Support functi
0010: 6f 6e 73 3a 20 62 61 73 69 63 20 69 6e 70 75 74  ons: basic input
0020: 2c 20 6f 75 74 70 75 74 2c 20 61 6e 64 20 64 61  , output, and da
0030: 74 61 20 70 6f 69 6e 74 65 72 20 73 75 70 70 6f  ta pointer suppo
0040: 72 74 20 29 0a 3a 77 61 69 74 0a 20 20 23 30 20  rt ).:wait.  #0 
0050: 23 30 20 6f 75 74 2c 0a 20 20 77 61 69 74 2c 0a  #0 out,.  wait,.
0060: 20 20 72 65 74 2c 0a 0a 3a 62 79 65 0a 20 20 23    ret,..:bye.  #
0070: 2d 39 20 23 35 20 6f 75 74 2c 0a 20 20 72 65 74  -9 #5 out,.  ret
0080: 2c 0a 0a 3a 64 70 20 33 32 37 36 38 20 6d 2c 0a  ,..:dp 32768 m,.
0090: 0a 3a 62 66 5f 3e 0a 20 20 64 70 20 23 20 40 2c  .:bf_>.  dp # @,
00a0: 0a 20 20 31 2b 2c 0a 20 20 64 70 20 23 20 21 2c  .  1+,.  dp # !,
00b0: 0a 20 20 72 65 74 2c 0a 0a 3a 62 66 5f 3c 0a 20  .  ret,..:bf_<. 
00c0: 20 64 70 20 23 20 40 2c 0a 20 20 31 2d 2c 0a 20   dp # @,.  1-,. 
00d0: 20 64 70 20 23 20 21 2c 0a 20 20 72 65 74 2c 0a   dp # !,.  ret,.
00e0: 0a 3a 62 66 5f 2b 0a 20 20 64 70 20 23 20 40 2c  .:bf_+.  dp # @,
00f0: 20 40 2c 0a 20 20 31 2b 2c 0a 20 20 64 70 20 23   @,.  1+,.  dp #
0100: 20 40 2c 20 21 2c 0a 20 20 72 65 74 2c 0a 0a 3a   @, !,.  ret,..:
0110: 62 66 5f 2d 0a 20 20 64 70 20 23 20 40 2c 20 40  bf_-.  dp # @, @
0120: 2c 0a 20 20 31 2d 2c 0a 20 20 64 70 20 23 20 40  ,.  1-,.  dp # @
0130: 2c 20 21 2c 0a 20 20 72 65 74 2c 0a 0a 3a 62 66  , !,.  ret,..:bf
0140: 5f 2e 0a 20 20 64 70 20 23 20 40 2c 20 40 2c 0a  _..  dp # @, @,.
0150: 20 20 23 31 20 23 32 20 6f 75 74 2c 0a 20 20 63    #1 #2 out,.  c
0160: 61 6c 6c 20 77 61 69 74 0a 20 20 23 30 20 23 33  all wait.  #0 #3
0170: 20 6f 75 74 2c 0a 20 20 72 65 74 2c 0a 0a 3a 62   out,.  ret,..:b
0180: 66 5f 2c 0a 20 20 23 31 20 23 31 20 6f 75 74 2c  f_,.  #1 #1 out,
0190: 0a 20 20 63 61 6c 6c 20 77 61 69 74 0a 20 20 23  .  call wait.  #
01a0: 31 20 69 6e 2c 0a 20 20 72 65 74 2c 0a 0a 28 20  1 in,.  ret,..( 
01b0: 41 63 74 75 61 6c 20 42 72 61 69 6e 46 2a 2a 2a  Actual BrainF***
01c0: 20 63 6f 6d 70 69 6c 65 72 20 29 0a 76 61 72 69   compiler ).vari
01d0: 61 62 6c 65 20 69 70 0a 76 61 72 69 61 62 6c 65  able ip.variable
01e0: 20 6c 70 0a 0a 3a 20 67 65 74 4c 61 62 65 6c 0a   lp..: getLabel.
01f0: 20 20 40 6c 70 20 74 6f 53 74 72 69 6e 67 20 22    @lp toString "
0200: 4c 22 20 5e 73 74 72 69 6e 67 73 27 70 72 65 70  L" ^strings'prep
0210: 65 6e 64 20 3b 0a 0a 3a 20 72 75 6e 0a 20 20 74  end ;..: run.  t
0220: 2d 68 65 72 65 20 70 75 74 6e 20 73 70 61 63 65  -here putn space
0230: 20 40 69 70 20 40 20 70 75 74 63 20 63 72 0a 20   @ip @ putc cr. 
0240: 20 40 69 70 20 40 20 69 70 20 2b 2b 0a 20 20 5b   @ip @ ip ++.  [
0250: 20 27 3e 20 3d 20 5d 20 5b 20 64 72 6f 70 20 62   '> = ] [ drop b
0260: 66 5f 3e 20 6d 2c 20 5d 20 77 68 65 6e 0a 20 20  f_> m, ] when.  
0270: 5b 20 27 3c 20 3d 20 5d 20 5b 20 64 72 6f 70 20  [ '< = ] [ drop 
0280: 62 66 5f 3c 20 6d 2c 20 5d 20 77 68 65 6e 0a 20  bf_< m, ] when. 
0290: 20 5b 20 27 2b 20 3d 20 5d 20 5b 20 64 72 6f 70   [ '+ = ] [ drop
02a0: 20 62 66 5f 2b 20 6d 2c 20 5d 20 77 68 65 6e 0a   bf_+ m, ] when.
02b0: 20 20 5b 20 27 2d 20 3d 20 5d 20 5b 20 64 72 6f    [ '- = ] [ dro
02c0: 70 20 62 66 5f 2d 20 6d 2c 20 5d 20 77 68 65 6e  p bf_- m, ] when
02d0: 0a 20 20 5b 20 27 2e 20 3d 20 5d 20 5b 20 64 72  .  [ '. = ] [ dr
02e0: 6f 70 20 62 66 5f 2e 20 6d 2c 20 5d 20 77 68 65  op bf_. m, ] whe
02f0: 6e 0a 20 20 5b 20 27 2c 20 3d 20 5d 20 5b 20 64  n.  [ ', = ] [ d
0300: 72 6f 70 20 62 66 5f 2c 20 6d 2c 20 5d 20 77 68  rop bf_, m, ] wh
0310: 65 6e 0a 20 20 5b 20 27 5b 20 3d 20 5d 20 5b 20  en.  [ '[ = ] [ 
0320: 64 72 6f 70 20 67 65 74 4c 61 62 65 6c 20 68 65  drop getLabel he
0330: 61 64 65 72 20 74 2d 68 65 72 65 20 40 6c 61 73  ader t-here @las
0340: 74 20 21 64 2d 3e 78 74 20 6c 70 20 2b 2b 20 5d  t !d->xt lp ++ ]
0350: 20 77 68 65 6e 0a 20 20 5b 20 27 5d 20 3d 20 5d   when.  [ '] = ]
0360: 20 5b 20 64 72 6f 70 20 64 70 20 23 20 40 2c 20   [ drop dp # @, 
0370: 40 2c 20 6c 69 74 2c 20 30 20 6d 2c 20 21 6a 75  @, lit, 0 m, !ju
0380: 6d 70 2c 20 6c 70 20 2d 2d 20 67 65 74 4c 61 62  mp, lp -- getLab
0390: 65 6c 20 66 69 6e 64 20 64 72 6f 70 20 40 64 2d  el find drop @d-
03a0: 3e 78 74 20 6d 2c 20 5d 20 77 68 65 6e 0a 20 20  >xt m, ] when.  
03b0: 64 72 6f 70 20 3b 0a 0a 3a 20 64 6f 0a 20 20 5b  drop ;..: do.  [
03c0: 20 72 75 6e 20 40 69 70 20 40 20 5d 20 77 68 69   run @ip @ ] whi
03d0: 6c 65 20 3b 0a 0a 3a 20 62 66 3a 20 28 20 22 2d  le ;..: bf: ( "-
03e0: 20 29 0a 20 20 27 7e 20 61 63 63 65 70 74 20 74   ).  '~ accept t
03f0: 69 62 20 6b 65 65 70 53 74 72 69 6e 67 20 21 69  ib keepString !i
0400: 70 20 64 6f 20 3b 0a 0a 28 20 53 74 61 72 74 20  p do ;..( Start 
0410: 43 6f 6d 70 69 6c 61 74 69 6f 6e 20 6f 66 20 42  Compilation of B
0420: 72 61 69 6e 46 2a 2a 2a 20 63 6f 64 65 20 61 66  rainF*** code af
0430: 74 65 72 20 74 68 69 73 20 29 0a 3a 6d 61 69 6e  ter this ).:main
0440: 0a                                               .