Создание вопроса о языке программирования - PullRequest
1 голос
/ 11 апреля 2011

Я думаю о создании собственного (небольшого) языка программирования (синтаксиса) на основе C. Я не понимаю, как Apple реализовала target-c с такими операторами, как [testClass runThis: true];с этим синтаксисом.

Как мне реализовать собственный синтаксис для моего собственного языка c

Ответы [ 5 ]

5 голосов
/ 11 апреля 2011

Возможно, вы захотите взглянуть на Clang (интерфейс C, C ++ и Obj-C компилятора LLVM) и Eero Programming Language , новый язык, основанный на Objective- C, который был построен с LLVM. Оба проекта с открытым исходным кодом.

2 голосов
/ 11 апреля 2011

Для начала вам нужно реализовать парсер и лексер.Один из способов сделать это - получить синтаксис и грамматику C от K & R "Язык программирования C" и использовать их в качестве входных данных для Flex и Bison для создания автономного парсера.Это будет анализировать синтаксически допустимые программы на Си.После этого вы можете настроить его так, как хотите, и настроить его.

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

1 голос
/ 11 апреля 2011

Вам придется написать компилятор.Если ваша семантика подходит, вы можете скомпилировать непосредственно в C-код;в противном случае вам придется также написать какое-то время выполнения для кусочков вашего языка, которые нелегко и напрямую переводить на C. Учитывая, что вы говорите о небольшом языке на основе C, это, вероятно, не проблема.

Как ты это делаешь?Ой.Человек.

Существуют десятки книг, статей, учебных пособий и т. Д. По теме написания компилятора .Хотя ни одна отдельная часть компилятора не является особенно сложной (по крайней мере, для наивных, неоптимизирующих компиляторов), есть множество вещей, с которыми приходится бороться различными способами, часто способами, которые слегка несовместимы друг с другом.

По крайней мере, вам понадобится лексер (обычно с помощью автоматизированного инструмента, такого как flex , или как часть набора компиляторов, такого как ANTLR * 1014.*), синтаксический анализатор (обычно через автоматизированные инструменты, такие как Bison и вышеупомянутый ANTLR) и генератор кода (обычно генерируется вручную).В действительности вам, вероятно, захочется вставить дерево абстрактного синтаксиса между анализатором и генератором кода, чтобы предоставить вам (или кому-то еще) пространство для реализации различных оптимизаций и для генерации кодапроще.

На эту тему доступно много книг , не говоря уже о научных статьях.Повеселись.То, что вы пытаетесь сделать, - это сложная задача, но полезная, когда вы ее выполняете.

1 голос
/ 11 апреля 2011

Бит внутри [...] основан на синтаксисе Smalltalk .

Что касается разработки собственного языка, это довольно большой вопрос. Вам нужно ознакомиться с контекстно-свободными грамматиками , лексическим анализом , парсерами рекурсивного спуска , парсерами LALR , а у нас даже нет добрался до проблемы генерации исполняемого кода еще. Тем не менее, все это весело. Разработка и внедрение работоспособных компьютерных языков - сложная, но (IMO) полезная задача.

0 голосов
/ 11 апреля 2011

Подойдите к C ++, и у вас есть возможность создать DSEL (специфичный для домена встроенный язык). Я не знаю, какую проблему вы пытаетесь решить, но хорошо спроектированный DSEL может быть гораздо удобнее, чем разработка собственного языка и создание синтаксических анализаторов, компиляторов и т. Д. Для понимания используйте копию этой книги: C ++ Шаблон метапрограммирования

...