summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-15 23:28:07 +0000
committerPaul Buetow <paul@buetow.org>2008-05-15 23:28:07 +0000
commitbe839900419c7a74c4a46efd279d0ca16b35dc1f (patch)
tree1355c8f238d1c58ffd5cb8803bcc2adf987e79aa /examples
parent33c945e58f86267b0d3bdca4c3421155e11eb0d9 (diff)
Moved stuff into trunk.
Diffstat (limited to 'examples')
-rw-r--r--examples/broken/bitwise.fy31
-rw-r--r--examples/comments.fy21
-rw-r--r--examples/conditionals.fy41
-rw-r--r--examples/control.fy32
-rw-r--r--examples/expressions.fy31
-rw-r--r--examples/fork.fy14
-rw-r--r--examples/functions.fy25
-rw-r--r--examples/inlinefunctions.fy20
-rw-r--r--examples/io.fy13
-rw-r--r--examples/procedures.fy30
-rw-r--r--examples/scopeing.fy27
-rw-r--r--examples/types.fy14
-rw-r--r--examples/variables.fy21
13 files changed, 320 insertions, 0 deletions
diff --git a/examples/broken/bitwise.fy b/examples/broken/bitwise.fy
new file mode 100644
index 0000000..b124590
--- /dev/null
+++ b/examples/broken/bitwise.fy
@@ -0,0 +1,31 @@
+#*
+ * 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 "-1" (see "not" operator of NASM why so)
+assert (neg 1) == (say not 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));
diff --git a/examples/comments.fy b/examples/comments.fy
new file mode 100644
index 0000000..216e41b
--- /dev/null
+++ b/examples/comments.fy
@@ -0,0 +1,21 @@
+#*
+ * 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
+ *#
+
diff --git a/examples/conditionals.fy b/examples/conditionals.fy
new file mode 100644
index 0000000..1260ae2
--- /dev/null
+++ b/examples/conditionals.fy
@@ -0,0 +1,41 @@
+#*
+ * 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);
+
+
diff --git a/examples/control.fy b/examples/control.fy
new file mode 100644
index 0000000..0deac78
--- /dev/null
+++ b/examples/control.fy
@@ -0,0 +1,32 @@
+#*
+ * 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;
+}
+
diff --git a/examples/expressions.fy b/examples/expressions.fy
new file mode 100644
index 0000000..93a278f
--- /dev/null
+++ b/examples/expressions.fy
@@ -0,0 +1,31 @@
+#*
+ * 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;
+
diff --git a/examples/fork.fy b/examples/fork.fy
new file mode 100644
index 0000000..c49c878
--- /dev/null
+++ b/examples/fork.fy
@@ -0,0 +1,14 @@
+#*
+ * 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";
+}
diff --git a/examples/functions.fy b/examples/functions.fy
new file mode 100644
index 0000000..15856a0
--- /dev/null
+++ b/examples/functions.fy
@@ -0,0 +1,25 @@
+#*
+ * 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
diff --git a/examples/inlinefunctions.fy b/examples/inlinefunctions.fy
new file mode 100644
index 0000000..81848ce
--- /dev/null
+++ b/examples/inlinefunctions.fy
@@ -0,0 +1,20 @@
+#*
+ * 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;
+
diff --git a/examples/io.fy b/examples/io.fy
new file mode 100644
index 0000000..fda514d
--- /dev/null
+++ b/examples/io.fy
@@ -0,0 +1,13 @@
+#*
+ * 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;
+
diff --git a/examples/procedures.fy b/examples/procedures.fy
new file mode 100644
index 0000000..cbe2121
--- /dev/null
+++ b/examples/procedures.fy
@@ -0,0 +1,30 @@
+#*
+ * 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!
diff --git a/examples/scopeing.fy b/examples/scopeing.fy
new file mode 100644
index 0000000..2e36c2c
--- /dev/null
+++ b/examples/scopeing.fy
@@ -0,0 +1,27 @@
+#*
+ * 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);
+
+
diff --git a/examples/types.fy b/examples/types.fy
new file mode 100644
index 0000000..1b9a0ac
--- /dev/null
+++ b/examples/types.fy
@@ -0,0 +1,14 @@
+#*
+ * 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 :)
+
diff --git a/examples/variables.fy b/examples/variables.fy
new file mode 100644
index 0000000..ac619c9
--- /dev/null
+++ b/examples/variables.fy
@@ -0,0 +1,21 @@
+#*
+ * 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;