Skip to content

Commit 092271f

Browse files
committed
Work on truth table page, add input and parsing
1 parent 2d6e9b8 commit 092271f

File tree

1 file changed

+58
-0
lines changed
  • BooleanExpressionParserWeb/BooleanExpressionParserWeb/Client/Pages

1 file changed

+58
-0
lines changed
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
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

Comments
 (0)