[英]Matching words in ANSI C
如何匹配ANSI C中的單詞(1-n個字符)? (另外:在C源代碼中匹配常量的模式是什么?)
我嘗試讀取文件並將其傳遞給regexec()
(regex.h)。 問題:我正在編寫的工具應該能夠讀取源代碼並找到所有使用的常量(#define)以檢查它們是否已定義。
用於測試的模式是: [a-zA-Z_0-9]{1,}
。 但這會匹配“test.h”中的“h”等詞。
標識符必須以字母或下划線開頭,因此模式是
[A-Za-z_][A-Za-z0-9_]*
我知道C和預處理器標識符之間沒有語法差異。 對於預處理器使用大寫,對C標識符使用小寫,但沒有實際要求。 除非保證定義使用不同的命名約定,否則您基本上必須找到源文件中的每個標識符和任何包含的文件,並將它們分類為預處理程序標識符,C標識符和未聲明的標識符。
從GCC手冊:
預處理標記分為五大類:標識符,預處理數字,字符串文字,標點符號等。 標識符與C中的標識符相同:字母,數字或下划線的任何序列,以字母或下划線開頭。 C的關鍵詞對預處理器沒有意義; 它們是普通的標識符。 例如,您可以定義名稱為關鍵字的宏。 可以將唯一可以視為預處理關鍵字的標識符定義。
除了通過C源代碼進行正則表達式搜索之外,另一個選擇是使用像Boost Wave這樣的預處理器庫,或者像Coan這樣的東西,而不是從頭開始。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.