Est-il possible de concevoir un langage sans erreur de syntaxe? [fermé]

14

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

SLaks
la source
2
Si nous pouvions le faire, nous aurions créé l'IA.
Michael K
5
@Michael: Non; Je ne pense pas.
SLaks
7
!!! Perl !!!
8
Je m'oppose fermement à la fermeture de la question! Ce n'est ni subjectif ni constructif !!!
Felix Dombek
1
pourquoi ne pas prendre un langage d'assemblage avec: exactement 256 instructions, 128 registres et une syntaxe générale de 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é.
Felix Dombek

Réponses:

8

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:

TF(w,q) -> (w,Qa) 

Considerations:
    L = { w | w is any possible string }
    w e L
    q e Q
    F is a set with all good final states {Qa,Qr}
    Qa e F

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

guiman
la source
1
Qu'est-ce que cela signifie, pour nous, profanes? Qu'est-ce que «w», «e», «L», «q», «Q», «Qa», «Qr», «F», «TF». Sans aucune de ces définitions, je n'ai pas de cadre de référence.
Berin Loritsch
1
Désolé mais il n'y a pas de moyen facile d'expliquer l'approche de Turing Machine à cette réponse. Consultez ce lien pour clarifier un peu: en.wikipedia.org/wiki/Turing_machine
guiman
16

Oui, bien sûr, c'est possible, c'est même trivialement facile.

<programm> ::= char | char <program> |

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 .

user281377
la source
Donc, si la langue l'ignore, c'est un systax valide? et "tabtabspace" n'est-il pas une chaîne valide?
Michael K
1
La sémantique de la langue était mon problème, mais je ne peux pas vraiment en discuter sans qu'elle ne soit hors sujet en philosophie / linguistique proprement dite.
StuperUser
2
Michael: Exactement. Tout est syntaxiquement valide, mais il peut éventuellement s'agir d'un NOP (sans signification particulière). Rien de mal avec une langue ignorant beaucoup de choses. Regardez tout ce que C ignore dans cet exemple de programme: int main () {3 ;;; / * commentaire * /}
user281377
Beaucoup de gens disent «non» parce qu'ils n'ont aucune distinction conceptuelle entre la syntaxe et la sémantique. "Il ne compile pas? Ce doit être une erreur de syntaxe, alors!"
fredoverflow
Beaucoup de gens disent «non» parce qu'il n'y a pas vraiment de sens à cela. Dès que vous ajoutez une structure (c'est-à-dire plus qu'une règle d'analyse auto-récursive), vous avez le concept de syntaxe. La violation de la structure est une erreur induite par la syntaxe. L'erreur induite par la syntaxe est une erreur de syntaxe, que l'analyseur la signale comme telle ou non.
Berin Loritsch
5

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.

Jon Hopkins
la source
J'ai lu que TECO était comme ça, chaque personnage se voyant attribuer un sens.
David Thornley
3
Le code machine fonctionne à peu près de cette façon. Chaque combinaison d'octets possible peut être considérée comme un programme qui fait quelque chose , même si tout ce qu'il fait provoque une interruption.
user281377
David, c'est ce que je pensais, très TECO. Bien que l'entrée IIRC TECO puisse contenir des erreurs de syntaxe. Mais cela montre la difficulté d'une langue aussi dense - très difficile à lire et sujette à des erreurs difficiles à comprendre.
Omega Centauri
@ user281377: Sur le 6502, il y a pas mal d'instructions sans signification définie. Certains ont des comportements cohérents, utiles et non disponibles avec aucune instruction documentée (mon préféré est surnommé "DCP" - décrémenter une adresse mémoire et comparer le résultat avec l'accumulateur, en définissant les indicateurs de manière appropriée), mais certains ont un comportement qui dépend de les horaires des bus de manière étrange et bizarre, et certains verrouillent le processeur suffisamment fort pour nécessiter une réinitialisation (même une interruption "non masquable" n'aidera pas). Je pense que ces dernières instructions pourraient être considérées comme des "erreurs de syntaxe".
supercat
5

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.

LennyProgrammers
la source
3

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.

biziclop
la source
0

Ahbefiasdlk aslerhsofa; f jwi [asdfasdf] aew / & Q! @ # $} {;-P

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.

Une erreur de syntaxe est une erreur introduite par les programmeurs qui écrivent du code qui n'a aucune signification pour le langage.

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 .

Berin Loritsch
la source
1
Le besoin de structure ne nécessite pas de grammaire. Considérez Piet où la structure est dans la position du caractère (ou de la couleur) dans une grille, pas sa relation avec les autres caractères dans un morphème.
Mike Samuel
1
Violer la structure et que se passe-t-il?
Berin Loritsch