1+ @using BooleanExpressionParser ;
2+ @page " /truth-table"
3+
4+ <PageTitle >Truth Table Generator</PageTitle >
5+
6+ <h1 >Truth Table Generator</h1 >
7+ <p >Generate a truth table for a boolean expression.</p >
8+
9+ <input placeholder =" Enter expression" @bind =" expression" />
10+ <button @onclick =" Generate" >Generate</button >
11+
12+
13+ @code {
14+ private string ? expression ;
15+
16+ private void Generate ()
17+ {
18+ if (string .IsNullOrWhiteSpace (expression )) return ;
19+
20+ var ast = ParseAndGrowAst ();
21+
22+ int numCombinations = (int )Math .Pow (2 , ast .Variables .Count );
23+ var table = new List <bool []>();
24+ for (int i = 0 ; i < numCombinations ; i ++ )
25+ {
26+ var binary = Convert .ToString (i , 2 ).PadLeft (ast .Variables .Count , '0' );
27+ var values = binary .Select (c => c == '1' ).ToArray ();
28+
29+ var variables = ast .Variables .Zip (values , (k , v ) => new { k , v }).ToDictionary (x => x .k , x => x .v );
30+
31+ var result = ast .Root .Evaluate (variables );
32+ table .Add (values .Append (result ).ToArray ());
33+ }
34+
35+ foreach (bool [] row in table )
36+ {
37+ foreach (bool cell in row )
38+ {
39+ Console .Write ($" {(cell ? " 1" : " 0" )}," );
40+ }
41+ Console .WriteLine ();
42+ }
43+
44+ }
45+
46+ private Ast ParseAndGrowAst ()
47+ {
48+ var wrapper = new ExpressionWrapper (expression );
49+
50+ var tokeniser = new Tokeniser (wrapper .Expression );
51+ var infixTokens = tokeniser .Tokenise ();
52+
53+ var parser = new Parser ();
54+ var postfixTokens = parser .InfixToPostfix (infixTokens );
55+
56+ return parser .GrowAst (postfixTokens , wrapper .VariableOrder );
57+ }
58+ }
0 commit comments