Skip to content

Commit 181af2b

Browse files
committed
Added customisable label to table formatter
1 parent 1572b75 commit 181af2b

File tree

3 files changed

+18
-32
lines changed

3 files changed

+18
-32
lines changed

v2/BooleanExpressionParser/.vscode/launch.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
"preLaunchTask": "build",
99
"program": "${workspaceFolder}/bin/Debug/net6.0/BooleanExpressionParser.dll",
1010
"args": [
11-
// "A.B",
12-
// "A+B",
13-
// "!(A+B+C)",
14-
// "(((A.B&C) OR A) AND (NOT B + !C)) AND NOT D",
11+
"A.B",
12+
"A+B",
13+
"!(A+B+C)",
14+
"(((A.B&C) OR A) AND (NOT B + !C)) AND NOT D",
1515
"!S.D_0 + D_1 AND S",
1616
],
1717
"cwd": "${workspaceFolder}",

v2/BooleanExpressionParser/Formatter.cs

Lines changed: 13 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ namespace BooleanExpressionParser;
44

55
class Formatter
66
{
7-
public static string FormatInfixTokens(IEnumerable<Token> tokens)
7+
public static string FormatTokens(IEnumerable<Token> tokens)
88
{
99
var sb = new StringBuilder();
1010

@@ -16,36 +16,24 @@ public static string FormatInfixTokens(IEnumerable<Token> tokens)
1616
return sb.ToString();
1717
}
1818

19-
public static string FormatPrefixTokens(IEnumerable<Token> tokens)
20-
{
21-
var sb = new StringBuilder();
22-
23-
foreach (var token in tokens)
24-
{
25-
sb.Append(token.ToString());
26-
sb.Append(" ");
27-
}
28-
29-
return sb.ToString();
30-
}
31-
32-
public static string FormatTruthTable(Ast ast, List<bool[]> table)
19+
public static string FormatTruthTable(Ast ast, List<bool[]> table, string label="Result")
3320
{
3421
var sb = new StringBuilder();
3522

3623
var variableLine = ast.Variables.Select(v => Repeat('━', v.Length + 2)).ToList();
24+
var resultLine = Repeat('━', label.Length + 4);
3725

3826
sb.Append("┏━");
39-
variableLine.ForEach(s => sb.Append(s));
40-
sb.AppendLine("━┳━━━━━━━━┓");
27+
sb.AppendJoin(null, variableLine);
28+
sb.AppendLine($"━┳{resultLine}┓");
4129

4230
sb.Append("┃ ");
4331
ast.Variables.ForEach(v => sb.Append($" {v} "));
44-
sb.AppendLine(" ┃ Result ┃");
32+
sb.AppendLine($" ┃ {label} ┃");
4533

4634
sb.Append("┣━");
47-
variableLine.ForEach(s => sb.Append(s));
48-
sb.AppendLine("━╋━━━━━━━━┫");
35+
sb.AppendJoin(null, variableLine);
36+
sb.AppendLine($"━╋{resultLine}┫");
4937

5038
foreach (bool[] row in table)
5139
{
@@ -57,12 +45,14 @@ public static string FormatTruthTable(Ast ast, List<bool[]> table)
5745
sb.Append($"{pad1}{(row[i] ? '1' : '0')}{pad2} ");
5846
}
5947

60-
sb.AppendLine($" ┃ {(row[^1] ? '1' : '0')} ┃");
48+
string pad3 = Repeat(' ', (int)Math.Ceiling(label.Length / 2.0f));
49+
string pad4 = Repeat(' ', (int)Math.Floor(label.Length / 2.0f));
50+
sb.AppendLine($" ┃ {pad3}{(row[^1] ? '1' : '0')}{pad4} ┃");
6151
}
6252

6353
sb.Append("┗━");
64-
variableLine.ForEach(s => sb.Append(s));
65-
sb.AppendLine("━┻━━━━━━━━┛");
54+
sb.AppendJoin(null, variableLine);
55+
sb.AppendLine($"━┻{resultLine}┛");
6656

6757
return sb.ToString();
6858
}

v2/BooleanExpressionParser/Program.cs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@ static void Main(params string[] args)
1717

1818
var parser = new Parser();
1919
var prefixTokens = parser.ParseTokens(infixTokens);
20-
21-
Console.WriteLine($"Infix: {Formatter.FormatInfixTokens(infixTokens)}");
22-
Console.WriteLine($"Prefix: {Formatter.FormatPrefixTokens(prefixTokens)}");
23-
2420
var ast = parser.GrowAst(prefixTokens);
2521

2622
var evaluator = new Evaluator(ast);
2723
var table = evaluator.EvaluateAll();
2824

29-
var tableString = Formatter.FormatTruthTable(ast, table);
25+
var tableString = Formatter.FormatTruthTable(ast, table, label: Formatter.FormatTokens(infixTokens));
3026
Console.WriteLine(tableString);
3127
}
3228
}

0 commit comments

Comments
 (0)