Skip to content

Commit 12f2eb3

Browse files
committed
Add ability to control variable order using ; symbol
1 parent 8e4c2bc commit 12f2eb3

File tree

1 file changed

+22
-9
lines changed

1 file changed

+22
-9
lines changed

BooleanExpressionParser/Program.cs

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,32 @@ static void Main(params string[] args)
99
{
1010
Console.OutputEncoding = Encoding.UTF8;
1111

12+
List<ExpressionWrapper> expressions;
13+
1214
if (args.Length == 0)
1315
{
14-
args = QueryExpressions();
16+
expressions = QueryExpressions();
17+
}
18+
else
19+
{
20+
expressions = new List<ExpressionWrapper>();
21+
foreach (string arg in args)
22+
{
23+
expressions.Add(new ExpressionWrapper(arg));
24+
}
1525
}
1626

1727
var tables = new List<string>();
1828

19-
foreach (var expression in args)
29+
foreach (var expression in expressions)
2030
{
21-
var tokeniser = new Tokeniser(expression);
31+
var tokeniser = new Tokeniser(expression.Expression);
2232
var infixTokens = tokeniser.Tokenise();
2333

2434
var parser = new Parser();
2535
var prefixTokens = parser.ParseTokens(infixTokens);
2636

27-
var ast = parser.GrowAst(prefixTokens);
37+
var ast = parser.GrowAst(prefixTokens, expression.VariableOrder);
2838

2939
int numCombinations = (int)Math.Pow(2, ast.Variables.Count);
3040
var table = new List<bool[]>();
@@ -39,7 +49,7 @@ static void Main(params string[] args)
3949
table.Add(values.Append(result).ToArray());
4050
}
4151

42-
tables.Add(Formatter.FormatTruthTable(ast, table, label: expression));
52+
tables.Add(Formatter.FormatTruthTable(ast, table, label: expression.Expression));
4353
}
4454

4555
if (tables.Count > 1)
@@ -53,9 +63,9 @@ static void Main(params string[] args)
5363
}
5464

5565

56-
static string[] QueryExpressions()
66+
static List<ExpressionWrapper> QueryExpressions()
5767
{
58-
var expressions = new List<string>();
68+
var expressions = new List<ExpressionWrapper>();
5969

6070
Console.WriteLine("Enter expressions, one per line. Press enter on a blank line to continue.");
6171

@@ -66,9 +76,12 @@ static string[] QueryExpressions()
6676

6777
if (string.IsNullOrWhiteSpace(line)) break;
6878

69-
expressions.Add(line);
79+
var expression = new ExpressionWrapper(line);
80+
expressions.Add(expression);
7081
}
7182

72-
return expressions.ToArray();
83+
return expressions;
7384
}
85+
86+
7487
}

0 commit comments

Comments
 (0)