Я хочу создать очень простой экспериментальный язык программирования. Какие ресурсы я могу проверить, чтобы получить обзор процесса создания интерпретируемого языка. Я буду использовать C++ для создания и компиляции интерпретатора.Каков процесс создания интерпретируемого языка?
ответ
Вы должны реализовать как синтаксический анализатор и интерпретатор.
Существует большой свободный текст книги под названием «Языки программирования: Применение и интерпретация», которая использует схему для создания все более сложных переводчиков. Он также служит отличным введением в функции языка программирования.
Проверьте это здесь: http://www.cs.brown.edu/~sk/Publications/Books/ProgLangs/
Если схема не ваша чашка чая может быть стоит посмотреть в.
heh Схема и C++ - это далеко друг от друга. – Earlz
Ничего себе, это выглядит действительно хорошая книга. +1 для ссылки. –
I понять, что C++ и схема нигде не близки друг к другу по спектру языков, но подход, который эта книга берет с помощью Схемы, может привести к тому, что искатель узнает больше о базовых принципах языкового дизайна. – Ben
Посмотрите на библиотеку подталкивание «духа» LL анализатор.
Несколько шагов:
Во-первых, построить лексический анализатор и анализатор. Это очень легко сделать с обычными инструментами, такими как lex и yacc, или с использованием более современных фреймворков, таких как Antlr (это то, что я рекомендую). Эти инструменты будут генерировать исходный код для вашего целевого языка, который вы затем сможете скомпилировать и включить в свой проект.
Лексер и анализатор будет создавать внутреннее представление исходного файла. Есть несколько различных способов приближения к этому:
- В модели байткода, исходный файл компилируется в внутреннем язык низкого уровня, для которого вы пишете байткода переводчика с, который непосредственно выполняет операцию , Например, работают языки Perl и .NET.
- В объекта дерево модели, исходный файл компилируется в дереве объектов, где каждый объект знает, как выполнить сам. После завершения разбора вы просто вызываете
Exec()
на корневой объект (который, в свою очередь, вызываетExec()
на своих дочерних элементах и т. Д.). Это в основном метод, который я использую для моего интерпретированного языка для домена Phonix.
Чтобы создать интерпретируемый язык, вам нужно создать две вещи:
- Формальное определение грамматики языка
- синтаксический анализатор, который может читать и интерпретировать язык
После того, как вы определили сам язык, есть несколько инструментов, которые могут помочь в создании парсера языка. Классическими инструментами являются lex и yacc, а их версии с открытым исходным кодом flex и bison.
- 1. Смутно о преимуществах интерпретируемого языка
- 2. Каков процесс создания Тупика?
- 3. Каковы процессы для анализа интерпретируемого языка программирования?
- 4. Определение скомпилированного vs интерпретируемого языка относительно node.js
- 5. В чем преимущества интерпретируемого языка в отношении скомпилированного языка?
- 6. C# Каков процесс создания/установки сервиса?
- 7. Процесс создания/обновления CocoaPod
- 8. Каков ваш рабочий процесс для создания сайтов на основе WordPress?
- 9. Каков процесс создания веб-приложения Universal/Isomorphic React/Redux?
- 10. Каков процесс создания AlertDialog с ListView в Android?
- 11. Каков процесс этого выхода?
- 12. Каков процесс выполнения ArrayList?
- 13. Каков оптимальный способ выбора языка?
- 14. Каков наилучший способ переучивания языка?
- 15. Каков ваш способ изучения языка?
- 16. PHP: Каков наилучший способ создания языка запросов более высокого уровня для создания фильтра критериев в yii
- 17. обнаружить процесс создания
- 18. процесс создания файла поврежден
- 19. Процесс создания веб-сервера
- 20. Процесс создания потоков Java
- 21. Процесс создания пакета?
- 22. Недостаток создания библиотеки языка c
- 23. Можете ли вы «строить» с помощью PHP-скриптов или интерпретируемого языка?
- 24. Каков ваш процесс управления ошибками?
- 25. Каков процесс подключения к Wordpress.com?
- 26. Каков процесс декодирования запроса SAML?
- 27. Процесс естественного языка: выберите категорию текста?
- 28. Получить дескриптор блока, вызывающего функцию интерпретируемого Matlab
- 29. Каков хороший подход для создания нового компилятора?
- 30. Каков наилучший рабочий процесс для веб-приложения?
Это немного слишком LISP. –
@Neil: в то время как похоже, это не дубликат - он спрашивает об интерпретаторе Lisp, и ответы в основном эксклюзивные для Lisp. Хотя язык OP * может * быть достаточно, как Lisp для тех, кто применим, нет никакой определенности. –
Связанный: http://stackoverflow.com/questions/1669/learning-to-write-a-compiler –