I linguaggi di markup hanno il concetto equivalente di 'semantica' che puoi trovare in C o C ++?

1

Forse mi manca qualcosa, ma i cosiddetti linguaggi di markup hanno il concetto equivalente di semantics che puoi trovare in C o C ++?

A giudicare dal modo in cui si analizza la lingua, non si hanno troppe opzioni, non c'è troppo contesto, si analizzano i token e li si applica al codice sorgente.

Sono tentato di dire che non solo la semantica non esiste in questo caso, ma questo succede solo nei linguaggi di markup: ho ragione?

    
posta user2485710 11.05.2014 - 18:32
fonte

3 risposte

4

Linguaggi di markup comuni e linguaggi di programmazione comuni sono indistinguibili in quanto hanno sia la sintassi che la semantica. Differiscono solo nel fatto che lo scopo di un linguaggio di programmazione è generare codice eseguibile per un processore, mentre lo scopo di un linguaggio di markup è generare dati dichiarativi per un motore di visualizzazione.

Entrambi hanno una struttura lessicale. Sono costituiti da token come parole, numeri e punteggiatura.

Entrambi hanno una struttura sintattica. I token possono essere organizzati in molti modi diversi e alcune disposizioni sono valide mentre altre no.

Entrambi hanno una struttura semantica. I token hanno un significato, alcuni sono predefiniti e alcuni definiti dall'utente, e il modo in cui i token sono disposti ha un significato.

Se prendiamo il seguente frammento di codice:

<div class="yolo">Hello world</div>

I token div, classe e parentesi angolari hanno significati predefiniti. Il token "yolo" è una stringa che fornisce un nome definito dall'utente per il div. Le parentesi angolari separano il markup dal testo. Queste sono osservazioni semantiche.

Per entrambi, la fase parser del compilatore si ferma nello stesso punto, quando ha generato una rappresentazione interna adatta (come un AST).

La fase successiva per un linguaggio di programmazione è generare codice. La fase successiva per un linguaggio di markup potrebbe essere quella di generare un DOM. Quella fase dipende dalla semantica, ma non parte di essa.

    
risposta data 13.05.2014 - 06:00
fonte
10

Una lingua è definita (a) dalla sua sintassi che include la grammatica e la struttura lessicale o il vocabolario, e (b) la semantica, che è il significato. In C, lo snippet a + 1 ha il significato " aggiungi il contenuto della variabile a e il numero intero 1 ". In HTML, lo snippet <p>foo bar</p> ha il significato di " un elemento di paragrafo contenente il testo foo bar ".

Quindi i linguaggi di markup hanno semantica (cioè un significato). Tuttavia, la semantica non ha nulla a che fare con l'analisi. Durante l'analisi, l'input viene suddiviso in base alla struttura lessicale. Questi token sono quindi organizzati secondo la grammatica della lingua. Per esempio. il frammento di inglese you asked a question potrebbe essere organizzato come

subject: 'you',
predicate: (verb: 'ask',
            tense: past,
            object: (article: indefinite,
                     noun: 'question'))

Questa struttura aiuta a capire il significato, ma non è lo stesso del significato attuale.

Ci possono anche essere frasi ben formate che non hanno una semantica valida. Ad esempio, il precedente esempio C a + 1 non ha senso se a contiene una struct invece di un tipo numerico. In inglese, Colorless green ideas sleep furiously sarebbe un esempio di una frase ben formata, ma priva di senso.

    
risposta data 11.05.2014 - 20:10
fonte
1

I linguaggi di marcatura hanno sicuramente la sintassi (sequenze specifiche di caratteri che definiscono i token) e la semantica (che significa essere applicata al contenuto analizzato). Non puoi davvero avere una lingua senza entrambi. Potresti essere in grado di discutere di XML (le semantiche sono davvero specifiche per un particolare formato, rendendo ciascuna una DSL), ma non puoi discutere sull'HTML.

Quello che manca in HTML è ESPRESSIONE DICHIARAZIONI o variabili. Senza aggiungere in CSS non c'è modo di farlo fare un calcolo da solo. Ciò significa che non è in grado di eseguire calcoli ed è limitato a fornire semantica ai contenuti, ma non può né creare né modificare il contenuto da solo.

Si noti che il modo in cui si aggiunge / modifica il contenuto html al volo è possibile solo perché html ha semantica - in particolare, si può dire: questo gruppo di testo è un programma per computer in linguaggio x, eseguilo (dove X è generalmente javascript).

    
risposta data 13.05.2014 - 05:08
fonte

Leggi altre domande sui tag