summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-10-18 22:47:31 +0000
committerPaul Buetow <paul@buetow.org>2008-10-18 22:47:31 +0000
commitcb1450b796eff3c8830616e2e9a3d83d4dfb4900 (patch)
tree1ed2b992f9b082cf82913abeaff8c208ecab67dd /examples
parenta35ace22b374005c65bda8302761d24f75280170 (diff)
backdowngrade
Diffstat (limited to 'examples')
-rw-r--r--examples/all-examples.txt335
-rw-r--r--examples/conditionals.fy2
-rw-r--r--examples/types.fy4
3 files changed, 337 insertions, 4 deletions
diff --git a/examples/all-examples.txt b/examples/all-examples.txt
new file mode 100644
index 0000000..bdf199f
--- /dev/null
+++ b/examples/all-examples.txt
@@ -0,0 +1,335 @@
+
+#*
+ * Examples of how to use bitwise operators
+ *#
+
+# Prints "01\n"
+assert 0 == (put 1 and 0);
+assert 1 == (say 1 and 1);
+
+# Prints "01\n"
+assert 0 == (put 0 or 0);
+assert 1 == (say 0 or 1);
+
+# Prints "01\n"
+assert 0 == (put 1 xor 1);
+assert 1 == (say 1 xor 0);
+
+# Prints "82\n"
+assert 8 == (put 2 :< 2);
+assert 2 == (say 8 :> 2);
+
+# A bit more complex, prints "9\n"
+assert 9 == (say 1 :< 5 :> 5 or 2 and 5 xor 8);
+
+# Same result, but with parenthesis:
+assert 9 == (say ((((1 :< 5) :> 5) or 2) and 5) xor 8);
+
+# Different parenthesis, different result: "1\n"
+assert 1 == (say 1 :< 5 :> 5 or 2 and (5 xor 8));
+
+# Prints "-1"
+assert (neg 1) == (say neg not 0);
+
+
+#*
+ * Simple examples how to write comments
+ *#
+
+# This is a single lined comment
+
+say 1 + 1; # This is a comment at the end of the line
+
+say 1 #* This is an embedded comment *# + 1;
+
+#* This is
+ a
+ multiline
+ comment *#
+
+#*
+ * This is
+ * a nicer looking
+ * multiline comment
+ *#
+
+
+#*
+ * Simple conditional tests
+ *#
+
+# "0010\n"
+assert 0 == (put 1 < 1);
+assert 0 == (put 1 < 0);
+assert 1 == (put 0 < 1);
+assert 0 == (say 0 < 0);
+
+# "0100\n"
+assert 0 == (put 1 > 1);
+assert 1 == (put 1 > 0);
+assert 0 == (put 0 > 1);
+assert 0 == (say 0 > 0);
+
+# "1001\n"
+assert 1 == (put 1 == 1);
+assert 0 == (put 1 == 0);
+assert 0 == (put 0 == 1);
+assert 1 == (say 0 == 0);
+
+# "0110\n"
+assert 0 == (put 1 != 1);
+assert 1 == (put 1 != 0);
+assert 1 == (put 0 != 1);
+assert 0 == (say 0 != 0);
+
+# "1011\n"
+assert 1 == (put 1 <= 1);
+assert 0 == (put 1 <= 0);
+assert 1 == (put 0 <= 1);
+assert 1 == (say 0 <= 0);
+
+## "1101\n"
+assert 1 == (put 1 >= 1);
+assert 1 == (put 1 >= 0);
+assert 0 == (put 0 >= 1);
+assert 1 == (say 0 >= 0);
+
+
+
+#*
+ * Examples of how to use control statements
+ *#
+
+if 1 {
+ say "if 1";
+}
+
+ifnot 0 == 1 {
+ say "ifnot 0 == 1";
+}
+
+# Calculate 10!
+
+my n = 10, fac = 0;
+
+while n > 1 {
+ ifnot fac {
+ fac = 1;
+ }
+ say fac = (fac * n);
+ decr n;
+}
+
+# Count up to 10
+
+n = 0;
+
+until n == 10 {
+ say incr n;
+}
+
+
+#*
+ * Simple expression tests
+ *#
+
+# Result 10
+assert 10 == say (8 / 2) + 2 * 3;
+
+# Result 12
+assert 12 == say 2 * (4 + 2);
+
+# Result 4
+assert 4 == say 2 * (4 / 2);
+
+# Result 4
+assert 4 == say 2 * (4 / 2);
+
+# Result 4
+assert 4 == say 2 * (4 / 2);
+
+# Result 46
+assert 46 == say "12" + "34";
+
+# Result 1231
+assert 1231 == say "1234" - "3";
+
+# Result 24
+assert "24" == say "2ab" * "12";
+
+# Result 5.0
+assert 5 == say "10 bla" / 2;
+
+
+#*
+ * Examples of how to use fork
+ *#
+
+my pid = fork;
+
+if pid {
+ put "I am the parent process and the child has the pid ";
+ say pid;
+}
+
+ifnot pid {
+ say "I am the child process";
+}
+
+#*
+ * Examples of how to use functions
+ *#
+
+func foo {
+ say 1 + a * 3 + b;
+
+ func bar {
+ say "Hello i am nested";
+ }
+
+ bar; # Calling nested
+}
+
+my a = 2, b = 4; # Create global variables
+foo;
+assert 0 == (defined bar); # bar is not available anymore
+
+func baz {
+ say "I am baz";
+ undef baz;
+}
+
+baz; # Baz deletes itself
+assert 0 == (defined baz); # baz is not available anymore
+
+#*
+ * Simple builtin function tests
+ *#
+
+# Print "-20\n"
+assert (neg 20) == (say neg 20);
+
+# Print "30\n"
+assert 30 == (say 10 - neg 20);
+
+# Print "-30\n"
+assert (neg 30) == (say neg neg neg 10 - neg 20);
+
+# Print "Hello\n"
+put "Hello";
+ln;
+
+# Exit with exit code 0
+exit 10 + 10 - 5 - 15;
+
+
+#*
+ * Simple I/O examples. Currently only output is supported.
+ *#
+
+# Print out 10 followed by a newline
+say 10;
+
+# Print out 20 without a newline followed
+put 20;
+
+# Print out a newline
+ln;
+
+
+#*
+ * Examples of how to use procedures
+ *#
+
+proc foo {
+ say 1 + a * 3 + b;
+ my c = 6;
+}
+
+my a = 2, b = 4;
+
+foo; # Run the procedure. Print out "11\n"
+say c; # Print out "6\n";
+
+proc bar {
+ say "I am bar";
+
+ undef baz;
+
+ proc baz {
+ say "I am baz";
+ }
+}
+
+# Here bar would produce an error because the proc is not yet defined!
+# bar;
+
+bar; # Here the procedure bar will define the procedure baz!
+baz; # Now the procedure baz is defined!
+bar; # Here the procedure bar will redefine baz again!
+
+#*
+ * Examples of how to use scopeing
+ *#
+
+my foo = 1;
+
+{
+ # Prints out 1
+ assert 1 == (put defined foo);
+
+ {
+ my bar = 2;
+
+ # Prints out 1
+ assert 1 == (put defined bar);
+ }
+
+ # Prints out 0
+ assert 0 == (put defined bar);
+
+ my baz = 3;
+}
+
+# Prints out 0
+assert 0 == (say defined bar);
+
+
+
+#*
+ * Examples how to convert types
+ *#
+
+assert 1 == say 1; # Integer output
+
+assert 1 == say double 1; # Double output
+
+assert 14 == say 1 + string 13; # Implicit type conversion to Integer
+
+assert 2 == say integer 2.8; # Rounds down to the Integer 2
+
+assert say integer double string put say neg 12; # Nonsense but working :)
+
+
+#*
+ * Examples of how to define variables
+ *#
+
+# Defines the variables
+my foo = 1 + 1;
+my bar = 4 - 1, baz = 100 + 1, bay;
+
+# bay has been initialized with the default value of 0
+say bay;
+
+# Prints out "5\n"
+assert 5 == (say foo + bar);
+
+# Pritns out "51101\n"
+assert 51 == (put baz - 50);
+assert 101 == (say baz);
+
+# Change the value of the variable to 99 and print it out
+assert 99 == (baz = 99);
+say baz;
+
diff --git a/examples/conditionals.fy b/examples/conditionals.fy
index 2dc027f..1260ae2 100644
--- a/examples/conditionals.fy
+++ b/examples/conditionals.fy
@@ -37,3 +37,5 @@ assert 1 == (put 1 >= 1);
assert 1 == (put 1 >= 0);
assert 0 == (put 0 >= 1);
assert 1 == (say 0 >= 0);
+
+
diff --git a/examples/types.fy b/examples/types.fy
index 1ac9751..1b9a0ac 100644
--- a/examples/types.fy
+++ b/examples/types.fy
@@ -12,7 +12,3 @@ assert 2 == say integer 2.8; # Rounds down to the Integer 2
assert say integer double string put say neg 12; # Nonsense but working :)
-assert "TT_INTEGER" == say type 1;
-assert "TT_DOUBLE" == say type 1.0;
-assert "TT_STRING" == say type "1";
-assert "TT_ARRAY" == say type [1 2 3];