Description de l'étape

Vous devez écrire un analyseur syntaxique (parser) correspondant à la grammaire syntaxique de Drei. Le type d'analyseur que vous implantez est laissé à votre appréciation, mais nous vous recommandons charitablement d'utiliser la technique par descente récursive.

Votre analyseur doit bénéficier des caractéristiques suivantes.

Classe du parser

Dans le cas le plus simple, la seule classe sur laquelle vous aurez à travailler est celle de l'analyseur syntaxique lui-même. Pour cela, définissez une classe avec l'interface suivante.

package dreic
class Parser(in: java.io.InputStream) extends Scanner(in) {
  def parse: Unit
}
parse
Une méthode qui va analyser (par rapport à la grammaire Drei) le flux de lexèmes du scanner. Si vous implantez un analyseur sans gestion d'erreurs et si le programme analysé est incorrect, cette méthode ne retourne pas (une exception est levée). Si vous utilisez la gestion d'erreurs, la méthode retourne toujours, mais les erreurs détectées sont publiées, par exemple à l'aide la classe Report.

Un canevas pour cet objet est à votre disposition.

Autres classes de support

Report.scala
Cet objet fournit des services pour signaler des erreurs.
ParserTest.scala
Cet objet permet de tester votre analyseur syntaxique, à condition que l'interface de votre analyseur corresponde.

Bien entendu, votre scanner est nécessaire pour implanter cette étape, et doit être compilé en parallèle avec le parser.