Читайте в Хаскеле - PullRequest
       2

Читайте в Хаскеле

0 голосов
/ 28 сентября 2011

Можно использовать примитивное чтение Scheme, которое потребляет поток символов и выводит s-выражение (sexpr).

Я пытаюсь написать парсер в Haskell.Что эквивалентно вышесказанному?Как бы я реализовал это так, чтобы, если передано "{+ {- 3 4} 7}", оно возвращает (list '+ (list '- 3 4) 7) (или эквивалент)?

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 28 сентября 2011

Вам лучше использовать правильную библиотеку разбора, такую ​​как uu-parsinglib , polyparse или parsec .

You может злоупотреблять Read для анализа произвольного String в некотором представлении данных (которое вам придется определить).

1 голос
/ 28 сентября 2011

Я думаю, что один из первых вопросов, который задают все новички в haskell, когда они хотят знать: «Могу я что-нибудь сделать?»такое «какими должны быть типы?».Если вы хотите сделать то, что вам нужно, то я бы предложил написать AST примерно так:

data AST = Num Int
         | Add AST AST
         | Sub AST AST
         | Mul AST AST
         etc.

Тогда вы могли бы написать потенциально парсер с типом:

parseAST :: String -> AST

Чтобы написать этот синтаксический анализатор, вы, вероятно, захотите использовать что-то вроде parsec, хотя, если вы описали грамматику, то вы, вероятно, могли бы написать свой собственный синтаксический анализ, который будет работать довольно хорошо (и поможет вам научиться)..

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

* Я уверен, что есть способы сделать это, но я чувствовал, что более важно развивать идеи, которые начинающий программист haskell должен изучить, прежде чем перейти к более сложным темам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...