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


14

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

EDIT : questa è una domanda teorica.
Non mi interessa usare un linguaggio del genere; Sto solo chiedendo se è possibile.

Ulteriore modifica

Sono andato avanti progettato un tale linguaggio. Vedi ErrorFree


2
Se potessimo farlo, avremmo creato l'IA.
Michael K,

5
@Michael: No; Io non la penso così.
SLaks,

7
!!! Perl !!!

8
Sono fortemente contrario alla chiusura della domanda! Non è né soggettivo né costruttivo !!!
Felix Dombek,

1
perché non prendere un linguaggio assembly con: esattamente 256 istruzioni, 128 registri e una sintassi generale di instruction operand*, in cui un operando può essere un registro o un numero compreso tra 0-127 (e tutto quanto sopra considerato come un registro) e se un operando manca per un'istruzione multi-arity, si assume '0'.
Felix Dombek,

Risposte:


8

Sì, se lo guardi in modo molto analitico creando una macchina di Turing deterministica che si ferma sempre in un buono stato finale per ogni singola stringa di un determinato linguaggio, allora avrai dimostrato che è possibile. La dimostrazione è piuttosto semplice, è necessario un normale TM con una funzione di transizione con una sola transizione, che assomigli 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 elaborazione di ogni singolo computer reale, quindi questo è assolutamente possibile


1
Cosa diavolo significa per noi comuni laici? Che cosa è "w", "e", "L", "q", "Q", "Qa", "Qr", "F", "TF". Senza nessuno di questi definiti non ho un quadro di riferimento.
Berin Loritsch,

1
Siamo spiacenti ma non esiste un modo semplice per spiegare l'approccio di Turing Machine a questa risposta. Controlla questo link per chiarire un po ': en.wikipedia.org/wiki/Turing_machine
guiman

16

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

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

Non capisco come qualcuno possa dire "no". Detto questo, potrebbe essere piuttosto difficile definire una semantica significativa per una tale lingua, ma è anche possibile. Guarda gli spazi bianchi .


Quindi se la lingua lo ignora, è un systax valido? e "tabtabspace" non è una stringa valida?
Michael K,

1
La semantica della lingua era il mio problema con essa, ma non posso davvero discuterne senza che diventi fuori tema per la filosofia / linguistica vera e propria.
Stuper Utente

2
Michael: Esatto. Tutto è sintatticamente valido, ma può eventualmente essere un NOP (non ha alcun significato speciale). Niente di sbagliato in una lingua che ignora molte cose. Guarda tutte le cose che C ignora in questo programma di esempio: int main () {3 ;;; / * commento * /}
user281377

Molte persone dicono "no" perché non hanno alcuna distinzione concezionale tra sintassi e semantica. "Non si compila? Deve essere un errore di sintassi, allora!"
Fredoverflow,

Molte persone dicono "no" perché non c'è un vero significato in questo. Non appena aggiungi la struttura (cioè più di una regola di analisi ricorsiva) hai il concetto di sintassi. La violazione della struttura è un errore indotto dalla sintassi. L'errore indotto dalla sintassi è un errore di sintassi, indipendentemente dal fatto che il parser lo contrassegni come tale o meno.
Berin Loritsch,

5

Immagino che dipenda da cosa intendi per sintassi valida.

È possibile progettare un linguaggio che accetta qualsiasi stringa ma ignora tutto ciò che non è stato prescritto significato specifico. Questo è fondamentalmente l'equivalente di dire "Mi sbarazzerò degli errori di sintassi ma dicendo che non sono errori" - abbastanza inutile e enormemente indesiderabile per molte ragioni.

Oltre a ciò, l'unico modo in cui potresti avere una lingua senza errori di sintassi sarebbe avere ogni stringa possibile avere un'istruzione / uso validi associati ad essa. L'unico modo in cui riesco a vedere quello sarebbe quello di avere tutte le operazioni come singoli personaggi e di garantire che ad ogni singolo personaggio fosse assegnata un'operazione.

Ci sono milioni di cose che non vanno in questo - ovviamente non ci sono parole riservate, è tutto su dove viene utilizzato nel contesto e di conseguenza sarebbe sostanzialmente illeggibile e, mentre immune da errori di sintassi sarebbe molto più probabile che si verifichino ogni altro tipo di errore.

Quindi teoricamente possibile (AmmoQ lo dice in modo molto più accurato di me) ma del tutto indesiderabile.


Ho letto che TECO era così, a ciascun personaggio veniva assegnato un significato.
David Thornley,

3
Il codice macchina funziona in questo modo. Ogni possibile combinazione di byte può essere vista come un programma che fa qualcosa , anche se tutto ciò che fa è causare un interrupt.
user281377

David, ecco cosa stavo pensando, mi piace molto TECO. Sebbene l'input IIRC TECO possa contenere errori di sintassi. Ma dimostra la difficoltà di un linguaggio così denso, molto difficile da leggere e soggetto a errori difficili da capire.
Omega Centauri,

@ user281377: sul 6502, ci sono alcune istruzioni senza significati definiti. Alcuni hanno comportamenti coerenti, utili e non disponibili con alcuna istruzione documentata (il mio preferito è soprannominato "DCP" - decrementa un indirizzo di memoria e confronta il risultato con l'accumulatore, impostando le bandiere in modo appropriato), ma alcuni hanno comportamenti che dipendono da i tempi del bus in modi strani e bizzarri, e alcuni bloccheranno il processore abbastanza forte da richiedere un reset (anche un interrupt "non mascherabile" non aiuterà). Penso che queste ultime istruzioni possano essere considerate "errori di sintassi".
supercat,

5

Il codice in un linguaggio di programmazione non testuale potrebbe non contenere errori di sintassi.

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


3

Lo scopo stesso 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 vi si inserisce e ciò che entra nella semantica è arbitrario.

Di solito vuoi il contrario: allungare il più possibile la sintassi per risparmiare più tempo, ma ovviamente puoi anche omettere del tutto la sintassi e dichiarare ogni errore semantico: finirai con un interprete non tokenizzante.


0

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

Che cosa vuol dire?

Finché la lingua ha struttura e grammatica, ci sarà sempre il concetto di un errore di sintassi. La domanda è se lo imponi o meno. Le persone commetteranno errori e gli errori di sintassi sono ciò che la maggior parte dei progettisti di lingue cerca per aiutare i programmatori a evitare errori stupidi.

Un errore di sintassi è un errore introdotto dai programmatori che scrivono codice che non ha alcun significato per la lingua.

È impossibile eliminare gli errori di sintassi in base alla definizione sopra. Abbiamo tutti gli errori di ortografia, abbiamo tutti i nomi dei metodi errati. Avere il linguaggio in silenzio accettare l'ortografia e felicemente non fare nulla non è la mia idea di un'esperienza piacevole.

È possibile progettare un linguaggio in grado di utilizzare qualsiasi carattere Unicode valido (o sequenza di caratteri) come identificatori. Ci sono sfide, come la normalizzazione di caratteri / sequenze di personaggi equivalenti in modo che vengano riconosciuti come la stessa cosa, ma è possibile. NOTA: esistono quattro tipi standard di normalizzazione unicode .


1
La necessità di una struttura non richiede una grammatica. Considera Piet in cui la struttura si trova nella posizione del personaggio (o del colore) in una griglia, non nella sua relazione con altri personaggi in un morfema.
Mike Samuel,

1
Violare la struttura e cosa succede?
Berin Loritsch,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.