Qu'est-ce qu'un exemple d'une erreur lexicale et est-il possible qu'une langue n'a pas d'erreurs lexicales?

StackOverflow https://stackoverflow.com/questions/3484689

  •  28-09-2019
  •  | 
  •  

Question

pour notre classe de la théorie du compilateur, nous sont chargés de la création d'un simple interprète pour notre propre langage de programmation conçu. J'utilise jflex tasse comme mes et générateurs, mais je suis un peu coincé avec quelle erreur lexicale est. Aussi, est-il recommandé que j'utiliser la fonction de l'état de jflex? il se sent mal comme il semble que l'analyseur est mieux adapté à la manipulation de cet aspect. et recommandez-vous d'autres outils pour créer la langue. Je suis désolé si je suis impatient, mais il est dû le mardi.

Était-ce utile?

La solution

Une erreur lexicale est toute entrée qui peut être rejetée par l'analyseur syntaxique. Il en résulte généralement d'une reconnaissance symbolique tomber à la fin des règles que vous avez définies. Par exemple (sans syntaxe particulière):

[0-9]+   ===> NUMBER token
[a-zA-Z] ===> LETTERS token
anything else ===> error!

Si vous pensez à un lexer comme une machine à états finis qui accepte les chaînes d'entrée valides, des erreurs vont être toutes les chaînes d'entrée qui ne donnent pas lieu à cette machine à états finis atteignant un état d'accepter.

Le reste de votre question était plutôt pas clair pour moi. Si vous avez déjà quelques outils que vous utilisez, alors peut-être vous êtes mieux d'apprendre à réaliser ce que vous voulez réaliser à l'aide de ces outils (je n'ai aucune expérience avec l'un des outils dont vous avez mentionnés).

EDIT: Après avoir relu votre question, il y a une deuxième partie, je peux répondre. Il est possible qu'une langue pourrait avoir aucune erreur lexicales -. C'est la langue dans laquelle une chaîne d'entrée à tous est entrée valide

Autres conseils

Une erreur lexicale pourrait être un caractère non valide ou inacceptable par la langue, comme « @ » qui est rejeté comme une erreur lexicale pour les identifiants en Java (il est réservé).

erreurs lexicales sont les erreurs lancées par votre lexer lorsqu'il est incapable de continuer. Ce qui signifie qu'il n'y a aucun moyen de reconnaître un lexème comme valide jeton pour vous LEXER. Les erreurs de syntaxe, de l'autre côté, seront jetés par votre scanner quand un ensemble donné de déjà reconnus jetons valides ne correspondent à aucun des côtés droit de vos règles de grammaire.

  

il se sent mal car il semble que le   analyseur est mieux adapté à la manipulation   cet aspect

Non

. Il semble parce que sans contexte langues sont des langues régulières (ce qui signifie qu'un analyseur peut faire le travail d'un lexer). Mais considérer qu'un analyseur est un automate de pile, et vous emploierons des ressources informatiques supplémentaires (la pile) de reconnaître quelque chose qui ne nécessite pas de pile pour être reconnu (une expression régulière). Ce serait une solution sous-optimale.

NOTE:. Par expression régulière, je veux dire ... expression régulière dans le sens hiérarchie de Chomsky, pas une classe java.util.regex.*

erreur lexicale est lorsque l'entrée ne appartiennent à l'une de ces listes: Mots clés: "if", "else", "main"... symboles: '=','+',';'... doubles symboles: ">=", "<=", "!=", "++" variables [a-z/A-Z]+[0-9]*
numéros: [0-9]*

Exemples: 9var: erreur, numéro avant caractères, pas une variable et non un mot-clé soit.           $: Erreur

ce que je ne sais pas si quelque chose est comme plus d'un symbole après l'autre est accepté, comme « + - »

compilateur peut attraper une erreur quand il a la grammaire dedans! Il dépendra du compilateur lui-même si elle a la capacité (portée) d'attraper les erreurs lexicales ou non. Si est décidé lors de l'élaboration du compilateur quels types d'erreurs lexicales et comment (en fonction de la grammaire), ils vont être traités. En général, tout compilateur célèbre et le plus utilisé a cette capacité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top