Слияние кода завершено, страница обновится автоматически
**Происхождение MapleFE**
Этот проект направлен на создание интерфейса языка программирования, который использует «Autogen» для выполнения большей части работы по лексированию и синтаксическому анализу. Проект берёт своё начало из истории нашей двадцатилетней работы в области компиляторов и языков программирования. Мы устали от множества модификаций существующих проектов с открытым исходным кодом, таких как Clang, если мы хотим внести что-то новое в язык. Поэтому мы решили создать собственный интерфейс, с которым было бы легче работать над новыми языками.
**Ключевые моменты**
1. Autogen — это ключевая идея, которая автоматически генерирует структуры данных для лексирования/синтаксического анализа в файлах .h/.cpp, которые затем включаются в интерфейс языка. Разработчики языка пишут файлы .spec, описывающие спецификации языка в каталоге языка, например, java/.
2. Алгоритм синтаксического анализа называется Wavefront. Правила классифицируются как рекурсии, а рекурсии объединяются в группу, если они достигают друг друга. Синтаксический анализ Wavefront работает с группой рекурсий. Он работает волнами до тех пор, пока не достигнет фиксированной точки.
**Каталог исходного кода**
1. Большинство языков программирования имеют очень похожий синтаксис, поэтому очень полезно поместить общую часть в общий каталог. Для этого используется shared/. Он содержит:
a) общие структуры данных, представляющие общий синтаксис;
b) общие компоненты парсера/транслятора.
2. Специфические для языка части находятся в их собственном каталоге, таком как java/. Он содержит некоторые специальные части этого языка, файлы .spec и gen_xxx.h/gen_xxx.cpp, которые генерируются autogen.
3. Инструмент autogen находится в autogen/.
4. Инструмент recdetect находится в recdetec/. Он используется для поиска рекурсий и групп рекурсий.
**Подготовка**
Следуйте инструкциям в разделе «Рекомендуемая среда разработки», чтобы установить необходимые инструменты.
Также необходимо установить следующие пакеты:
```bash
sudo apt install -y clang-tools-10 clang-format-10 python3 python3-pip libyaml-cpp-dev nodejs npm
pip3 install pyyaml
sudo npm install -g typescript@latest
```
**Как собрать**
1. source envsetup.sh [java|typescript]
2. make mapleall
На этом этапе собирается mapleall (библиотеки, связанные с Maple IR). Если вы уже делали это один раз, вам не нужно делать это снова, если вы не изменили код в mapleall.
3. make
4. Если вы работаете над интерфейсом Java, вы увидите output/java/java/java2mpl. Это исполняемый интерфейс.
4. Если вы работаете над интерфейсом Typescript, вы увидите output/typescript/bin/ts2ast. Это исполняемый интерфейс. Вы также можете увидеть output/typescript/bin/ast2cpp, который переводит AST в исходный код cpp.
**Как протестировать**
1. make test
Запустите один тест, скажем t1.java:
1. cd test
2. make t1
Все тестовые случаи Java можно найти в test/java.
Все тестовые примеры Typescript можно найти в test/typescript.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )