W konstrukcji kompilatora, kiedy mówisz o tokenach, jest tokenem takim samym jak symbol/kolejnym terminem na symbol? Po jakimś badaniu uważam, że rozumiem, że token jest symbolem z odniesieniem do tablicy symboli, a zatem jakiś przypisany symbol/symbol z dodatkowymi informacjami? Dzięki za wyjaśnienie :-)W konstrukcji kompilatora symbol jest taki sam jak tokena?
Odpowiedz
Token niekoniecznie jest symbolem w tabeli symboli. Na przykład, jeśli token jest słowem zastrzeżonym, nie jest on wprowadzany do tabeli symboli. Jeśli token jest identyfikatorem, najprawdopodobniej zostanie wpisany do tabeli symboli.
Weźmy na przykład następujące oświadczenie:
char s[100];
leksykalne analizator mógł wyjść następujących znaczników:
<"char", IDENTIFIER>
zależności od implementacji może to być uznane za zastrzeżonego słowa lub wpisany tabela symboli jako nazwa wstępnie zdefiniowanego typu (nie jestem tu w 100% pewna),
<"s", IDENTIFIER>
„s” jest podana w tablicy symboli jako zmienna identyfikatora
<"[", OPEN_SQUARE_BRACKET>
nie weszła w tablicy symboli
<"100", INTEGER_LITERAL>
nie weszła w tablicy symboli
<"]", CLOSE_SQUARE_BRACKET>
nie weszła w tabeli symboli,
<";", SEMI_COLON>
nie wpisano w tabeli symboli.
Tak więc w zasadzie wprowadzasz do tabeli symboli tylko te żetony, które powinieneś wskazać później podczas kompilacji. Np później w ciele funkcji, gdy znajdziesz
strcpy(s, "Hello, world\n");
rozpoznać ponownie token < „S”, IDENTIFIER> i szukać go w tablicy symboli. Tablica symboli powie, że "s" zostało zadeklarowane jako zmienna typu char [].
Więc powiedziałbym żeton jest każdy kawałek wejścia, które jest uznawane przez leksykalnego w analizator, a to tylko niektóre żetony ze szczególnym znaczeniu są wprowadzane jako symboli w tablicy symboli.
Symbol jest stałą PODANE W TYM KLUCZE, jak w S = S w tej tabeli, lub Pi = Pi w tym równaniu, podczas gdy token reprezentuje podany jako medium wymiany w tym stanie.
Dziękuję bardzo za tę wspaniałą odpowiedź! W jakiś sposób pomieszałem nazwę tabeli symboli ;-) –
Czyli z powyższego punktu widzenia należałoby uczciwie twierdzić, że wszystkie tokeny wpisane do tabeli symboli są w rzeczywistości tylko identyfikatorami? tj. jakie tokeny mogą być wprowadzane do tabeli symboli, które nie są identyfikatorami? Czy definicja symbolu jest dokładnie identyfikatorem? (w przeciwieństwie do innych tokenów "[", ",", "100" itp. Spekuluję, nie mam pojęcia.) – wardw
O ile wiem, masz rację: jedynymi tokenami wpisanymi do tabeli symboli są identyfikatory (funkcji, zmiennych itp.) (Zobacz także http://en.wikipedia.org/wiki/Symbol_table) – Giorgio