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

https://github.com/4ster-light/f-logic

Implementation of a logic formula parser and truth table generator in F#
https://github.com/4ster-light/f-logic

fsharp interpreter lexer parser

Last synced: 9 months ago
JSON representation

Implementation of a logic formula parser and truth table generator in F#

Awesome Lists containing this project

README

          

# 🧑‍💻 f-logic

Implementation of a logic formula parser and truth table generator in Python.

## 📚 Table of Contents

- [📜 Overview](#-overview)
- [🛠 Usage](#-usage)
- [📋 Requirements](#-requirements)
- [📄 License](#-license)
- [💝 Sponsor](#-sponsor)

## 📜 Overview

This project is meant as educational material in order to learn about basic
interpreters and the process of lexing and parsing a language as well as the
concept of AST (Abstract Syntax Tree), therefore why it supports only basic
logic symbols.

The choice of interpreting logic formulas was made due to its relative
simplicity and the fact that it is related to computer science.

This second tutorial is
written in F# in order to learn about the language and showcase why functional
programming is a good choice for this kind of project, due to its strong
algebraic data types and common patterns like recursion and pattern matching.
You can find the Python version (easier and more readable for beginners) of this
project [here](https://github.com/4ster-light/py-logic) with the corresponding
tutorial
[here](https://aster.deno.dev/posts/introduction-to-interpreters/).

## 🛠 Usage

- Run `dotnet run` to generate a truth table for the given formula:

```bash
$ dotnet run

Enter a logical formula (e.g., P & Q -> R, !A | B):

P & Q -> R

P | Q | R | P & Q -> R
----------+-----------
T | T | T | T
T | T | F | F
T | F | T | T
T | F | F | T
F | T | T | T
F | T | F | T
F | F | T | T
F | F | F | T
```

- Run `dotnet run -- --debug` to see the tokens and AST generated by the parser:

```bash
$ dotnet run -- --debug

Enter a logical formula (e.g., P & Q -> R, !A | B):

P & Q -> R

- Formula:
- P & Q -> R
- Tokens:
- Variable "P"
- AndOp
- Variable "Q"
- ImpliesOp
- Variable "R"
- Eof
- Expression:
- Implies (And (Var "P", Var "Q"), Var "R")
```

## 📋 Requirements

Only .NET 9.0 is required.

## 📄 License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
for details.

## 💝 Sponsor

If you like this project, consider supporting me by buying me a coffee.

[![ko-fi](https://ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/B0B41HVJUR)