From 445784a629c99336d47b31ea9540bd95bbb97dc1 Mon Sep 17 00:00:00 2001 From: Nakidai Date: Mon, 31 Mar 2025 17:22:19 +0300 Subject: Add 2 more examples - Number parser - Factorial (2 ways to implement) --- examples/num.ccl | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 examples/num.ccl (limited to 'examples/num.ccl') diff --git a/examples/num.ccl b/examples/num.ccl new file mode 100644 index 0000000..c35d62f --- /dev/null +++ b/examples/num.ccl @@ -0,0 +1,39 @@ +^+++++ +++++ = t/en +$t- = n/ine +^- = E/OF +^ = e/rror state +^+++++++++++++++++++++++++++++++++++++++++++++++ = z/ero character - 1 +$z+++++ +++++ + = T/ '0' - 1 + 11 +^ = Z / actual zero + +P/arse a number from stdin / -- input +{ + &r / our result :D + + _ ( + &c>c / read into local + $cE?=_^+=e#; / if EOF then exit setting error + + &s$z~=s/ubtract / put char - ('0' - 1) into s + + &f^=f s( / if s >= 0 then our char is '0' or above + / meaning it's possibly a digit + + ^$c$T~~=s/ubtract / put -(char - ('0' - 1 + 11)) into s + &f^=f s( / if s >= 0 then our char is '9' or below + / meaning it's a digit + + / c is a digit here + $c$z~- / convert character into number + t[$r]n[*] / shift result one decimal digit left + *=r / finally append character + + ^+=f#) + $fZ?=_#;=_ + ^+=f#) + $fZ?=_^+=e#;=_ / otherwise exit setting error + ) + $r +} + +@P -- cgit 1.4.1