2012-11-21 38 views
1

我是新來ANTLR的,我已經定義使用ANTLR的3ANTLR的使用分析器內詞法

一個基本語法的語法可以在下面看到:

grammar data; 

@header { 
package com.data.language; 
} 


null  : 'null'; 
data  : null | STRING | INTEGER; 
STRING : ('a'..'z'|'A'..'Z')+; 
INTEGER : '0'..'9'+; 

這工作完全和ANTLRWorks產生碼。但是,我想在詞法分析器中使用數據關鍵字。例如:

I : data '*' INTEGER; 

的問題是,一旦這樣做,我得到以下異常:

Error 106: reference to undefined value: data 

,我無法看到ANTLRWorks的圖表中的數據。我只能看到I lexer的* INTEGER。

是我想要做的,有可能嗎?這怎麼可能?

回答

1

在詞法分析器中使用分析器產品是不可能的:詞法分析器產生稍後被分析器使用的令牌(「單詞」),而分析器識別單詞序列(「短語」)。詞法分析器層在解析器層下面;沒有任何「反饋渠道」可以讓詞法分析器「瞭解」解析器在做什麼。

這樣

data_star_int : data '*' INTEGER; 

解析器規則是,很明顯,細,因爲語法規則可以參考詞法分析器令牌和其它語法規則兩者。您可以使用data_star_int來匹配多令牌序列。

我會用命名標記替換內聯*,但這是一個偏好問題。

+0

這是你已經定義的data_star_int嗎? – user1646481

+0

@ user1646481是的,這取代了你的'I'規則(我不想稱它爲'i',以避免引入與循環變量的通用名稱相沖突的名稱)。 – dasblinkenlight

相關問題