https://github.com/mr-thearch/flowgorithm-c-template
Unofficial Flowgorithm language template for the C programming language. Generates valid C99 code from Flowgorithm flowcharts, including support for strings, booleans, typed input, array handling, and full expression translation.
https://github.com/mr-thearch/flowgorithm-c-template
c-language c-template code-generation compiler education flowgorithm teaching template
Last synced: 28 days ago
JSON representation
Unofficial Flowgorithm language template for the C programming language. Generates valid C99 code from Flowgorithm flowcharts, including support for strings, booleans, typed input, array handling, and full expression translation.
- Host: GitHub
- URL: https://github.com/mr-thearch/flowgorithm-c-template
- Owner: mr-thearch
- License: mit
- Created: 2025-11-16T12:47:01.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2025-11-16T14:14:02.000Z (8 months ago)
- Last Synced: 2025-11-16T16:11:54.458Z (8 months ago)
- Topics: c-language, c-template, code-generation, compiler, education, flowgorithm, teaching, template
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# Flowgorithm C Language Template
This repository contains an unofficial **Flowgorithm language template for C**, created to allow students to translate flowcharts into fully compilable C programs.
The project is intended for **educational use**, with an emphasis on clarity, predictability, and adherence to standard C (C99+).
The template provides:
- A complete `.fpgt` file that integrates C into Flowgorithm's code-generation system.
- Several helper functions required to support strings, booleans, and typed input.
- Example Flowgorithm programs (in the `Examples/` folder) together with their generated C code.
The goal is to offer a reliable tool that mirrors as closely as possible the behaviour of Flowgorithm’s internal interpreter, while still producing valid and idiomatic C code suitable for beginners learning the language.
---
## Purpose of This Template
Flowgorithm officially supports languages such as C#, Java, Python, and C++.
However, it lacks a native C generator.
This template fills that gap by implementing:
- Type mappings from Flowgorithm → C
- Expression translation
- Function generation (with and without return values)
- Array declaration
- String and boolean emulation
- Typed input and formatted output
- Helper functions for string conversion, concatenation, numeric parsing, and boolean parsing
The generated code targets a **minimal and didactically clean subset of C**, avoiding pointers, dynamic structures, or advanced features unless they are strictly required to emulate Flowgorithm semantics.
---
## Challenges in Translating Flowgorithm to C
C is a low-level language that lacks many of the high-level features available in Flowgorithm or languages like C# and Java.
To maintain compatibility with Flowgorithm's execution model, several non-trivial problems had to be solved.
Below is an overview of the main design challenges and the chosen solutions.
---
### 1. Typed Input and Conversion Functions
Flowgorithm accepts user input interactively and converts it to the proper type.
C does not provide such behaviour natively, therefore this template defines custom helpers:
- `inputValue()` — reads a full line and parses it as `double`
- `inputInt()` — parses an integer
- `inputBool()` — parses a boolean using Flowgorithm’s rules
- `inputString()` — reads an entire line, preserving spaces
Parsing is done using `fgets()` combined with `strtod`, `strtol`, or custom string analysis.
This ensures that invalid input does not break the program: instead, the functions loop until a valid value is provided, reproducing Flowgorithm’s behaviour as closely as possible.
---
### 2. Boolean Support
In standard C, booleans are extremely primitive (`bool` from `` is just an integer).
Flowgorithm, instead, uses the strings `"true"` and `"false"` during input and output.
To match this behaviour:
- Boolean input accepts only `"true"` or `"false"` (case-insensitive, no spaces).
- Boolean output prints exactly `"true"` or `"false"`.
- Internally, C still stores booleans as `bool`.
This approach preserves the Flowgorithm model without confusing beginners about how booleans work in real-world C code.
---
### 3. String Handling
Strings are the most delicate part of the translation.
Flowgorithm treats strings as high-level immutable values.
C, instead, has only null-terminated byte arrays, without automatic resizing or concatenation.
This template implements:
- All strings as `char*` obtained via `malloc`
- A safe `stringConcat(const char*, const char*)` that returns newly allocated strings
- `inputString()` that dynamically allocates and returns the full user input
- `toString(double)` using a static buffer for temporary conversions, as expected in C
This makes string expressions like:
result = "literal one" + s1 + "literal two" + s2
work correctly, even when chained.
Memory is intentionally not freed automatically so as not to overwhelm beginners with memory management: Flowgorithm itself assumes automatic lifetime.
---
### 4. Array Size: Limitations of C
Flowgorithm supports an intrinsic function `Size(array)`.
In C, however:
- Array length can be computed using `sizeof(array) / sizeof(array[0])`
- **But only inside the same scope where the array is declared**
- When an array is passed to a function, it decays to a pointer (`int*`, `double*`, etc.), losing all size information.
For this reason, the first release adopts a simple didactic rule:
> Arrays are declared using standard C syntax, but `Size(array)` is only valid in the scope of the declaration.
> When calling user-defined functions, the programmer must explicitly pass the number of elements.
Example:
```c
void bubbleSortInt(int a[], int n);
int arr[20];
int n = Size(arr); // Works here
bubbleSortInt(arr, n); // n must be forwarded
```
This limitation reflects the true behaviour of the C language and helps students learn correct array handling.
## Repository structure
```
flowgorithm-c-template/
│
├── C.fpgt # The actual Flowgorithm language template for C
├── Examples/ # Flowgorithm sample files + generated C output
├── README.md # Documentation (this file)
└── LICENSE # Open-source license
```
## Contributing
Contributions are welcome.
Several areas can be extended or improved:
- Memory-safe string utilities
- Richer output formatting
- Optional free() calls for advanced users
- Support for file I/O
- More robust boolean parsing
- Extended math library integration
- Improvements to nested function generation
Feel free to open issues or pull requests.
## License
This project is released under the MIT License.
You are free to fork, extend, and redistribute it.