J'écrirai un article pour la première fois depuis longtemps.
TCG n'est pas motivé, je ne peux donc pas l'écrire pour le moment.
Les phrases les plus utiles sont [Méthode 2] Spécifiez le processeur à partir des paramètres. ](# Méthode 2 Spécifiez le processeur dans les paramètres), alors ignorez-le.
J'ai laissé tomber le langage JVM-Math et je l'ai déplacé.
~~ Il pourrait être exécuté avec l'option -processor au moment de la compilation. ~~
Lorsque le processeur d'annotations a été défini à partir des paramètres, le code source était associé au projet.
déplacé.
Je voulais créer un langage de programmation qui fonctionne sur Graal VM en utilisant Truffle.
Le SL de Graal n'était pas aussi simple que ce à quoi je m'attendais, j'ai donc décidé d'implémenter mon langage basé sur un interpréteur plus simple.
・ Diapositives du didacticiel sur les truffes
J'ai également écrit une petite traduction des diapositives avant.
・ Truffle Tutorial Slides Personal Translation Memo ①
JJUG CCC 2017 Fall J'essaierai de créer un langage Oreore JVM (seules quatre règles sont calculées), qui a été introduit dans la session. Un langage de programmation créé avec ANTLR + Truffle.
・ Jyukutyo / JVM-Math-Language
An AST interpreter with Truffle. This program can execute four arithmetic operations. You can use numbers, +, -, *, /, "()", and "->" for running in another thread.
Il semble que ce soit l'interpréteur AST (abstract syntax tree) de Truffle qui peut exécuter quatre règles.
Créez un projet.
Dans le projet Gradle, le compilateur utilise JDK 1.8. Je l'ai utilisé.
L'EDI utilise IntelliJ.
Je vais omettre la méthode, mais j'ai écrit un article similaire avant, donc je pense que vous pouvez le regarder.
Ensuite, fermez le dossier du projet à partir de GitHub. (Cloner ou télécharger)
Après la décompression, déposez le dossier src directement sous le projet.
JVM-Math-Language ressemble à un projet Maven, vous devez donc écrire build.gradle.
A titre d'exemple, j'ai porté à peu près pom.xml de JVM-Math-Language (dépendances écrites uniquement) ) Laisse-le tranquille.
build.gradle
plugins {
id 'java'
}
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
compileJava.options.encoding = 'UTF-8'
compileTestJava.options.encoding = 'UTF-8'
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
//Nécessaire pour exécuter ANTLR
compile group: 'org.antlr', name: 'antlr4-runtime', version: '4.7'
//Nécessaire pour exécuter Truffle
compile group: 'org.graalvm.truffle', name: 'truffle-api', version: '1.0.0-rc12'
//Requis pour générer du code à partir des annotations
compile group: 'org.graalvm.truffle', name: 'truffle-dsl-processor', version: '1.0.0-rc12'
}
En passant, il semble que si vous utilisez bien Gradle depuis la console, vous pouvez générer un projet (et bien sûr build.gradle) à partir de pom.xml.
Plus précisément, entrez la commande suivante dans le répertoire (qui sera le répertoire du projet) où pom.xml est placé.
gradle init --type pom
À propos, pour le moment, environ 6 erreurs de compilation se produisent dans des endroits tels que build .....
Au fait, il y a aussi une ligne rouge.
Quand je le vérifie, il semble que les classes suivantes manquent.
・ Jvmmathlang.truffle.JvmMathLangTypesGen
・ Nodes.ops.AddNodeGen (package omis ci-dessous)
・ DivNodeGen
・ MulNodeGen
・ SubNodeGen
Ces classes utilisent JSR 269: API de traitement des annotations enfichables et le processeur Truffle DSL. Semble être le code généré automatiquement par.
En gros, si vous créez une classe abstraite avec une annotation spécifique, son implémentation sera générée automatiquement.
Maintenant, il y a une erreur de compilation car rien n'est défini autour de la génération.
Configurons maintenant le processeur d'annotations.
De plus, concernant l'API de traitement des annotations, l'article suivant était facile à comprendre.
Mémo d'utilisation de l'API de traitement des annotations enfichable
** La méthode ① fonctionne uniquement avec CompileJava, mais CompileJava semble réussir à compiler sans spécifier aucune option. (Cela n'a pas de sens) **
** Cependant, j'ai eu du mal à accéder à l'article qui explique l'option -processor et comment la définir avec gradle, je vais donc laisser le texte lui-même. ** **
~~ Le compilateur Java a une option pour compiler avec une classe de processeur spécifiée. ~~
javac -processeur Nom de classe complet,Nom de classe complet,Nom de classe complet
~~ De plus, dans le projet Gradle, les options de compilation sont décrites dans le script de construction. ~~
build.gradle
compileTestJava.options.compilerArgs += ['-processor', 'Nom de classe complet,Nom de classe complet,Nom de classe complet']
~~ Ici, un problème se pose. ~~
~~ Je n'ai pas de liste de classes de processeurs. ~~
~~ Mais heureusement, c'était à portée de main. ~~
Il existe un fichier appelé javax.annotation.processing.Processor dans le service META-INF-> dans ~~ truffle-dsl-processor-1.0.0-rc12.jar. ~~
~~ Il contient une liste complète des noms de classes. ~~
:javax.annotation.processing.Processor
com.oracle.truffle.dsl.processor.TruffleProcessor
com.oracle.truffle.dsl.processor.verify.VerifyTruffleProcessor
com.oracle.truffle.dsl.processor.LanguageRegistrationProcessor
com.oracle.truffle.dsl.processor.InstrumentRegistrationProcessor
com.oracle.truffle.dsl.processor.InstrumentableProcessor
com.oracle.truffle.dsl.processor.verify.VerifyCompilationFinalProcessor
com.oracle.truffle.dsl.processor.OptionProcessor
com.oracle.truffle.dsl.processor.interop.InteropDSLProcessor
com.oracle.truffle.object.dsl.processor.LayoutProcessor
~~ Appliquez ceci à build.gradle plus tôt. ~~
build.gradle
//Abréviation
compileJava.options.compilerArgs += ['-processor', 'com.oracle.truffle.dsl.processor.TruffleProcessor,' +
'com.oracle.truffle.dsl.processor.LanguageRegistrationProcessor,' +
'com.oracle.truffle.dsl.processor.InstrumentRegistrationProcessor,' +
'com.oracle.truffle.dsl.processor.InstrumentableProcessor,' +
'com.oracle.truffle.dsl.processor.verify.VerifyCompilationFinalProcessor,' +
'com.oracle.truffle.dsl.processor.OptionProcessor,' +
'com.oracle.truffle.dsl.processor.interop.InteropDSLProcessor,' +
'com.oracle.truffle.object.dsl.processor.LayoutProcessor']
~~ Vous pouvez le faire à partir de Gradle-> Tâches-> compiler Java dans la barre latérale. ~~
~~ De plus, si vous écrivez tous les noms de classe dans Gradle, la visibilité sera mauvaise, donc ~~
Vous pouvez omettre l'option de compilation en amenant javax.annotation.processing.Processor aux services ~~ src-> main-> resource-> META-INF->. ~~
Oui, c'est mon préféré.
Ouvrez File-> Settings-> Build, Run, Deploy-> Compiler-> Annotation Processor.
Sélectionnez Par défaut et cochez Activer le traitement des annotations.
Dans Enregistrer les associations de sources générées à l'emplacement suivant, sélectionnez la racine du contenu du module.
Cela générera du code dans src / main au moment de la construction.
Cependant, les dossiers generated et generated_tests ne sont pas encore reconnus comme sources.
Par conséquent, modifiez build.gradle afin qu'il soit reconnu comme un dossier source.
· Manuel inversé: Comment utiliser les processeurs d'annotation avec IntelliJ IDEA
build.gradle
apply plugin: 'idea'
idea {
module {
sourceDirs += file('src/main/generated')
generatedSourceDirs += file('src/main/generated')
testSourceDirs += file('src/test/generated_tests')
}
}
Je pense que maintenant toutes les erreurs ont disparu.
Il a fallu environ une semaine et demie pour atteindre le paramètre appelé méthode (2), qui semble être terminé en 30 secondes.
Si vous avez une telle chose, écrivez un article et faites-le moi savoir.
Réduisons le nombre de personnes qui ont la même difficulté!
P.S.
L'auto-apprentissage Netsource est toujours difficile
Recommended Posts