Парсер рекурсивного спуска и функциональное программирование

Итак, в последнее время я работал над написанием простого компилятора, чтобы лучше понимать концепции компилятора. Как прилежный читатель stackoverfolow, похоже, существует консенсус в том, что написать компилятор на функциональном языке проще, чем на императивном. С этой целью я подумал, что попробую убить двух зайцев и напишу компилятор на F #, чтобы одновременно выучить функциональный язык и написать компилятор.

Я прочитал книгу о драконах и решил начать с Парсер рекурсивного спуска, написанный вручную на F #. Однако книга дракона имеет почти все образцы кода в императивном стиле. Например, функция токена совпадения выполняет значительную часть своей работы через побочный эффект.

Итак, мой вопрос: как бы выглядел более традиционный функциональный подход к синтаксическому анализу (то есть с небольшим количеством побочных эффектов)? Я знаю, что компилятор Haskell (GHC) написан на Haskell, но я был бы признателен за несколько меньший и более простой для понимания образец кода.

Во-вторых, стоит ли попробовать применить функциональный подход к синтаксическому анализу, или он действительно включен Оптимизация промежуточного кода, функциональные языки сияют, а я еще не дошел до этого? То есть, следует ли мне возиться с синтаксическим анализом в F #, используя императивный стиль, и переключаться на более функциональный подход позже?

27
задан Samsdram 11 December 2010 в 00:26
поделиться