Following this question and Andrew's suggestions, I am trying to have liblang add the compiler system include paths (in Windows) in order for my Python code
import clang.cindexdef parse_decl(node):reference_node = node.get_definition()if node.kind.is_declaration():print(node.kind, node.kind.name, node.location.line, ',', node.location.column, reference_node.displayname)for ch in node.get_children():parse_decl(ch)# configure path
clang.cindex.Config.set_library_file('C:/Program Files (x86)/LLVM/bin/libclang.dll')index = clang.cindex.Index.create()
trans_unit = index.parse(r'C:\path\to\sourcefile\test.cpp', args=['-std=c++11'])parse_decl(trans_unit.cursor)
to completely parse C++ source files like this one
/* test.cpp
*/
#include <iostream>
#include <vector>
#include <fstream>
#include <cmath>
#include <algorithm>
#include <iomanip>using namespace std;void readfunction(vector<double>& numbers, ifstream& myfile)
{double number;while (myfile >> number) {numbers.push_back(number);}}double meanfunction(vector<double>& numbers)
{double total=0;vector<double>::const_iterator i;for (i=numbers.begin(); i!=numbers.end(); ++i) {total +=*i; }return total/numbers.size();}
Now, without the compiler system include path set up appropriately (using Windows), I get the following output:
CursorKind.USING_DIRECTIVE USING_DIRECTIVE 8 , 17 std
CursorKind.VAR_DECL VAR_DECL 10 , 6 readfunctionProcess finished with exit code 0<Diagnostic severity 4, location <SourceLocation file 'test.cpp', line 3, column 10>, spelling "'iostream' file not found">
Unfortunately, I cannot make sense (new in Python and Clang) of this approach or how to implement this solution in my Python code.
I have also tried ccsyspath, but I do not have the skills to 'adjust it for windows'.
Anyone knows how to solve this issue?