從libclang API中不會立即明白提取令牌的合適方法是什麼。然而,你很少需要(或者想要)降低到這個水平 - 遊標層通常更有用。
但是,如果這是你需要的東西 - 一個小例子可能看起來像:
import clang.cindex
s = '''
int fac(int n) {
return (n>1) ? n*fac(n-1) : 1;
}
'''
idx = clang.cindex.Index.create()
tu = idx.parse('tmp.cpp', args=['-std=c++11'],
unsaved_files=[('tmp.cpp', s)], options=0)
for t in tu.get_tokens(extent=tu.cursor.extent):
print t.kind
這(對我的版本鐺的)產生
TokenKind.KEYWORD
TokenKind.IDENTIFIER
TokenKind.PUNCTUATION
TokenKind.KEYWORD
TokenKind.IDENTIFIER
TokenKind.PUNCTUATION
TokenKind.PUNCTUATION
TokenKind.KEYWORD
TokenKind.PUNCTUATION
TokenKind.IDENTIFIER
TokenKind.PUNCTUATION
TokenKind.LITERAL
TokenKind.PUNCTUATION
TokenKind.PUNCTUATION
TokenKind.IDENTIFIER
TokenKind.PUNCTUATION
TokenKind.IDENTIFIER
TokenKind.PUNCTUATION
TokenKind.IDENTIFIER
TokenKind.PUNCTUATION
TokenKind.LITERAL
TokenKind.PUNCTUATION
TokenKind.PUNCTUATION
TokenKind.LITERAL
TokenKind.PUNCTUATION
TokenKind.PUNCTUATION
你不記號化的語言元素如果你有Clang或其他工具,解析器具有內置的能力。存在如何得到結果的問題。您可以在http://stackoverflow.com/a/36681568/120163上看到C詞法分析器的輸出。問題是,Clang提供了什麼API來提供對這些令牌的訪問? –
如果libclang提供了一個更好的標記化工具。然而,我一直在努力,首先得到與你所提到的類似的輸出,其次,使用那個輸出來處理我描述的例子中所述的需求。任何指導方針? –
我的觀點更多的是關於誰在做標記。如果*你*會這樣做,目前還不清楚鏗鏘會如何幫助或爲什麼你想要它。 (如果你所有的都是令牌,不管你如何得到它們,個人都會懷疑你是否會用C++代碼做很多有趣的事情)。我對Clang APIs知之甚少。也許這個答案會幫助你:http://stackoverflow.com/a/25371656/120163 –