2011-07-29 32 views

回答

12

令牌不一定在符號表中的符號。例如,如果令牌是保留字,則不會將其輸入到符號表中。如果令牌是標識符,那麼它可能會被輸入到符號表中。

採取例如以下聲明:

char s[100]; 

甲詞法分析器可以輸出以下標記:取決於實現

<"char", IDENTIFIER> 

它可以被識別爲一個保留字或輸入符號表中預定義的類型名(我不知道這裏100%),

<"s", IDENTIFIER> 

「S」 被輸入在符號表中作爲變量標識符,

<"[", OPEN_SQUARE_BRACKET> 

在符號表中沒有輸入,

<"100", INTEGER_LITERAL> 

在符號表中沒有輸入,

<"]", CLOSE_SQUARE_BRACKET> 

沒有進入在符號表,

<";", SEMI_COLON> 

未輸入符號表中。

所以你基本上是在符號表中只有那些你需要在編譯過程以後的參考憑證進入。例如,在後來的函數體,當你發現

strcpy(s, "Hello, world\n"); 

再次識別令牌<「S」,標識符>然後在符號表中查找。符號表會說「s」已被聲明爲char []類型的變量。

所以,我會說令牌是詞法analizer承認任何輸入塊,並且只有具有特殊的意義一定令牌輸入爲符號符號表。

+0

非常感謝你的回覆!我莫名其妙地混了 –

+0

所以從上面下的符號表;-)的名字 - 它是公平的認爲所有令牌進入符號表實際上 - 只標識?即什麼標記可能被輸入到不是標識符的符號表中? ..符號的定義完全是一個標識符? (而不是其他令牌'[',';','100'等。我猜測,我不知道。) – wardw

+0

據我所知你是正確的:在符號表中輸入的唯一標記是標識符(函數,變量等)(也可參見http://en.wikipedia.org/wiki/Symbol_table) – Giorgio

0

符號是在KEY給定的常量作爲處於S = S在該表中,或PI =裨該方程中,而令牌代表了給定爲交換在該條件下的平臺。