È possibile progettare una lingua che non ha errori di sintassi? [chiuso]

13

In altre parole, una lingua in cui ogni stringa possibile è sintassi valida?

EDIT : questa è una domanda teorica.
Non ho alcun interesse a usare un tale linguaggio; Sto solo chiedendo se è possibile.

Ulteriori modifiche

Sono andato avanti a progettare un tale linguaggio. Vedi ErrorFree

    
posta SLaks 19.01.2011 - 15:05
fonte

6 risposte

8

Sì, se guardi questo in modo molto analitico creando una Deterministic Turing Machine che si ferma sempre in un buono stato finale per ogni singola stringa di una certa lingua, allora avrai dimostrato che è possibile. La dimostrazione è abbastanza semplice, devi una TM regolare con una funzione di transizione con una sola transizione, che assomiglia a questo:

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

È stato dimostrato che una TM ha la stessa potenza di calcolo di un singolo computer reale, quindi è assolutamente possibile

    
risposta data 19.01.2011 - 15:25
fonte
16

Sì, certo che è possibile, è persino banalmente facile.

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

Non capisco come qualcuno possa dire "no". Detto questo, potrebbe essere piuttosto difficile definire una semantica significativa per un tale linguaggio, ma anche questo è possibile. Guarda spazio bianco .

    
risposta data 19.01.2011 - 15:22
fonte
5

Suppongo che dipenda da cosa intendi per sintassi valida.

Potresti progettare una lingua che accetta qualsiasi stringa ma ignora qualsiasi cosa a cui non è stato prescritto un significato specifico. Questo è fondamentalmente l'equivalente di dire "Mi libererò degli errori di sintassi ma dico che non sono errori" - piuttosto inutile e enormemente indesiderabile per molte ragioni.

Oltre a ciò l'unico modo in cui si potrebbe avere una lingua che non ha errori di sintassi sarebbe avere a ogni stringa possibile un'istruzione / uso valido associato. L'unico modo che posso vedere è quello di avere tutte le operazioni come caratteri singoli e garantire che ogni singolo carattere abbia un'operazione assegnata ad esso.

Ci sono un milione di cose sbagliate in questo - ovviamente non ci sono parole riservate, si tratta di dove viene usato nel contesto e di conseguenza sarebbe sostanzialmente illeggibile e, mentre gli errori di sintassi immuni sarebbero molto più probabili ogni altro tipo di errore.

Quindi teoricamente possibile (AmmoQ lo mette molto più ordinatamente di me) ma del tutto indesiderabile.

    
risposta data 19.01.2011 - 15:22
fonte
5

Il codice in un linguaggio di programmazione non basato su testo potrebbe non avere errori di sintassi.

Penso a un linguaggio visivo come BYOB . Non puoi digitare accidentalmente "if x ten else foo" perché la "sintassi" è definita da blocchi grafici.

    
risposta data 19.01.2011 - 16:19
fonte
3

Lo scopo della sintassi è di distinguere tra valido e non valido in un modo più rapido ed efficace rispetto all'esecuzione del codice. La sintassi è solo un'ottimizzazione, ciò che accade e ciò che entra nella semantica è arbitrario.

Di solito vuoi piuttosto il contrario: fare in modo che la sintassi si estenda il più possibile per risparmiare più tempo, ma ovviamente puoi anche omettere la sintassi del tutto e dichiarare ogni errore semantico: finirai con un non- interprete di tokenizzazione.

    
risposta data 19.01.2011 - 15:57
fonte
0

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

Che cosa significa?

Finché la lingua ha struttura e grammatica, ci sarà sempre il concetto di errore di sintassi. La domanda è se la applichi o no. Le persone commettono errori e gli errori di sintassi sono ciò che la maggior parte dei progettisti di linguaggio raggiunge per aiutare i programmatori a evitare errori stupidi.

A syntax error is an error introduced by programmers writing code that has no meaning to the language.

È impossibile eliminare gli errori di sintassi in base alla definizione precedente. Abbiamo tutti gli identificatori mispelled, abbiamo tutti i nomi dei metodi mispelled. Avere la lingua in silenzio accetta il mispelling e felicemente non fare nulla non è la mia idea di un'esperienza piacevole.

È possibile progettare una lingua che possa utilizzare qualsiasi identificatore unicode valido (o sequenza di caratteri). Ci sono sfide, come la normalizzazione di caratteri equivalenti / sequenze di caratteri in modo che vengano riconosciute come la stessa cosa - ma è possibile. NOTA: esistono quattro tipi standard di normalizzazione Unicode .

    
risposta data 19.01.2011 - 16:14
fonte

Leggi altre domande sui tag