Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/maelswarm/nymph

🧚 A slightly different version of C.
https://github.com/maelswarm/nymph

c language nymph preprocessor programming-language

Last synced: about 1 month ago
JSON representation

🧚 A slightly different version of C.

Awesome Lists containing this project

README

        

Nymph

Let's see what we can achieve by reworking C syntax.

## Overview

Nymph is a simple C like programming language.

Nymph acts as a preprocessor, converting Nymph files (extension \*.n) into C files.

This project is very much in development... It is not production ready.

## What's New

Nothing right now

## Goals

### Completed

* Class-Based OOP

* Subtyping

### In Progress

* TBD

### Pending

* Destructors?

* Type Inference?

* Reflection?

* Default function arguments?

* Lambdas?

## Example

mammal.n
```
#include
#include

class Mammal {

+ int population = 0; // Class Variable (+)
- int height = 0, weight = 100; // Object Variable (-)

+ Mammal *init(int height, int weight) { // Class Method (+) Constructor
this->height = height;
this->weight = weight;
Mammal->population++;
return this;
}

- void print() { // Object Method (-)
printf("print instance properties...\n");
}
}
```

human.n
```
#include "mammal.n"
#include
#include

class Human : Mammal {

- char *name = NULL; // Object Variable (-)

+ Human *init(char *name, int height, int weight) { // Class Method (+) Constructor
this = super->init(height, weight);
this->name = name;
return this;
}

- void died() { // Object Method (-) Constructor
free(this->name);
free(this);
Mammal->population--;
}
}

int main(void) {

char *name = malloc(5);
memset(name, 0, sizeof(name));
strcpy(name, "Fred");
Human *person1 = Human->init(name, 76, 146); // Class Method Constructor Call
person1->print(); // Object Method Call
person1->died(); // Object Method Call

return 0;
}
```

```
nymph -r human.n
```