Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/12: Рейтинг темы: голосов - 12, средняя оценка - 5.00
OpenIdea
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 14
1

Парсинг арифметических выражений

24.02.2017, 19:40. Просмотров 2353. Ответов 6
Метки нет (Все метки)

Доброго времени суток.
Как можно сделать так что бы вводимый в консоль, ЭУ или читаемый из файла текст выполнялся, например следующего вида?
C#
1
     14 + 3 / Math.Log(7)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.02.2017, 19:40
Ответы с готовыми решениями:

Интерпретатор арифметических выражений
Как сделать калькулятор который мог бы вычислять математические выражения. Например, a+b*(i/2-m) ...

Регулярные выражения для арифметических выражений
Всем привет! Нужна помощь с регулярным выражением. Имеется арифметическое выражение в виде...

Работа с регулярными выражениями для арифметических выражений
Вот задание: Дана строка, содержащая текст и арифметические выражения вида a ® b, где ® — один из...

Парсинг HTML с помощью регулярных выражений
имеем строку(вернее табличку): <table class="mesview" ><tr><td>Тип сообщения</td><td>О...

Лексический анализатор для арифметических выражений
Всем привет. Помогите плиз сделать лексический анализатор на C# Задание: Исходный язык содержит...

6
Skipper Ok
8 / 8 / 4
Регистрация: 07.11.2013
Сообщений: 63
Завершенные тесты: 2
24.02.2017, 19:50 2
Честно говоря, я вашего вопроса не понял
1
OpenIdea
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 14
24.02.2017, 20:02  [ТС] 3
Да, к сожалению я плохо формулирую то, чего хочу.
Итак, есть приложение при запуске которого мы имеем поле, в которое вводим 14 + 3 / Math.Log(7), программа распознает это, вычисляет и выводит ответ. Разумеется есть методы двойного стека, обратная польская запись и т.д., но возможно есть так же уже встроенное в язык или стороннее АПИ?
0
Skipper Ok
8 / 8 / 4
Регистрация: 07.11.2013
Сообщений: 63
Завершенные тесты: 2
24.02.2017, 20:30 4
Теперь понятнее стало. Но вопрос: вам программа нужна именно для вашего одного выражения?
0
OwenGlendower
Супер-модератор
Эксперт .NET
11433 / 9635 / 4047
Регистрация: 17.03.2014
Сообщений: 19,250
Записей в блоге: 1
Завершенные тесты: 2
24.02.2017, 20:55 5
Лучший ответ Сообщение было отмечено OpenIdea как решение

Решение

OpenIdea, System.Linq.Dynamic умеет такое делать.
C#
1
2
3
string expression = "14 + 3 / Math.Log(7)";
var func = (Func<double>)System.Linq.Dynamic.DynamicExpression.ParseLambda(new ParameterExpression[0], typeof(double), expression).Compile();
double result = func();
2
OpenIdea
0 / 0 / 1
Регистрация: 18.04.2015
Сообщений: 14
24.02.2017, 21:12  [ТС] 6
Skipper OK, нет для любого.
Спасибо, OwenGlendower, будем разбираться
0
diadiavova
4183 / 1554 / 471
Регистрация: 11.04.2015
Сообщений: 2,825
Записей в блоге: 36
24.02.2017, 21:57 7
Лучший ответ Сообщение было отмечено Элд Хасп как решение

Решение

Еще можно воспользоваться скриптовыми движками винды.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
using System;
using System.Runtime.InteropServices;
 
namespace ConsoleCS
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите выражение на языке JScript");
            Console.WriteLine(Eval(Console.ReadLine()));
            Console.WriteLine("Ready");
            Console.ReadKey();
        }
 
 
        static object Eval(string expression)
        {
            // var t = Type.GetTypeFromCLSID(new Guid("{0E59F1D5-1FBE-11D0-8FF2-00A0D10038BC}"));
            var t = Type.GetTypeFromProgID("ScriptControl");
            dynamic scriptControl = Activator.CreateInstance(t);
            scriptControl.Language = "JScript";
            var result = scriptControl.Eval(expression);
            Marshal.ReleaseComObject(scriptControl);
            return result;
        }
    }
}
Кроме JScript поддерживается еще VBScript. Подробная документация по ScriptControl здесь
Using the ScriptControl
Хотя, если использовать его по полной, то лучше подключить к проекту библиотеку Microsoft Script Control 1.0 (на вкладке COM) и работать уже с ней.
2
24.02.2017, 21:57
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2017, 21:57

Лексический анализ выражений. Формы записи выражений
Написать программу, представляющую математические выражения в форме обратной польской записи....

Лексический анализ выражений. Формы записи выражений
Уважаемые программисты помогите пожалуйста с заданием!!!!!!!!! Задание: Написать программу,...

Лексический анализ выражений. Формы записи выражений
Уважаемые форумчане помогите пожалуйста с задачей: Заранее спасибо! Добавлено через 19 часов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.