File tree Expand file tree Collapse file tree 4 files changed +12
-43
lines changed
v2/BooleanExpressionParser Expand file tree Collapse file tree 4 files changed +12
-43
lines changed Original file line number Diff line number Diff line change 1111 " A.B" ,
1212 " A+B" ,
1313 " !(A+B+C)" ,
14- " T+F+F.F" ,
15- " !A+B"
14+ " ((A.B&C) OR A) AND (NOT B + !C)"
1615 ],
1716 "cwd" : " ${workspaceFolder}" ,
1817 "console" : " integratedTerminal" , // enables input (instead of internalConsole)
Original file line number Diff line number Diff line change @@ -4,48 +4,15 @@ namespace BooleanExpressionParser;
44
55class Formatter
66{
7- public static string FormatAstAsInfix ( Node root )
7+ public static string FormatInfixTokens ( IEnumerable < Token > tokens )
88 {
99 var sb = new StringBuilder ( ) ;
1010
11- void Visit ( Node node )
12- {
13- switch ( node )
14- {
15- case AndOperatorNode op :
16- VisitAndWrap ( op . Left ) ;
17- sb . Append ( " AND " ) ;
18- VisitAndWrap ( op . Right ! ) ;
19- break ;
20-
21- case OrOperatorNode op :
22- VisitAndWrap ( op . Left ) ;
23- sb . Append ( " OR " ) ;
24- VisitAndWrap ( op . Right ! ) ;
25- break ;
26-
27- case NotOperatorNode op :
28- sb . Append ( $ "NOT (") ;
29- Visit ( op . Left ) ;
30- sb . Append ( ")" ) ;
31- break ;
32-
33- case VariableNode var :
34- sb . Append ( var . Name ) ;
35- break ;
36-
37- }
38- }
39-
40- void VisitAndWrap ( Node node )
11+ foreach ( var token in tokens )
4112 {
42- if ( node is AndOperatorNode || node is OrOperatorNode ) sb . Append ( "(" ) ;
43- Visit ( node ) ;
44- if ( node is AndOperatorNode || node is OrOperatorNode ) sb . Append ( ")" ) ;
13+ sb . Append ( token . ToString ( ) ) ;
4514 }
4615
47- Visit ( root ) ;
48-
4916 return sb . ToString ( ) ;
5017 }
5118
Original file line number Diff line number Diff line change @@ -94,7 +94,10 @@ public Ast GrowAst(IEnumerable<Token> tokens)
9494 }
9595 }
9696
97- if ( stack . Count != 1 ) throw new Exception ( "Expression invalid - stack not empty" ) ;
97+ if ( stack . Count != 1 )
98+ {
99+ throw new Exception ( $ "Expression invalid - stack not empty. Stack: { String . Join ( ", " , stack ) } ") ;
100+ }
98101
99102 var root = stack . Pop ( ) ;
100103
Original file line number Diff line number Diff line change @@ -12,17 +12,17 @@ static void Main(params string[] args)
1212
1313 foreach ( var expression in args )
1414 {
15- var trimmed = expression . Replace ( " " , "" ) ;
16- var tokeniser = new Tokeniser ( trimmed ) ;
15+ var tokeniser = new Tokeniser ( expression ) ;
1716 var infixTokens = tokeniser . Tokenise ( ) ;
1817
1918 var parser = new Parser ( ) ;
2019 var prefixTokens = parser . ParseTokens ( infixTokens ) ;
21- var ast = parser . GrowAst ( prefixTokens ) ;
2220
2321 Console . WriteLine ( $ "Expression: { expression } ") ;
24- Console . WriteLine ( $ "Infix: { Formatter . FormatAstAsInfix ( ast . Root ) } ") ;
2522 Console . WriteLine ( $ "Prefix: { Formatter . FormatPrefixTokens ( prefixTokens ) } ") ;
23+ Console . WriteLine ( $ "Infix: { Formatter . FormatInfixTokens ( infixTokens ) } ") ;
24+
25+ var ast = parser . GrowAst ( prefixTokens ) ;
2626
2727 var evaluator = new Evaluator ( ast ) ;
2828 var table = evaluator . EvaluateAll ( ) ;
You can’t perform that action at this time.
0 commit comments