mirror of
https://github.com/KevinMidboe/linguist.git
synced 2025-10-29 01:30:22 +00:00
This change includes a brief (non-sensical) sample program I wrote to illustrate many of Cool's language constructs, as well as a simple rule to distinguish Cool files from Common Lisp or OpenCL (it has a line that starts with the word 'class'). Further, it includes a second example program adapted from an example contained in the Cool distribution (list.cl), which contains a few further language constructs and captures the style of a Cool program.
72 lines
1.5 KiB
Common Lisp
72 lines
1.5 KiB
Common Lisp
(* Refer to Alex Aiken, "The Cool Reference Manual":
|
|
http://theory.stanford.edu/~aiken/software/cool/cool-manual.pdf
|
|
for language specification.
|
|
*)
|
|
|
|
-- Exhibit various language constructs
|
|
class Sample {
|
|
testCondition(x: Int): Bool {
|
|
if x = 0
|
|
then false
|
|
else
|
|
if x < (1 + 2) * 3
|
|
then true
|
|
else false
|
|
fi
|
|
fi
|
|
};
|
|
|
|
testLoop(y: Int): Bool {
|
|
while y > 0 loop
|
|
{
|
|
if not condition(y)
|
|
then y <- y / 2
|
|
else y <- y - 1;
|
|
}
|
|
pool
|
|
};
|
|
|
|
testAssign(z: Int): Bool {
|
|
i : Int;
|
|
i <- ~z;
|
|
};
|
|
|
|
testCase(var: Sample): SELF_TYPE {
|
|
io : IO <- new IO;
|
|
case var of
|
|
a : A => io.out_string("Class type is A\n");
|
|
b : B => io.out_string("Class type is B\n");
|
|
s : Sample => io.out_string("Class type is Sample\n");
|
|
o : Object => io.out_string("Class type is object\n");
|
|
esac
|
|
};
|
|
|
|
testLet(i: Int): Int {
|
|
let (a: Int in
|
|
let(b: Int <- 3, c: Int <- 4 in
|
|
{
|
|
a <- 2;
|
|
a * b * 2 / c;
|
|
}
|
|
)
|
|
)
|
|
};
|
|
};
|
|
|
|
-- Used to test subclasses
|
|
class A inherits Sample {};
|
|
class B inherits A {};
|
|
|
|
class C {
|
|
main() : Int {
|
|
(new Sample).testLet(1)
|
|
};
|
|
};
|
|
|
|
-- "Hello, world" example
|
|
class Main inherits IO {
|
|
main(): SELF_TYPE {
|
|
out_string("Hello, World.\n")
|
|
};
|
|
};
|