File tree Expand file tree Collapse file tree 2 files changed +89
-0
lines changed
BooleanExpressionParser.Web/Client Expand file tree Collapse file tree 2 files changed +89
-0
lines changed Original file line number Diff line number Diff line change 1+ @foreach ( var item in Ast .Variables )
2+ {
3+ <span >@item </span >
4+ <input size =" 3" @bind =" inputs[item]" />
5+ }
6+
7+ <button @onclick =" OnButtonClicked" >Evaluate</button >
8+
9+
10+ @code {
11+ [Parameter ]
12+ public Ast Ast { get ; set ; }
13+
14+ [Parameter ]
15+ public EventCallback <Dictionary <string, string? >> EvaluateClicked { get ; set ; }
16+
17+ private Dictionary <string , string? > inputs = new ();
18+
19+ private Task OnButtonClicked ()
20+ {
21+ return EvaluateClicked .InvokeAsync (inputs );
22+ }
23+
24+ protected override void OnParametersSet ()
25+ {
26+ base .OnParametersSet ();
27+
28+ foreach (var item in Ast .Variables )
29+ {
30+ if (! inputs .ContainsKey (item )) inputs .Add (item , null );
31+ }
32+ }
33+ }
Original file line number Diff line number Diff line change 1+ @page " /evaluator"
2+ @using BooleanExpressionParser .Web .Client .Components
3+
4+ <PageTitle >Expression Evaluator</PageTitle >
5+
6+ <h1 >Expression Evaluator</h1 >
7+ <p >Produces the output of an expression for given values.</p >
8+
9+ <ExpressionInput ButtonLabel =" Load" ButtonClicked =" ParseExpression" ExpressionChanged =" ExpressionChanged" />
10+
11+ @if (expressionParsed )
12+ {
13+ <ValueInput Ast =" ast" EvaluateClicked =" Evaluate" />
14+ }
15+
16+ @if (result is not null )
17+ {
18+ <h2 >@result </h2 >
19+ }
20+
21+ @code {
22+ private bool expressionParsed = false ;
23+ private Ast ? ast ;
24+ private bool ? result ;
25+
26+ private void ExpressionChanged (string _ )
27+ {
28+ expressionParsed = false ;
29+ result = null ;
30+ }
31+
32+ private void ParseExpression (string ? expression )
33+ {
34+ if (string .IsNullOrWhiteSpace (expression )) return ;
35+ var wrapper = new ExpressionWrapper (expression );
36+
37+ var tokeniser = new Tokeniser (wrapper .Expression );
38+ var infixTokens = tokeniser .Tokenise ();
39+
40+ var parser = new Parser ();
41+ var postfixTokens = parser .InfixToPostfix (infixTokens );
42+
43+ ast = parser .GrowAst (postfixTokens , wrapper .VariableOrder );
44+
45+ expressionParsed = true ;
46+ }
47+
48+ private void Evaluate (Dictionary < string , string ? > inputs )
49+ {
50+ // Parse inputs
51+ var values = inputs .Select (x => new { Key = x .Key , Value = x .Value == " 1" }).ToDictionary (pair => pair .Key , pair => pair .Value );
52+
53+ result = ast .Root .Evaluate (values );
54+ }
55+ }
56+
You can’t perform that action at this time.
0 commit comments