summaryrefslogtreecommitdiff
path: root/README
diff options
context:
space:
mode:
authorPaul C. Buetow (mars.fritz.box) <paul@buetow.org>2014-06-22 11:53:34 +0200
committerPaul C. Buetow (mars.fritz.box) <paul@buetow.org>2014-06-22 11:53:34 +0200
commit1e5b73f1387e2b238e15238604b20a21f4e109ef (patch)
treebf6f2a088c697de244ef08749a5a3c4af69396a3 /README
parent342cc39469c7ad300096b9e90ba3adcec1f027a7 (diff)
add README.pod
Diffstat (limited to 'README')
-rw-r--r--README435
1 files changed, 0 insertions, 435 deletions
diff --git a/README b/README
deleted file mode 100644
index a6be7b8..0000000
--- a/README
+++ /dev/null
@@ -1,435 +0,0 @@
-NAME
- Fype is For Your Program Execution
-
- Fype is Free Yak Programed for ELF
-
- It's not a hype - it's Fype!
-
-SYNOPSES
- fype [-[hsvTV]] file.fy
- fype -e "fype code string;"
-
-ABOUT
- Fype is not yet released! Lots of basic stuff is still missing! See the
- TODO file of the source distribution of Fype!
-
- Fype is a 32 bit scripting language created for fun. You can use it and
- comment on it if you like. You could also write patches and mail them to
- fype at dev dot buetow dot org! Or go visit the IRC channel #coding at
- irc.german-elite.net and ask rantanplan.
-
- Fype is developed under the BSD license. See the COPYING file which is
- included in the source tree.
-
- Fype should be "at least as good as AWK". This does not mean it will be
- a replacement for AWK but it should support functions, loops and arrays
- like AWK does but with a different syntax. It should also get extension
- support like AWK has. I am not talking about GNU AWK but about New AWK,
- which is included in the *BSD distributions! Fype already has a few
- features which are not available in AWK. However, AWK has still many
- features which are not available in Fype as well ;)
-
- Fancy stuff like OOP or unicode or threading is not yet planed. But
- fancy stuff like function pointers and closures may be considered for
- one of the first releases of Fype :)
-
-PARSING / CODE GENERATION
- The Fype syntax is very simple and is using a maximum look ahead of 1
- and a very easy top down parsing. Fype is parsing and interpreting its
- code simultaneous. This means, that syntax errors are only detected
- during program runtime.
-
-REQUIREMENTS
- Fype only has been tested on FreeBSD 7.0. Linux may work too. Windows
- support is not planned. But may work using Cygwin or SFU. Linux users
- have to install pmake before compiling Fype!
-
- You will need:
-
- GNU GCC C Compiler (gcc.gnu.org)
- NetBSD Make aka pmake (GNU Make will not work)
-
- NetBSD Make is included in any *BSD and can be run with just make.
-
-GETTING STARTED
- On Linux: Extract, compile and install Fype:
-
- tar xvjf fype.tar.bz2
- cd fype
- pmake
- sudo pmake install
- pmake clean
-
- On FreeBSD: Extract, compile and install Fype:
-
- tar xvjf fype.tar.bz2
- cd fype
- make
- sudo make install
- make clean
-
- Run a .fy file:
-
- fype test.fy
-
- See the ./examples subdir of the Fype source distribution for examples!
- See also fype -h for a list of all options.
-
-DATA TYPES
- Fype uses auto type conversion. However, if you want to know what's
- going on you may take a look at the provided basic datatypes.
-
- The basic data types
- *integer*
- Specifies an integer number
-
- *double*
- Specifies a double number
-
- *string*
- Specifies a string
-
- *number*
- May be an integer or a double number
-
- *any*
- May be of any type above
-
- *void*
- No type
-
- *identifier*
- It's a variable name or a procedure name or a function name
-
- Explicit type conversions
- (*integer*) integer *any*
- Converts any type to an integer
-
- (*double*) double *any*
- Converts any type to a double
-
- (*string*) string *any*
- Converts any type to a string
-
-SYNTAX
- Comments
- Text from a # character until the end of the current line is considered
- being a comment. Multi line comments may start with an #* and and with
- an *# anywhere. Exceptions are if those signs are inside of strings.
-
- Statements
- A Fype program is a list of statements. Each keyword, expression or
- function call is part of a statement. Each statement is ended with a
- semicolon. Example:
-
- my bar = 3, foo = 1 + 2;
- say foo;
- exit foo - bar;
-
- Paranthesis
- All paranthesis of function calls are optional. They help to make the
- code better readable. They also help to force precedences of
- expressions.
-
- Scopeing
- A new scope starts with an { and ends with an }. An exception is a
- procedure, which does not use its own scope (see later in this manual).
- Control statements and functions support scopeings. The scope function
- will print out all available symbols at the current position. Here is a
- small example of how to use scopes:
-
- my foo = 1;
-
- {
- # Prints out 1
- put defined foo;
- {
- my bar = 2;
-
- # Prints out 1
- put defined bar;
-
- # Prints out all available symbols at this
- # point to stdout. Those are: bar and foo
- scope;
- }
-
- # Prints out 0
- put defined bar;
-
- my baz = 3;
- }
-
- # Prints out 0
- say defined bar;
-
- Control statements
- Fype knows the following control statements:
-
- if *<expression*> { *<statements*> }
- Runs the statements if the expression evaluates to a true value.
-
- ifnot *<expression*> { *<statements*> }
- Runs the statements if the expression evaluates to a false value.
-
- while *<expression*> { *<statements*> }
- Runs the statements as long as the the expression evaluates to a
- true value.
-
- until *<expression*> { *<statements*> }
- Runs the statements as long as the the expression evaluates to a
- false value.
-
-VARIABLES
- Variables can be defined with the my keyword. If you don't assign a
- value during declaration, then it's using the default integer value 0.
- Variables may be changed during program runtime. Variables may be
- deleted using the undef keyword! Example of defining variables:
-
- my foo = 1 + 2;
- say foo;
-
- my bar = 12, baz = foo;
- say 1 + bar;
- say bar;
-
- my baz;
- say baz; # Will print out 0
-
- You may use the defined keyword to check if an identifier has been
- defined or not.
-
- ifnot defined foo {
- say "No foo yet defined";
- }
-
- my foo = 1;
-
- if defined foo {
- put "foo is defined and has the value ";
- say foo;
- }
-
-SYNONYMS
- Each variable can have as many synonyms as wished. A synonym is another
- name to access the content of a specific variable. Here is an example of
- how to use synomyms:
-
- my foo = "foo";
- my bar = \foo;
- foo = "bar";
-
- # The synonym variable should now also set to "bar"
- assert "bar" == bar;
-
- Synonyms can be used for all kind of identifiers. It's not limited to
- normal variables but can be also used for function and procedure names
- etc.
-
- # Create a new procedure baz
- proc baz { say "I am baz"; }
-
- # Make a synonym baz, and undefine baz
- my bay = \baz;
-
- undef baz;
-
- # bay still has a reference of the original procedure baz
- bay; # this prints aut "I am baz"
-
- The syms keyword gives you the total number of synonyms pointing to a
- specific value:
-
- my foo = 1;
- say syms foo; # Prints 1
-
- my baz = \foo;
- say syms foo; # Prints 2
- say syms baz; # Prints 2
-
- undef baz;
- say syms foo; # Prints 1
-
-BUILT IN FUNCTIONS
- In Fype, operators are built in functions as well. The difference is,
- that they may be written in infix notation instead in front of the
- arguments. The types inside the () specify the return types.
-
- Math
- (*any*) *any* + *any*
- Special string behavior: A string will get auto convertet into an
- *integer*.
-
- (*any*) *any* - *any*
- Special string behavior: A string will get auto convertet into an
- *integer*.
-
- (*any*) *any* * *any*
- Special string behavior: A string will get auto convertet into an
- *integer*.
-
- (*any*) *any* / *any*
- Special string behavior: A string will get auto convertet into an
- *integer*.
-
- Conditional
- (*integer*) *any* == *any*
- (*integer*) *any* != *any*
- (*integer*) *any* <= *any*
- (*integer*) *any* >= *any*
- (*integer*) *any* < *any*
- (*integer*) *any* > *any*
- (*integer*) not *any*
-
- Definedness
- (*integer*) defined *identifier*
- Returns 1 if *identifier* has been defined. Returns 0 else.
-
- (*integer*) undef *identifier*
- Tries to undefine/delete the *identifier*. Returns 1 if success,
- otherwise 0 is returned.
-
- Bitwise
- (*integer*) *any* :< *any*
- (*integer*) *any* :> *any*
- (*integer*) *any* and *any*
- (*integer*) *any* or *any*
- (*integer*) *any* xor *any*
-
- Numeric
- (*number*) neg *number*
- This function returns the negative value of *any*
-
- (*integer*) no [*integer*]
- This function returns 1 if the argument is 0, otherwise it will
- return 0! If no argument is given, then 0 is returned!
-
- (*integer*) yes [*integer*]
- This function always returns 1. The parameter is optional.
-
- # Prints out 1, because foo is not defined
- if yes { say no defined foo; }
-
- System
- (*void*) end
- Exits the program with the exit status of 0
-
- (*void*) exit *integer*
- Exits the program with the specified exit status
-
- (*integer*) fork
- Fork forks a subprocess. It returns 0 for the child process and the
- pid of the child process otherwise! Example:
-
- my pid = fork;
-
- if pid {
- put "I am the parent process; child has the pid ";
- say pid;
-
- } ifnot pid {
- say "I am the child process";
- }
-
- (*integer*) gc
- Executes the garbage collector and returns the number of items
- freed! You may wonder why most of the time it will return a value of
- 0! Fype tries to free not needed memory asap. This may change in
- future versions in order to gain faster execution of scripts!
-
- I/O
- (*any*) put *any*
- Prints out the argument
-
- (*any*) say *any*
- Same as put, but also includes an ending newline
-
- (*void*) ln
- Just prints a newline
-
-SELF DEFINING PROCEDURES AND FUNCTIONS
- Procedures
- A procedure can be defined with the proc keyword and deleted with the
- undef keyword. A procedure does not return any value and does not
- support parameter passing. It's using already defined variables (e.g.
- global variables). A procedure does not have its own namespace. It's
- using the calling namespace. It is possible to define new variabes
- inside of a procedure in the current namespace.
-
- 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";
-
- Nested procedures
- It's possible to define procedures inside of procedures. Since
- procedures don't have its own scope, nested procedures will be available
- to the current scope as soon as the main procedure has run the first
- time. You may use the defined keyword in order to check if a procedure
- has been defined or not.
-
- proc foo {
- say "I am foo";
-
- undef bar;
- proc bar {
- say "I am bar";
- }
- }
-
- # Here bar would produce an error because
- # the proc is not yet defined!
- # bar;
-
- foo; # Here the procedure foo will define the procedure bar!
- bar; # Now the procedure bar is defined!
- foo; # Here the procedure foo will redefine bar again!
-
- Functions
- A function should be defined with the func keyword and deleted with the
- undef keyword. Function not yet return values (will be changed in future
- versions) and supports not yet parameter passing (will be changed in
- future versions). It's using local (lexical scoped) variables. If a
- certain variable does not exist It's using already defined variables
- (e.g. one scope above).
-
- func foo {
- say 1 + a * 3 + b;
- my c = 6;
- }
-
- my a = 2, b = 4;
-
- foo; # Run the procedure. Print out "11\n"
- say c; # Will produce an error, because c is out of scoped!
-
- Nested functions
- Nested functions work the same way the nested procedures work, with the
- exception that nested functions will not be available any more after the
- function has been left!
-
- func foo {
- func bar {
- say "Hello i am nested";
- }
-
- bar; # Calling nested
- }
-
- foo;
- bar; # Will produce an error, because bar is out of scope!
-
-AUTHOR
- Paul C. Buetow (http://paul.buetow.org)
-
-WEBSITE
- The Fype Language (http://fype.buetow.org)
-
-SEE ALSO
- awk(1) cc(1) make(1)
-