grammaire donné uneANTLR4: Comment analyser un noeud non root?
script: statement*;
statement: do | check;
do: 'do';
check: 'check';
Comment puis-je analyser un nœud non-root? En d'autres termes,
ScriptParser sp = new ScriptParser();
StatementContext sc = sp.parse<StatementContext>("do");
I simplifié l'exemple ci-dessus.
Une solution est de faire tous les nœuds nœuds racine comme
rootNode: script | statement | do | check;
, mais je ne veux pas que ce souille ma grammaire et est un cauchemar de maintenance (à chaque fois que la grammaire ajoute/supprime un nœud, le rootNode doit être mis à jour, ce qui est source d'erreurs). Une autre solution consiste à écrire une autre grammaire dérivée avec la spécification rootnode. Cela ne polluerait pas la grammaire principale, mais a toujours le problème de maintenance.
Y a-t-il une meilleure façon de procéder? Je voudrais utiliser plusieurs de mes noeuds (classes de contexte ***) et les passer dans les constructeurs de mes classes de modèle de domaine.
Quelle version ANLTR? Dans ANTLR 3, vous indiquez explicitement quel est le point d'entrée en appelant la méthode avec le nom de la règle, par ex. 'parser.script()' ou 'parser.do()'. –
ANTLR4 (4.7). J'ai mis à jour le titre. – Ruudjah
Est-ce que "faire" n'est pas une valeur valide de "script" dans votre grammaire? Que veux-tu précisément? Pour limiter l'analyse pour vérifier seulement si une chaîne est une "vérification" valide? –