parent
							
								
									3f0ce063e7
								
							
						
					
					
						commit
						d9d1b539cd
					
				
							
								
								
									
										18
									
								
								README.md
								
								
								
								
							
							
						
						
									
										18
									
								
								README.md
								
								
								
								
							| 
						 | 
				
			
			@ -1,2 +1,18 @@
 | 
			
		|||
# nimp
 | 
			
		||||
A simple programming language that anyone can read, and where nothing is implied.
 | 
			
		||||
 | 
			
		||||
A simple programming language that anyone can read, and where nothing is
 | 
			
		||||
implied.
 | 
			
		||||
 | 
			
		||||
nimp is designed to be intentionally verbose to the point of pain, because it
 | 
			
		||||
is meant to be read by **anyone**, including non-programmers, without
 | 
			
		||||
sacrificing functionality.
 | 
			
		||||
 | 
			
		||||
Here's how you'd write a _Hello world_ program in nimp:
 | 
			
		||||
 | 
			
		||||
```nimp
 | 
			
		||||
import module io from standard-library.
 | 
			
		||||
 | 
			
		||||
call io.print with contents as "Hello world!".
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Everything in nimp is defined as a sentence that can be read in plain English.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
.dub
 | 
			
		||||
docs.json
 | 
			
		||||
__dummy.html
 | 
			
		||||
docs/
 | 
			
		||||
/compiler
 | 
			
		||||
compiler.so
 | 
			
		||||
compiler.dylib
 | 
			
		||||
compiler.dll
 | 
			
		||||
compiler.a
 | 
			
		||||
compiler.lib
 | 
			
		||||
compiler-test-*
 | 
			
		||||
*.exe
 | 
			
		||||
*.pdb
 | 
			
		||||
*.o
 | 
			
		||||
*.obj
 | 
			
		||||
*.lst
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,9 @@
 | 
			
		|||
{
 | 
			
		||||
	"authors": [
 | 
			
		||||
		"Andrew Lalis"
 | 
			
		||||
	],
 | 
			
		||||
	"copyright": "Copyright © 2023, Andrew Lalis",
 | 
			
		||||
	"description": "Compiler for the NIMP language.",
 | 
			
		||||
	"license": "MIT",
 | 
			
		||||
	"name": "compiler"
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
import std.stdio;
 | 
			
		||||
 | 
			
		||||
void main() {
 | 
			
		||||
	writeln("Edit source/app.d to start your project.");
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,24 @@
 | 
			
		|||
# Arrays
 | 
			
		||||
 | 
			
		||||
define a1 as array of integer with value [1, 2, 3].
 | 
			
		||||
define a2 as array of boolean with value [true, false].
 | 
			
		||||
define a3 as array of float with size 64.
 | 
			
		||||
 | 
			
		||||
# Structs
 | 
			
		||||
define S1 as struct with body {
 | 
			
		||||
    define a as integer.
 | 
			
		||||
    define b as float.
 | 
			
		||||
 | 
			
		||||
    define sum as function returning integer with body {
 | 
			
		||||
        return sum of a from this and b from this.
 | 
			
		||||
    }.
 | 
			
		||||
}.
 | 
			
		||||
 | 
			
		||||
# Interfaces
 | 
			
		||||
define Gettable as interface with body {
 | 
			
		||||
    define get as function returning integer.
 | 
			
		||||
    define getAll as function returning array of integer.
 | 
			
		||||
    define getNone as function returning array of integer with body {
 | 
			
		||||
        return array of integer with value [].
 | 
			
		||||
    }.
 | 
			
		||||
}.
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,14 @@
 | 
			
		|||
define fibonacci as function
 | 
			
		||||
    taking n as integer
 | 
			
		||||
    and returning integer
 | 
			
		||||
    with body {
 | 
			
		||||
    if n is less than or equal to 1 then return n.
 | 
			
		||||
    return sum of
 | 
			
		||||
        call fibonacci with n as difference of n and 1, and
 | 
			
		||||
        call fibonacci with n as difference of n and 2.
 | 
			
		||||
}.
 | 
			
		||||
 | 
			
		||||
define x as integer with value of call fibonacci with n as 42.
 | 
			
		||||
 | 
			
		||||
import module io from standard-library.
 | 
			
		||||
call io:print with contents as string of x.
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,22 @@
 | 
			
		|||
define foo as function with body {
 | 
			
		||||
    import module io from standard-library.
 | 
			
		||||
    call io:print with contents as "Hello world".
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define sumInts as function
 | 
			
		||||
    taking a as integer,
 | 
			
		||||
    b as integer,
 | 
			
		||||
    and returning integer,
 | 
			
		||||
with body {
 | 
			
		||||
    return sum of a and b.
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
define malloc as external function taking size as integer, and returning pointer to void.
 | 
			
		||||
define free as external function taking ptr as pointer to void.
 | 
			
		||||
 | 
			
		||||
define main as function returning integer with body {
 | 
			
		||||
    call foo.
 | 
			
		||||
    define x as integer with value of call sumInts with a as 3 and b as 5.
 | 
			
		||||
    define ptr as pointer to void with value of call malloc with size as 42.
 | 
			
		||||
    call free with ptr as ptr.
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
import module io from standard-library.
 | 
			
		||||
 | 
			
		||||
define main as function taking args as array of character with body {
 | 
			
		||||
    call io.print with contents as "Hello world".
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -0,0 +1,19 @@
 | 
			
		|||
# Syntax: define _SYMBOL_ as _TYPE_ with value of _EXPRESSION[_TYPE_]_.
 | 
			
		||||
# Or shortcut: define _SYMBOL_ as _EXPRESSION[_TYPE_]_.
 | 
			
		||||
 | 
			
		||||
define x as integer with value of 42.
 | 
			
		||||
 | 
			
		||||
define b as boolean.
 | 
			
		||||
assign true to b.
 | 
			
		||||
 | 
			
		||||
define bString as string of b.
 | 
			
		||||
 | 
			
		||||
define constant PI as float with value of 3.14.
 | 
			
		||||
define quarterCircle as float with value of PI divided by 2.
 | 
			
		||||
 | 
			
		||||
define s1 as string with value of "Hello world!".
 | 
			
		||||
 | 
			
		||||
# Shortcut expressions where type is implied:
 | 
			
		||||
define a as sum of 3 and 2.
 | 
			
		||||
define c as true or false.
 | 
			
		||||
define s2 as "Hello world, again.".
 | 
			
		||||
		Loading…
	
		Reference in New Issue