C++ を使用して C++ 構文形式を分析する
はじめに
最近、C++ プロジェクトではスクリプトを使用する必要があります。これは、オブジェクトをスクリプト実行環境にバインドする方法に関連しています。複数のスクリプト言語が使用されるため、既存のバインド技術ではニーズを満たすことができません。したがって、C++ ヘッダー ファイルを解析し、記述に従ってバインドすることのみを求めることができます。最初に、boost にはセットがあることがわかりましたが、boost はあまりにも肥大化しているため、プロジェクト後の開発環境の構築に一定の要件があります。私は最もシンプルなプロジェクト管理を目指しているため、ブーストは適していません。独自のセットを作成します。
テキスト
C++の構文形式の概要
#で始まるコンパイラ指令と関数を除き、すべてセミコロンで終わる必要があります
if、do/while、forを除き、コードブロックは中かっこ/花で囲まれている必要があります単一のステートメントで括弧 "{}"
コード ブロックには、名前空間、グローバル、クラス、構造体、グローバル関数、メンバー関数、ラムダ、関数内の名前のないコード ブロックの 8 種類があります
名前空間は、グローバル、宣言の前に「名前」を追加するだけです スペース::」プレフィックス
クラス宣言ブロックとグローバルブロックの違いはフレンド宣言、メンバーアクセス権です
テンプレートはクラスと関数をサポートします
関数とテンプレートにはパラメータリストがあります
セミコロンで終わる宣言は、組み込み型 (int、double など)、クラス、テンプレート クラス、typedef 型、関数ポインター、ラムダ
関数は同じ名前を持つことができます
クラスのメンバー関数アクセス 他のメンバーは、グローバル関数とは異なり、関数が定義された後に宣言できます。宣言されている必要があるため、C++ ファイルがクラス化された列挙 (enum クラス) であるかどうかをスキャンするためにポインターを使用することはできません。宣言されているスコープに可視である必要はありません。そうでない場合は、メンバーを同時にスコープに追加する必要があります。
要件には必要ありません。
テンプレート
関数本体
カンマで区切られた複数の変数をサポートしたくない
型検証
デフォルトパラメータ
union
列挙型は名前の競合を判断しない
lambda
変数名を開始できません。数字付き
クラスの継承
関数ポインタ
開発の原則
まだクロスプラットフォームではなく、VSのみで、このようにシステムAPIは使用されていません クロスプラットフォームへの変更に適しています
C++の使用
iterのみが進歩しますしかし後退はしません
構文エラーやファイルの終わりに遭遇すると例外がスローされます
{に遭遇するとブロック処理に入ります
最後に言語単位の処理が行われ、処理後は関数自体でなければなりません; と前の内容、return
最初の原則が達成できないため、メンバー関数の定義コードは解析されません、メンバー関数はまだ宣言されていない他のメンバー関数を参照する可能性があります
最高のパフォーマンスではありません、しかし、それは可能です この構造は極限まで最適化されています
完全な分析は求めていませんが、このフレームワークでは C++11 以降のバージョンのすべての機能を分析できます
コメントはありません、英語は苦手、中国語のコメントはありませんグローバリゼーションには適していません
構造の説明
バリアント、メソッド、型、コメント、列挙、列挙値はオブジェクトから継承され、それらはすべてグローバル、クラス、または構造に属することができます。
document は C++ コンパイル単位を表します。
context はコンテキストを表し、上向きに検索できるキューです。ドキュメントの解析が完了すると、解析された変数、関数、および型が保存されます。
reader、ファイルリーダー、forward char iterator は、istreambuf_iterator
使用
main 関数には _DEBUG マクロ保護があるため、ライブラリ リリースとしてコンパイルすることをお勧めします。
#include
try
{
auto result = cpp_analysis::analysis("[cpp_header_file]"); // todo
}
{
// todo:
}
https://github.com/FettLuo/cpp_analysis[新しいタブで開く]

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、CのNull Poernter recerferenceの課題を調査します。問題は、問題はnullではなく、その誤用であると主張しています。 記事では、参照前のチェック、ポインターInitialiなど、非参照を防止するためのベストプラクティスの詳細

この記事では、printf内の\ nエスケープシーケンスを使用してcで新しいライン文字を作成し、関数を置く方法について説明します。 機能を詳しく説明し、出力のラインブレークに使用することを示すコード例を提供します。

この記事は、Cコンパイラの選択に関する初心者を案内しています。 GCCは、使いやすさ、幅広い可用性、広範なリソースが初心者に最適であるため、最適であると主張しています。 ただし、GCC、Clang、MSVC、およびTCCも比較して、その違いを強調しています

この記事では、現代のCプログラミングにおけるNullの継続的な重要性を強調しています。 進歩にもかかわらず、Nullは明示的なポインター管理にとって重要なままであり、有効なメモリアドレスがないことをマークすることにより、セグメンテーションの障害を防ぎます。 最高のPRAC

この記事では、初心者向けのオンラインCコンパイラをレビューし、使いやすさとデバッグ機能に焦点を当てています。 OnlineGDBとRepl.itは、ユーザーフレンドリーなインターフェイスと役立つデバッグツールのために強調表示されます。 プログラムやコンパイルなどのその他のオプション

この記事では、C IDEでの効率的なコードコピーについて説明します。 コピーはコンパイラ機能ではなくIDE機能であり、IDE選択ツールの使用、コード折りたたみ、検索/交換、テンプラなど、効率を向上させるための詳細戦略であることを強調しています。

この記事では、オンラインCプログラミングプラットフォームを比較し、デバッグツール、IDE機能、標準コンプライアンス、メモリ/実行の制限などの機能の違いを強調しています。 「最良の」プラットフォームはユーザーのニーズに依存していると主張しています。

このチュートリアルは、Windows、MacOS、LinuxにCコンパイラをインストールすることでユーザーをガイドします。 人気のコンパイラ(MINGW、Visual Studio、XCode、GCC)のインストールを詳述し、環境可変構成を説明し、トラブルシューティング手順を提供します
