Здравствуйте, MacDed, Вы писали:
MD>Нужно написать интерпритатор мат выражений на Ocaml ,есть знаки : '+','-','*','/' т.е.
MD>чтоб такие вещи обрабатывал
MD> (((1+1)+(4-5))*3+14/3)/3-43+(53+61)
MD>ну как я это задание понимаю надо на вход такую вот строчку подать
MD>и распихать её значения в список (list)
А зачем в список? AST на базе алгебраических типов, т.е. datatype, рулит.
MD>все скобочки,знаки и числа от 0-9 спокойно в такой лист влезают как символы
MD>Но числа типа 14,53... и общим словом более 1ого знака в char не лезут
Ну так задай что-то вроде (OCaml не знаю, так что пример на родственном StandardML):
datatype Expr = RealLiteral of real | Sum of Expr*Expr | Product of Expr*Expr;
а потом при помощи паттерн-матчинга без проблем эту штуковину интерпретируешь.
MD>3)Если кто может посоветовать какие нибудь идеи по реализации хорошие,пишите буду рад
У меня вот лежит реализация StandardML, называется MoscowML. В ней есть встроенные yacc/lex. Выглядит (за счёт функционального стиля) гораздо симпатичнее, чем аналогичная версия для C. Наверняка, что-то подобное имеется для OCaml. Так можно либо непосредственно интерпретатор сделать, либо вначале получить AST, а потом пропускать его через evaluator (так универсальнее).
... << RSDN@Home 1.2.0 alpha rev. 672>>