Вопросы по созданию собственного маленького языка - PullRequest
1 голос
/ 27 октября 2019

Итак, прежде чем читать это: знайте, что я всего лишь ребенок, и постарайтесь не быть слишком резким со мной, пожалуйста.

Итак, я хотел получить некоторый опыт, и я хотел начать создавать свой собственный маленький язык,Ничего особенного. Я уже решил, что собираюсь работать с Java.

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

Я уже создал что-то до того, что будет иметь собственный синтаксис и прочее, а затем будет перенесено в c ++, а затем этот код c ++ будет скомпилирован для получения результата. Мой вопрос: это действительно можно назвать языком? Просто пишу код в произвольном синтаксисе, а затем меняю этот код на другой язык, чтобы мне не приходилось заниматься компиляцией и прочим.

Во-вторых, как мне создать нечто, что позаботится об этой компиляции / интерпретации? вместо того, чтобы зависеть от другого языка, от переноса и прочего.

Редактировать: это пример того, что я создал некоторое время назад, но только недавно добавил в свой github, когда узнал об этом. https://github.com/SupremeDeity/MTL.

Я знаю, что это нельзя назвать чем-то похожим на язык. Также вы можете дать мне совет по java / c ++ / python и никаким языкам, кроме этого. Мне комфортно работать только с этими 3

1 Ответ

1 голос
/ 28 октября 2019

Возможно, вам потребуется определить синтаксис для вашего языка и написать для него грамматику. Затем вам нужно написать свой собственный лексер и парсер и спроектировать серверную часть, то есть интерпретатор и / или компилятор.

Поскольку вы знаете о концепции лексеров и парсеров, я бы предложилВы читаете код других людей и видите, как они это делают. На ум приходят три ресурса, которые могут дать вам идеи о том, как действовать:

1) MAL (Make a A Lisp) [https://github.com/kanaka/mal] - автор предлагает простой appproch для разработки LISP-подобногоязык и ведет вас шаг за шагом. Забавная часть: вы выбираете язык, на котором будете разрабатывать свою версию MAL. Даже если LISP может и не быть вашей вещью, каждый шаг очень информативен, а результат поразителен. Там даже есть реализация Java.

Rosetta Code - Parse EBNF [https://rosettacode.org/wiki/Parse_EBNF] - Rosetta Code представляет проблемы, которые должны быть решены с использованием вашего языка по вашему выбору. В этом конкретном случае не так много альтернативных языков были представлены. Кстати, реализация Java отсутствует. А поскольку вам понадобится парсер, почему бы не один для EBNF, языка для описания языков?

Создание переводчиков [https://craftinginterpreters.com/] - это замечательная электронная книгаэто пишется, когда мы говорим. Автор освещает очень интересные и практичные темы. Он использует c ++ в качестве базового языка, но я думаю, вы будете чувствовать себя здесь как дома.

Удачи!

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