Как бы я написал проверку синтаксиса? - PullRequest
2 голосов
/ 23 октября 2011

Я заинтересован в написании средства проверки синтаксиса для языка. По сути, я хочу создать инструмент cli, который будет принимать входной файл, а затем записывать найденные ошибки. Язык, который я хотел бы проанализировать, в основном похож на язык Тьюринга, и он довольно уродлив, а иногда и труден для работы. Единственный другой синтаксический контролер для этого должен использоваться

Какой язык мне использовать? Я подумал, что напишу это на Ruby, но Python может быть быстрее или лучше разбирать библиотеки.

Какие библиотеки мне следует использовать, в Ruby или Pearl? Что было бы проще.

Есть ли учебник для чтения для определения грамматики? Такая задача может сбить с толку, и я не уверен, как бы я справился с ней.

1 Ответ

1 голос
/ 23 октября 2011

Если бы это был я, я бы написал это на Ruby, а потом беспокоился о скорости. Если программа стала хитом, я мог бы добавить собственный гем, чтобы ускорить самый медленный бит, но оставить большую его часть в Ruby. Если это станет самой важной программой в мире, или если мне больше нечего делать, я мог бы переписать ее на C или C ++, но не раньше.

И я бы все проанализировал, используя Treetop.

Могу добавить, что написание и оптимизация синтаксического анализатора языка непосредственно в C - это интересный опыт обучения. Вы не получаете никакой помощи при обработке строк, поэтому в итоге вы выполняете весь анализ, но у вас есть шанс выполнить только минимальный объем обработки. Это своего рода противоположность опыта Ruby. Чтобы получить максимальную скорость, вы в конечном итоге делаете что-то вроде написания фронтов для malloc, где несколько объектов, которые, как вы знаете, вам никогда не нужно освобождать, постоянно выделяются в блокируемом блоке. Хотя использование yacc (1) в C / C ++ типично, вы, безусловно, можете написать синтаксический анализатор с рекурсивным спуском и получить еще более глубокий опыт обучения.

Конечно, сделав все это уже, я рад остаться с Руби в эти дни.

...