2013-04-30 50 views
1

我正在爲Clite實現一個語法分析器作爲編程語言類的任務。 我使用遞歸下降解析器和match()函數,該函數將輸入掃描器中的字符串作爲參數,並檢查它是否爲預期的標記,否則返回錯誤消息。定義集C++

我一直在試圖爲字母表聲明一個集合,所以我不必匹配字母表中的每個字母。事情是這樣的:

void letter(){ 
    if(currentToken==LETTER){ 
     match(LETTER); 
    } 
    else 
     error(); 
} 

我試着用#定義,但意識到那不是工作

#define LETTER "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" 

還與工會或typedef的嘗試,但不能這樣做。有任何想法嗎?

回答

1

http://www.cplusplus.com/reference/cctype/isalpha/

INT因而isalpha(INT C);

檢查字符是字母

此外,檢查出相關的功能:http://www.cplusplus.com/reference/cctype/

順便說一句,你試圖永遠不會成功,因爲什麼

1)==不會嘗試做'包含'等'是'等的子集,但要求它的兩個操作數相等。

2)你正在做的#define沒有定義一個數組,或者一個容器,或者任何其他類型的數據結構,那它爲什麼會起作用?如果你需要這樣做,你可以看看std :: set。

+0

感謝您的提示,所以我怎麼能實現'包含'' – 2013-04-30 01:09:52

+0

@Mario Montoya使用std :: set(如果您將對集合進行多次比較)或strchr/strstr(如果您只會做一個,例如,以避免需要把它變成一個集合的開銷) – Patashu 2013-04-30 01:19:49

+0

我解決了我的問題與strbrk創建一個字符數組鍵和比較我的輸入與它。如果我的輸入包含在鍵中它返回true。 感謝您的幫助 – 2013-04-30 02:09:06