2
我有這個例子C文件我想分析:使用pycparser解析struct C中的struct?
StrcutWithinStruct.c
// simple struct within a struct example
struct A {
int a;
};
struct B {
A a;
int b;
};
我跑pcyparser解析它,用下面的代碼
exploreStruct.py
#parse StructWithinStruct
from pycparser import parse_file
ast = parse_file(filename='..\StructWithinStruct.c')
ast.show()
其結果是,我得到了以下內容:
Tracback (most recent call last):
File "exploreStruct.py", line 3, in <module>
ast = parse_file(filename='...\StructWithinStruct.c')
File "D:\...\pycparser\__init__.py", line 93, in parse_file
return parser.parse(text,filename)
File "D:\...\pycparser\c_parser.py", line 146, in parse
debug=debug_level)
File "D:\...\pycparser\yacc.py", line 331, in parse
return self.parseropt_notrack(input, lexer, debug, tracking, tokenfunc)
File "D:\...\pycparser\yacc.py", line 1181, in parseropt_notrack
tok=call_errorfunc(self.errorfunc, errtoken, self)
File "D:\...\pycparser\yacc.py", line 193, in call_errorfunc
r=errorfunc(token)
File "D:\...\pycparser\c_parser.py", line 1699, in p_error
column=self.clex.find_tok_column(p)))
File "D:\...\pycparser\plyparser.py", line 55, in _parse_error
raise ParseError("%s: %s % (coord, msg))
pycparser.plyparser.ParserError: D:...\StructWithinStruct.c:7:2: Before A
那麼,pycparser是否可以處理結構體內的struct,或者不是? 我認爲這是一些基本的要求,所以我敢肯定,趴在我的配置某處的問題...
一兩件事:我知道pcypareser作者,@Eli Bendersky,說一個人應該use Clang to parse C++ ,但我想知道現在是否有另一種選擇來解析C++(最好是通過Python),並且用戶友好。
感謝。
分號在這裏是一個錯字。並存在於原始代碼中。 +1與C到C++之間的區別,我想這就是爲什麼我問及解析C++的原因......我正在使用C++,但不知道在將結構聲明爲類型的方式上存在實際差異名稱... –
@BakItzik在C中,結構類型是一個單獨的標識符空間,所以您必須在引用某個類型時顯式聲明狀態。然而,在C++中,'struct'相當於一個'class',只是默認的初始繼承類型'private'替換爲'public'。因此,在C++中用'struct'關鍵字聲明的類型成爲全局可用的類型名稱,與聲明爲'class'的類型相同。 – CiaPan