J'ai un problème avec l'élimination des récursions de gauche dans JavaCC. J'ai trouvé une solution avec Epsilon tokens, mais il semble que JavaCC ne fonctionne pas très bien avec les jetons Epsilon (comme TOKEN : <eps : "">
). Ci-dessous je prépare un exemple de ma question:Suppression de gauche (directe et indirecte) dans JavaCC
void prod1() :
{}
{
<beta1>
| prod2() <alpha1>
}
void prod2() :
{}
{
<beta2>
| [prod2()] <alpha2>
| prod1() <alpha3>
}
Ici, nous voyons à la fois directe et undirect à gauche récursivité. C'est un exemple simplifié de ma vraie grammaire (Ma grammaire JavaCC est basée sur la grammaire BNF existante, donc je suis obligé de l'utiliser sous une telle forme).
gauche La deuxième alternative pour '' prod2' est juste prod2'. Je suspecte une faute de frappe. –
Merci! J'ai corrigé cette faute de frappe –
Il est nécessaire de changer la grammaire (sans changer la langue). Dans de nombreux cas, vous pouvez utiliser l'itération ('{...}') pour résoudre les récursions. – Henry