2011-10-15 43 views
1

我正在使用bison來實現一個簡單的分析器。和語法的一行是這樣的:使用Bison在一行中訪問兩個或兩個以上的標記

prefix_definition : PREFIX IDENTIFIER IDENTIFIER ABBR IDENTIFIER ';' 

我不確定如何訪問第一,第二和第三分別IDENTIFIER。我的Flex文件中讀取IDENTIFIER這樣的:

IDENTIFIER_REGEX (_|[A_Za-z])(_|[0-9A-Za-z])* 

{IDENTIFIER_REGEX}  { yylval.identifier=strdup(yytext); return IDENTIFIER; } 

我不能用簡單yylval.identifier。我試過$2.identifier左右,但它根本不起作用(而且它不應該是工作無論如何)。有沒有解決這個問題的方法?

如果bison/flex不支持這種訪問,我正在考慮使用FIFO隊列。這是一個好的解決方案嗎?

+0

我刪除了「Adobe Flex」標籤並添加了「gnu-flex」標籤;因爲我認爲這篇文章涉及詞法分析器;而不是Flash Platform SDK。 – JeffryHouser

回答

2

您可以在聲明它(在野牛文件)指定令牌的類型將用於非終結點(在那裏你會使用%type),像這樣以同樣的方式:

%token <identifier> IDENTIFIER 

(其中identifier是其中一個在%union中聲明的字段)。然後$2$3等將指向正確的東西,無需經過yylval(即它們將在您的情況下爲char *)。

+0

它的工作原理。事實上,我只是與yylval混淆了$ 2 $ 3等,並認爲它們是內容。 – xis

相關問題