ホームページ バックエンド開発 C#.Net チュートリアル C++ を使用して C++ 構文形式を分析する

C++ を使用して C++ 構文形式を分析する

Nov 21, 2016 am 11:50 AM
analysis

はじめに

最近、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(ifstream) で置き換えることができます。

使用

main 関数には _DEBUG マクロ保護があるため、ライブラリ リリースとしてコンパイルすることをお勧めします。

#include

try

{

auto result = cpp_analysis::analysis("[cpp_header_file]");

// todo


}

catch (logic_error& e)

{

// todo:
}

プロジェクトの場所


https://github.com/FettLuo/cpp_analysis[新しいタブで開く]

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C言語のnullの代替案は何ですか C言語のnullの代替案は何ですか Mar 03, 2025 pm 05:37 PM

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

次のレベルのCコンパイラを追加する方法 次のレベルのCコンパイラを追加する方法 Mar 03, 2025 pm 05:44 PM

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

どの言語コンパイラが優れていますか? どの言語コンパイラが優れていますか? Mar 03, 2025 pm 05:39 PM

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

nullは、C言語での最新のプログラミングではまだ重要ですか? nullは、C言語での最新のプログラミングではまだ重要ですか? Mar 03, 2025 pm 05:35 PM

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

C言語コンパイラのWebバージョンは何ですか? C言語コンパイラのWebバージョンは何ですか? Mar 03, 2025 pm 05:42 PM

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

C言語コンパイラによるコードをコピーする方法 C言語コンパイラによるコードをコピーする方法 Mar 03, 2025 pm 05:43 PM

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

c言語オンラインプログラミングウェブサイトc言語コンパイラ公式ウェブサイトの要約 c言語オンラインプログラミングウェブサイトc言語コンパイラ公式ウェブサイトの要約 Mar 03, 2025 pm 05:41 PM

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

c言語コンパイラインストールチュートリアル(コンピューターバージョン) c言語コンパイラインストールチュートリアル(コンピューターバージョン) Mar 03, 2025 pm 05:41 PM

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

See all articles