En d'autres termes, une langue où chaque chaîne possible est une syntaxe valide?
EDIT : Ceci est une question théorique.
Je n'ai aucun intérêt à utiliser une telle langue; Je demande simplement si c'est possible.
Modifier davantage
Je suis allé de l'avant un tel langage conçu. Voir ErrorFree
language-design
syntax
SLaks
la source
la source
instruction operand*
, où un opérande peut être un registre ou un nombre entre 0-127 (et tout ce qui est au-dessus qui est traité comme un registre) et si un opérande est manquant pour une instruction multi-zones, «0» est supposé.Réponses:
Oui, si vous regardez cela d'une manière très analitique en créant une machine de Turing déterministe qui s'arrête toujours dans un bon état final pour chaque chaîne d'une certaine langue, alors vous aurez démontré que c'est possible. La démonstration est assez simple, vous devez une MT régulière avec une fonction de transition avec une seule transition, qui ressemble à ceci:
Il a été démontré qu'un TM a la même puissance de calcul que n'importe quel ordinateur réel, donc c'est absolument possible
la source
Oui, bien sûr, c'est possible, c'est même trivialement facile.
Je ne comprends pas comment quelqu'un peut dire "non". Cela dit, il pourrait être assez difficile de définir une sémantique significative pour un tel langage, mais c'est également possible. Regardez simplement les espaces .
la source
Je suppose que cela dépend de ce que vous entendez par syntaxe valide.
Vous pouvez concevoir un langage qui accepte n'importe quelle chaîne mais ignore tout ce qui n'a pas été spécifié de signification spécifique. C'est essentiellement l'équivalent de dire «Je vais me débarrasser des erreurs de syntaxe mais en disant que ce ne sont pas des erreurs» - assez inutile et extrêmement indésirable pour de nombreuses raisons.
Au-delà de cela, la seule façon d'avoir un langage sans erreur de syntaxe serait d'avoir chaque instruction possible associée à une instruction / utilisation valide. La seule façon pour moi de voir cela serait d'avoir toutes les opérations en tant que caractères uniques et de s'assurer que chaque caractère a une opération qui lui est affectée.
Il y a un million de choses qui ne vont pas avec cela - évidemment, il n'y a pas de mots réservés, tout dépend de l'endroit où il est utilisé dans le contexte et, par conséquent, il serait fondamentalement illisible et, alors que les erreurs de syntaxe seraient à l'abri de toute autre sorte d'erreur.
Donc théoriquement possible (AmmoQ le dit bien mieux que moi) mais tout à fait indésirable.
la source
Le code dans un langage de programmation non textuel peut ne pas contenir d'erreurs de syntaxe.
Je pense à un langage visuel comme BYOB . Vous ne pouvez pas taper accidentellement "if x ten else foo" car la "syntaxe" est définie par des blocs graphiques.
la source
Le but même de la syntaxe est de différencier entre valide et non valide d'une manière plus rapide et plus efficace que l'exécution du code. La syntaxe n'est qu'une optimisation, ce qui s'y trouve et ce qui entre dans la sémantique est arbitraire.
Habituellement, vous voulez le contraire: étirer la syntaxe autant que possible pour gagner plus de temps, mais bien sûr, vous pouvez également supprimer complètement la syntaxe et déclarer chaque erreur sémantique: vous vous retrouverez avec un interpréteur sans tokenizing.
la source
Alors qu'est-ce que cela signifie?
Tant que le langage a une structure et une grammaire, il y aura toujours le concept d'une erreur de syntaxe. La question est de savoir si vous l'appliquez ou non. Les gens feront des erreurs et les erreurs de syntaxe sont ce que la plupart des concepteurs de langage recherchent pour aider les programmeurs à éviter les erreurs stupides.
Il est impossible de se débarrasser des erreurs de syntaxe sur la base de la définition ci-dessus. Nous avons tous des identificateurs mal orthographiés, nous avons tous des noms de méthode mal orthographiés. Faire en sorte que la langue accepte silencieusement les fautes d'orthographe et ne fasse heureusement rien n'est pas mon idée d'une expérience agréable.
Il est possible de concevoir un langage pouvant utiliser n'importe quel caractère Unicode valide (ou séquence de caractères) comme identificateurs. Il y a des défis, tels que la normalisation de caractères / séquences de caractères équivalents afin qu'ils soient reconnus comme la même chose - mais c'est possible. REMARQUE: il existe quatre types standard de normalisation Unicode .
la source