Как я могу проанализировать код для создания компилятора в Java?

Я столкнулся с подобной проблемой при сохранении конвейеров (используя sklearn.joblib). Оказывается, joblib не хранит код, используемый вашим конвейером. В моем случае проблема была решена путем обеспечения доступности всех модулей python, используемых в конвейере и / или классификаторе, в одном месте относительно модуля создания конвейера.

Для меня это означало копирование и сохранение my_transformers.py вместе с конвейером и классификационными заданиями. Затем при использовании / установке их в производственном процессе поместите my_transformers.py в то же место относительно модуля, который создал мой конвейер.

7
задан Bill the Lizard 18 September 2012 в 17:00
поделиться

11 ответов

Regex хорош для использования в компиляторе, но только для распознавания маркеров (т.е. никакие рекурсивные структуры).

Классический способ записать компилятор имеет лексический анализатор для распознавания маркеров, синтаксического анализатора для распознавания структуры, семантического анализатора для распознавания значения, промежуточного генератора кода, оптимизатора, и продержитесь целевой генератор кода. Любой из тех шагов может быть объединен или пропущен полностью, если делает компилятор легче записать.

Было много инструментов, разработанных для помощи с этим процессом. Для Java можно посмотреть на

13
ответ дан 6 December 2019 в 04:48
поделиться

Взгляните на JavaCC, синтаксический анализатор языка для Java. Это очень просто в использовании, и приобрести навык

9
ответ дан 6 December 2019 в 04:48
поделиться

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

То, что лучше, - то, что книга Terence Parr по тому же является безусловно одной из лучших книг, ориентированных к записи компиляторов с парсером-генератором.

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

В довершение ко всему Wiki ANTLR + документация, (хотя не достаточно всесторонний к моей симпатии), является хорошим местом для начинаний для любого новичка. Это помогло мне обновить знание о компиляторе, пишущем через неделю.

10
ответ дан 6 December 2019 в 04:48
поделиться

Пойдите классик - Закон + Yacc. В Java это записывает JAX и javacc. Javacc даже имеет некоторые грамматики Java, готовые к контролю.

6
ответ дан 6 December 2019 в 04:48
поделиться

JFlex является генератором сканера, который, согласно руководству, разработан для работы с КУБКОМ парсера-генератора.

Одна из основных целей дизайна JFlex состояла в том, чтобы сделать взаимодействие через интерфейс со свободным КУБКОМ парсера-генератора Java столь же легким как возможно [так].

Это также имеет поддержку BYACC/J, который, как его имя предполагает, является портом Беркли YACC, чтобы сгенерировать код Java.

Я использовал сам JFlex и любил его. Howeveer, проект, который я делал, был достаточно прост, что я записал синтаксический анализатор вручную, таким образом, я не знаю, насколько хороший или КУБОК или BYACC/J.

3
ответ дан 6 December 2019 в 04:48
поделиться

Я рекомендовал бы использовать или метакомпилятор как ANTLR или простой синтаксический анализатор combinator библиотека. Функциональный Java имеет синтаксический анализатор combinator API. Существует также JParsec. Оба из них основаны на библиотеке Parsec для Haskell.

5
ответ дан 6 December 2019 в 04:48
поделиться

Синтаксический анализатор combinators является хорошим выбором. Популярная реализация Java является JParsec.

2
ответ дан 6 December 2019 в 04:48
поделиться

Я использовал SableCC в своем курсе компилятора, хотя не по выбору.

Я не забываю находить это очень большим и тяжелым с большим акцентом на чистоту, чем удобство (никакой приоритет оператора или что-либо; необходимо заявить это в грамматике).

Я, вероятно, хотел бы использовать что-то еще, если бы у меня был выбор. Мой опыт с yacc (для C) и счастливый (для Haskell) оба был приятен.

2
ответ дан 6 December 2019 в 04:48
поделиться

Если Вы собираетесь пойти хардкор, добавьте немного http://llvm.org в соединении :)

1
ответ дан 6 December 2019 в 04:48
поделиться

Я предлагаю, чтобы Вы посмотрели на в источнике для BeanShell. Это имеет компилятор для Java и довольно просто читать.

1
ответ дан 6 December 2019 в 04:48
поделиться

dynamic является контекстуальным ключевым словом C # 4,0. Четвертая редакция спецификации ECMA C # не относится к C # 4.0. (Обратите внимание на 2006 дату публикации.)

MSDN описывает ее как ключевое слово.

Это также в этой таблице контекстуальных ключевых слов . (Прокрутите вниз.)

-121--4154878-

http://java-source.net/open-source/parser-generators и http://catalog.compilertools.net/java.html содержат каталоги инструментов для этого. Сравните также вопрос stackoverflow Как выполнить синтаксический анализ кода для построения компилятора на Java? .

-121--2965346-

http://java-source.net/open-source/parser-generators и http://catalog.compilertools.net/java.html содержат каталоги инструментов для этого. Сравните также вопрос Stackoverflow Альтернативы регулярным выражениям .

1
ответ дан 6 December 2019 в 04:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: