Árvores de expressão C# para uma calculadora
-
13-11-2019 - |
Pergunta
Sou um novato em C#.Quero escrever um aplicativo de calculadora em C#.As árvores de expressão C # seriam uma boa maneira de ir até o fim?(Ou seja, a parte que pega uma série de pressionamentos de teclas e os transforma em uma expressão que a calculadora pode avaliar e exibir na tela...ou gráfico.)
Vou querer incluir as funções matemáticas padrão, incluindo trigonometria, logs, expoentes, etc.
Solução
Desde que sua linguagem para expressões matemáticas certamente será muito mais simples que C #, suspeito que tentando reutilizar as classes de árvores de expressão de estrutura para representar o seu ASTS e provavelmente uma receita para a frustração;Se você olhar para essas aulas, verá muitas propriedades e funcionalidades que seriam totalmente irrelevantes para sua pequena linguagem.Eu rolaria o seu próprio se eu fosse você.
Outras dicas
você pode aprender com este projeto, existem bons tutoriais sobre como ele foi feito
Você viu http://ncalc.codeplex.com ?
É extensível, rápido (por ex.tem seu próprio cache) permite fornecer funções e variáveis personalizadas em tempo de execução, manipulando eventos EvaluateFunction/EvaluateParameter.Exemplos de expressões que ele pode analisar:Expressão e = nova Expressão("Rodada(Pow(Pi, 2) + Pow([Pi2], 2) + X, 2)");
e.Parâmetros["Pi2"] = nova Expressão("Pi * Pi");e.Parâmetros["X"] = 10;
evaluateParameter += delegado (nome da string, parameterargs args) {if (name == "pi") args.result = 3.14;};
Debug.Assert(117.07 == e.Evaluate());
Ele também lida com Unicode e muitos tipos de dados nativamente.Ele vem com um arquivo de chifre se você quiser alterar a gramática.Há também um fork que suporta MEF para carregar novas funções.
Ele também suporta operadores lógicos, strings de data/hora e instruções if.