Advertisement
KipIngram

Preliminary Implementation - Forth NUMBER

Apr 9th, 2021
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. Errors:
  2. o <n1> - required character missing
  3. o <n2> - invalid digit encountered
  4. o <n3> - repeated control character
  5. o <n4> - ':' support pending
  6.  
  7. Stack Frame:
  8. o <result> <buffer> <decimals> <flags> <base>
  9. o s4 s3 s2 s1 s0
  10.  
  11. .: set s1 @ check +! ;
  12. .: check over2 and 0=; <n3> err ;
  13.  
  14. .: fwd s3 1+ ;
  15. .: peek s3 @ c@ ;
  16. .: get peek fwd ;
  17. .: need get =; <n1> err ;
  18. .; base! s0 ! 4 set fwd;
  19.  
  20. .: >digit (digit) case? valid? absorb ;
  21. .: (digit) 0-9? A-Z? a-z? <n2> err ;
  22. .: 0-9? 48 - 10 .u<;; ;
  23. .: A-Z? 7 - 36 .u<;; ;
  24. .: a-z? 6 - 62 .u<;; ;
  25. .: case? s0 @ 37 u<; 26 .u>; 26 - ;
  26. .: valid? s0 @ .u<; <n2> err ;
  27. .: +dp? s1 @ 1 and s2 +! ;
  28. .: absorb swap s0 @ * + +dp? ;
  29. ; post neg? result ! ;
  30. : neg? 2 set? 0=; negate ;
  31.  
  32. .: digits \0?; get process me [
  33. .: \0?; ?dup 0=;; ;
  34. .: process .? e? :? >digit ;
  35. .: .? 56 .!=; 1 set ; drop ;;
  36. .: e? 101 .!=; 4 set 3 err ;;
  37. .: :? 59 .!=; 8 set base! ;;
  38.  
  39. .: pre peek -? x? b? ;
  40. .: -? 45 .!=; drop 2 set fwd ;;
  41. .: x? 120 .!=; drop 59 need 16 base! ;;
  42. .: b? 98 !=; 59 need 2 base! ;;
  43.  
  44. : frame 0 wbuf 1+ 0 0 10 ;
  45. : num frame { 0 pre digits post 4 } ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement