我正在爲包含特殊預處理器部分中的預處理器指令的語言(由{
和}
包含)構建解析器。其中之一與C
#define
類似。如何在兩個單獨的詞法分析模式中使用詞法分析器規則?
我想在一次運行中使用針對預處理器部件的孤島語法來分析文件。 當我點擊#define
指令時,我想包含另一個孤島語法,其中包含「常規」部分的所有標記(大約200個),除了預處理區域開始標記並在不同通道上發出標記以及當然有一個停止令牌返回到預處理器島語法。由於我解析的文件是有效的,所以預處理器區域起始令牌{
真的被刪除並不是非常重要,但會很好。
有沒有辦法爲兩種模式「重複使用」詞法分析器規則(我可以發射到命名的非const通道,該值可以在進入/離開島時改變)?
這是一些示例源文件:
int a = 42;
{ // start preprocessor section
// simple single line #define
#define ABC 42
// will be fix "2 * 42" even if ABS is changed later on
#define DEF 2 * ABC
// multiple line define (all but last line needs to have a "\" before the newline
#define GHI 3 \
+ 4
// the definition can contain (almost) arbitrary code, except line comments, preprocessor sections and preprocessor statements
#define JKL if (a > 23) then b = c + d; str = "} <- this must not be the end of the preprocessor section"; end_if;
} // end preprocessor section
這就是我對「少數」規則的做法。 200條規則的做法是什麼? – Onur
@Onur以這種形式創建原始規則的200份副本。 –
我採取了你的方法,雖然我不手動做樣板代碼(請參閱我的答案)。 – Onur