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.
- 1. Czy dp jest taki sam jak dip?
- 2. Czy R.layout.listview jest taki sam jak R.id.listview
- 3. Czy LinqToSQL jest taki sam jak Linq?
- 4. Czy asynchroniczny w C# jest taki sam jak w F #?
- 5. Czy AppendHeader jest dokładnie taki sam jak AddHeader?
- 6. Czy int jest taki sam jak niepodpisany lub podpisany?
- 7. Czy $ PROGRAM_NAME jest taki sam jak 0 rubinów?
- 8. Czy rozmiar znaku * jest taki sam jak rozmiar int *?
- 9. Czy model pamięci Dalvika jest taki sam jak język Java?
- 10. Czy Mallocator Stephena Lavaveja jest taki sam w C++ 11?
- 11. Dlaczego jądro Linuksa # definiuje symbol jako taki?
- 12. Czy kontroler nadzorujący MVC i MVP jest taki sam?
- 13. Makro powtórzyć prawie taki sam kod
- 14. Taki sam .vimrc, dwa różne komputery
- 15. Dlaczego mój HTTP_USER_AGENT nie zawsze jest taki sam?
- 16. Jak zachować układ debugowania taki sam jak układ pulpitu?
- 17. Dlaczego Alt Gr ma taki sam kod klucza jak Ctrl?
- 18. Wbudowany analog CouchDB, taki sam jak sqlite dla SQL Server
- 19. Czy możliwe jest rozszerzenie ControlTemplate w taki sam sposób, jak rozszerzenie stylu w WPF?
- 20. Dlaczego rozmiar pustego dyktatu jest taki sam, jak w pustym dykcie w Pythonie?
- 21. Java 7 Model pamięci taki sam jak JSR-133?
- 22. UISearchBar taki sam jak iMac Finder Funkcjonalność wyszukiwania
- 23. Dlaczego "Brak" ma taki sam efekt jak "np.newaxis"?
- 24. Photoshop Mock Up czcionki nie jest taki sam jak w HTML
- 25. Jeśli metoda rozszerzenia ma taki sam podpis jak metoda w zaplombowanej klasie, jakie jest pierwszeństwo połączenia?
- 26. W języku C, jest warunek: "if (a! = NULL)" taki sam jak warunek "if (a)"?
- 27. Czy JVM OpenJDK jest taki sam, jak JVM Oracle Java SE?
- 28. dlaczego łańcuch podzielony przez ciąg regex w Kotlin nie jest taki sam w Javie?
- 29. Dlaczego Git lista config (łącznie) nie jest taki sam jak system globalny + + lokalnego
- 30. Czy program Python Decorator jest taki sam jak adnotacja Java lub Java z aspektami?
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