Слияние кода завершено, страница обновится автоматически
**Происхождение 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 )