2009-11-19 4 views
0

J'écris du code pour l'exercice 1-24, K & R2, qui demande d'écrire un débogueur syntaxique de base.Erreurs syntaxiques

J'ai fait un analyseur avec les états normaux, dquote, squote etc ...

Je me demande donc si un extrait de code comme

/" text " 

est autorisé dans le code? Devrais-je signaler cela comme une erreur? (Le problème est que mon analyseur entre dans l'état commentaire_entry après / et ignore le ".)

+0

Les commentaires ne doivent-ils pas commencer par '/ *'? –

+0

La division ne devrait-elle pas avoir un opérande de gauche? – mouviciel

Répondre

3

Puisqu'un seul / signifie juste une division, il ne doit pas être interprété comme un commentaire. Il n'y a pas d'opérateur de division défini pour les chaînes, donc quelque chose comme "abc"/"def" n'a pas beaucoup de sens, mais ce ne devrait pas être une erreur de syntaxe. Déterminer si cette division est possible ne devrait pas être fait par l'analyseur, mais être laissé pour que les étapes ultérieures de la compilation soient décidées là.

2

Ceci est syntaxiquement valide, mais pas sémantiquement. Il devrait analyser comme l'opérateur de division suivi d'un littéral de chaîne. Vous ne pouvez pas diviser des choses par un littéral de chaîne, donc ce n'est pas du code légal, globalement.

Les commentaires commencent par un jeton à deux caractères, /*, et se terminent par */.

0

En tant qu'élément syntaxique autonome, cela doit être signalé comme une erreur.

En théorie (dans le cadre d'une expression), il serait possible d'écrire

a= b /"text"; /a = b divided through address of string literal "text" 

qui est également faux (vous ne pouvez pas diviser par un pointeur). Mais au niveau de la surface, cela semblerait correct car il serait décodé syntaxiquement comme: opérateur variable opérateur variable expression-constante (adresse de chaîne).

L'erreur réelle devrait probablement être prise dans un état plus profond d'analyse syntaxique (c'est-à-dire lors de la vérification si des types donnés sont appropriés pour l'opérateur de division).