Linguaggi come il C ++ richiedono una tabella dei simboli per analizzare correttamente, perché alcuni costrutti sono sintatticamente ambigui se non si sa se un determinato token rappresenta un tipo, una funzione o una variabile.
L'esempio concreto principale di cui sono a conoscenza è che la dichiarazione delle funzioni e la costruzione dei valori utilizzano entrambe le parentesi:
int foo(3); // creates an integer called foo with value 3
int bar(int); // creates a function called bar that takes an int and returns an int
Per analizzare questo, devi sapere che int
è il nome di un tipo e 3
non lo è. A causa dei tipi definiti dall'utente, in generale non puoi sapere se un determinato token è un nome di tipo a meno che tu non abbia una tabella dei simboli contenente tutti i tipi che il parser ha visto fino a questo punto. Tieni presente che il famigerato " Most Vexing Parse " è strettamente correlato a questa particolare ambiguità.
L'autore che hai citato probabilmente afferma che la lingua Go non ha ambiguità come questa, e quindi può essere analizzata correttamente senza una tabella dei simboli. Se osservi le specifiche della lingua ufficiale di Google , noterai che praticamente tutto ciò che riguarda la sintassi viene fornito con una definizione EBNF. Non l'ho letto a fondo, ma sembra probabile che la sintassi di Go sia una grammatica attuale senza contesto, non semplicemente approssimata da una, che è piuttosto carina rispetto a C ++.