問題タブ [libclang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - How do I get an enum element's numerical value using libclang?
Suppose I have an enum definition, e.g.:
I would like to programmatically generate a map from any given enum definition, where the key is the enum element's name, and the value is the enum element's numerical value (e.g. myMap["TwoAgain"] == 2
)
So far, I know how to traverse the source file using clang_visitChildren()
, and extract individual tokens using clang_tokenize()
. Recursing through the AST, I get cursors/tokens in this order:
- "MyEnum" (CXType_Enum)
- "First" (CXToken_Identifier)
- "=" (CXToken_Punctuation)
- "1" (CXToken_Literal)
- "unsigned int" (CXType_UInt)
- "1" (CXToken_Literal)
- "MyEnum" (CXType_Enum)
- "Second" (CXToken_Identifier)
- "MyEnum" (CXType_Enum)
- "Third" (CXToken_Identifier)
- "MyEnum" (CXType_Enum)
- "TwoAgain" (CXToken_Identifier)
- "=" (CXToken_Punctuation)
- "Second" (CXToken_Identifier)
- "unsigned int" (CXType_UInt)
- "Second" (CXToken_Identifier)
I guess I could write an algorithm that uses this information to calculate every value. However, I was wondering if there's a simpler way? Can I get the numerical values directly from the libclang API?
clang - libclang が正しくないカーソル タイプを返す (stdlib および名前空間タイプ)
libclang を使用して、C++ の基本的なリフレクションを実行しています。ヘッダーの翻訳単位を作成してから、カーソルを使用してすべてのツリー要素にアクセスしています。場合によっては、必要な情報を取得するために qualtypes にフォールバックします。問題は、libclang が返すカーソル タイプが正しくないことです。以下の例のヘッダー ファイルの場合:
次の入力でclang_parseTranslationUnit2を使用して解析します。
引数: "-x"、"c++"
オプション: CXTranslationUnit_DetailedPreprocessingRecord | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_Incomplete;
struct BI get のフィールドにアクセスすると、次のようになります。
CXtype_Unexposedの代わりに m_vector へのカーソルのCXType_Int
しかし、std::stringメンバー m_string については、フィールドにアクセスして必要な情報を抽出できるCXType_Unexposedを取得します。文字列のフィールドにアクセスすると、「名前空間」と「typeref」のカーソルタイプが正しく取得されます。
lib clang が std::vector 型を理解できないのはなぜですか?
2015 年 6 月 1 日に最新の libclang バージョンを取得しました。
c++ - Clang C++ APIを使用して宣言のトークンを取得するには?
clang::ASTContext
内部にオブジェクトを含む独自の再帰 AST ビジター クラスがあります。
次に、たとえば、すべての名前空間宣言にアクセスして、それらの名前を色付けします。
それはほんの一例です。トークンなしで名前空間の名前の場所を取得する方法があるとしても、よりグローバルなアプローチに興味があります。
宣言ソース範囲内のトークンに「ジャンプ」してトラバースする方法はありますか?
llvm - libclang と LLVM C を使用したジャストインタイム コンパイル
Just-In-Time コンパイル コンテキストで使用したい C コードを生成できるソフトウェアがあります。私が理解していることから、LLVM/Clang が進むべき道であり、プロジェクトの保守性のために、llvm と Clang (libclang) の C API を使用したいと考えています。
libclang コンテキストを使用して作成しclang_createIndex
、翻訳ユニットを使用して作成を開始しましたcreateTranslationUnitFromSourceFile
(ファイル システムを経由せずに、代わりにソース コードを文字列として渡すことができればよかったのに)。しかし、私はそこでほとんど行き詰まります。libclang 変換ユニットから、JIT に必要と思われる LLVM の「実行エンジン」に移行するにはどうすればよいですか? それとも、C API を使用してもこれは不可能ですか?
c++ - Libclang 解析エラー
カスタム IDE のオートコンプリート機能を作成するために、qt で libclang を使用します。
私はこの機能を作りました:
しかし、うまくいきません。出力にエラー コード = 1 が表示されます (libclang ドキュメントの Unknow Error)。また、filen
parse 関数を呼び出す前後で変更されます。例:
C:/Users/Yoann/AppData/Local/Temp/plugin-test.Ns4152
C:\Dev\Qt\Qt5.5.0\Tools\mingw492_32\include\c++\4.9.2
ありがとう、
c++ - clang 形式の制御ステートメントの後にブレークします。
ファイルで使用BreakBeforeBraces: Allman
してい.clang-format
ますが、制御ステートメント (、、、... など) の中かっこがif
独自for
のwhile
行に配置されていません。
で中括弧にネストされた構成クラスを設定できることを読みましたBraceWrapping
が、正しい YAML 構文 (および崇高なテキスト プラグインの JSON 構文) を理解できず、既存の例を見つけることができませんでした。
これを行う方法はありますか?