truth-table-dsl is a small domain-specific language (DSL) and CLI toolset for working with Boolean logic.
It parses logical expressions, lists the variables used, and generates full truth tables.
Built with ANTLR 4 (Go target) and Go.
- Operators (with precedence & associativity):
!
— NOT (highest precedence, unary)&
— AND|
— OR (inclusive)
- Literals:
true
,false
- Parentheses for grouping
- Identifiers: variables like
A
,B
,x1
,foo
tt
— generate a full truth table for an expressionvars
— list all variables used in an expression
Clone and build from source:
git clone https://github.com/syedazeez337/truth-table-dsl.git
cd truth-table-dsl
# build executables
go build -o .\bin\tt.exe .\cmd\tt
go build -o .\bin\vars.exe .\cmd\vars
Executables will appear in ./bin
.
.\bin\tt.exe "A & !B | C"
Output:
A B C expr
F F F F
F F T T
F T F F
F T T T
T F F T
T F T T
T T F F
T T T T
.\bin\vars.exe "A & !B | C"
Output:
OK
vars: A, B, C
Both tools also read from stdin:
echo "(true | A) & !false" | .\bin\tt.exe
ANTLR4 grammar (current):
grammar TruthExpr;
expr
: '!' expr # Not
| expr '&' expr # And
| expr '|' expr # Or
| '(' expr ')' # Parens
| TRUE # TrueLit
| FALSE # FalseLit
| IDENT # Var
;
TRUE : [Tt] [Rr] [Uu] [Ee] ;
FALSE : [Ff] [Aa] [Ll] [Ss] [Ee] ;
IDENT : [A-Za-z_] [A-Za-z_0-9]* ;
WS : [ \t\r\n]+ -> skip ;
LINE_COMMENT : '//' ~[\r\n]* -> skip ;
.
├── grammar/ # ANTLR grammar (.g4)
├── parser/ # Generated Go parser (antlr4 -Dlanguage=Go …)
├── internal/engine # Shared Go code (parse, eval, truth table)
├── cmd/
│ ├── tt/ # Truth table CLI
│ └── vars/ # Variable lister CLI
└── bin/ # Built executables
This project is an educational DSL for Boolean logic. It demonstrates how to:
- Write an ANTLR grammar
- Generate a Go parser
- Evaluate Boolean expressions
- Enumerate variables and build truth tables
Useful for learning propositional logic, ANTLR, and compiler-style DSLs in Go.
MIT. See LICENSE.