搜尋
首頁後端開發C#.Net教程用C++對C++語法格式進行分析
用C++對C++語法格式進行分析Nov 21, 2016 am 11:50 AM
analysis

前言

最近C++專案需要用到腳本,這就關係到如何綁定物件到腳本運行環境。因使用到多套腳本語言,所以現有的綁定技術,都無法滿足需求。所以只能尋求解析C++的頭文件,再根據描述進行綁定。起初發現boost有一套,但boost實在太臃腫了,對專案之後開發環境的搭建有一定要求。我力求最簡潔的專案管理,boost不太適合。自己寫套吧。

正文

C++的語法格式總結

除編譯器指令#開頭與函數外,均必須要求分號結尾

程式碼區塊除單一語句的if、do/while、for都必須在大括號/花括號“{}”

程式碼區塊有8種,命名空間,全局,類,結構,全局函數,成員函數,lambda,函數內無名代碼區塊

命名空間與全局相同,僅在聲明前加「命名空間::”前綴

類別聲明區塊與全域區塊的區別有,友元聲明,成員存取權限

模板支援類別與函數

函數與模板有參數列表

分號結尾的聲明可以是內​​建類型(int、double等)、類別、模板類別、typedef出來的類型、函數指標、lambda

函數可以重名

類別的成員函數存取其他成員可以在此函數定義之後聲明,並不像全域函數那樣必須已經聲明,所以用指標掃描C++檔案是否合法是做不到的

若是類化的枚舉(enum class),不需要對聲明所在範圍可見,否則同時要把成員也同時加入所屬範圍

我不打算支援的,對於需求沒有必要性的

命名空間

模板

函數體

逗號分割的多個變數我不想很好的支援

類型的校驗

逗號分割的多個變數我不想很好的支援

類型的校驗

逗號

union

枚舉不判斷名稱衝突

lambda

變數名稱不能以數字開始

類別的繼承

函數指標

開發的原則

函數指標

適於修改為跨平台

使用C++

iter只進不退

遇到語法錯誤或檔案結尾,拋異常

遇到{則進入區塊處理

處理;處理完;及之前的內容再返回

成員函數定義代碼不分析,因為第一條原則做不到,成員函數可能會引用還未聲明的其他成員函數

不為最好的性能,但可以在這個結構上優化到極致

不求完整解析,但在這個框架上可以做到解析全部c++11與更高的版本特性

無註釋,英文不好,中文註釋又不適合全球化

 

結構描述

variant,method,type,comment,enumeration,enumeration_value從object繼承,它們都可以屬於全局或類別或結構體。

document表示一個c++編譯單元。

context表示一個上下文,是一個可以往上找到的佇列。 document完成解析後儲存解析出來的變數、函數、型別。

reader,檔案讀取器,一個向前的char迭代器,可以用istreambuf_iterator(ifstream)取代。

 

使用

main函數有_DEBUG宏保護,建議編譯為函式庫release使用。

#include

try

{

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

/ / todo:

}


專案位置

https://github.com/FettLuo/cpp_analysis[新標籤開啟]

 

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
C語言中NULL的替代方案有哪些C語言中NULL的替代方案有哪些Mar 03, 2025 pm 05:37 PM

本文探討了C中的無指針啟用的挑戰。它認為問題本身不是零,而是濫用。 本文詳細介紹了預防退出的最佳實踐,包括提出前檢查,指針pitiberi

c語言編譯器怎麼加下一格c語言編譯器怎麼加下一格Mar 03, 2025 pm 05:44 PM

本文解釋瞭如何使用printf中的\ n逃脫序列在C中創建新線字符並列出函數。 它詳細介紹了功能並提供了代碼示例,以說明其用於輸出中的線路斷裂。

c語言編譯器哪個好?c語言編譯器哪個好?Mar 03, 2025 pm 05:39 PM

本文指導初學者選擇C編譯器。 它認為,海灣合作委員會由於其易用性,廣泛的可用性和廣泛的資源,最適合初學者。 但是,它也比較了海灣室,Clang,MSVC和TCC,突出了它們的差異

C語言中NULL在現代編程中還重要嗎C語言中NULL在現代編程中還重要嗎Mar 03, 2025 pm 05:35 PM

本文強調了NULL在現代C編程中的持續重要性。 儘管取得了進步,但NULL對於明確的指針管理仍然至關重要,從而通過標記沒有有效的內存地址來防止細分故障。 最好的prac

c語言編譯器網頁版有哪些?c語言編譯器網頁版有哪些?Mar 03, 2025 pm 05:42 PM

本文回顧了初學者的在線C編譯器,重點是易用性和調試功能。 在線GDB和REPL。 其他選項,例如Programiz和Compil

c語言在線編程網站 c語言編譯器官方網站匯總c語言在線編程網站 c語言編譯器官方網站匯總Mar 03, 2025 pm 05:41 PM

本文比較在線C編程平台,突出了諸如調試工具,IDE功能,標準合規性和內存/執行限制等功能的差異。 它認為“最佳”平台取決於用戶需求

c語言編譯器複製代碼方法c語言編譯器複製代碼方法Mar 03, 2025 pm 05:43 PM

本文討論了C IDE中的有效代碼複製。 它強調,複製是IDE功能,而不是編譯器功能,並且詳細提高了效率的策略,包括使用IDE選擇工具,代碼折疊,搜索/替換,Templa

c語言編譯器不彈出輸出窗口怎麼解決c語言編譯器不彈出輸出窗口怎麼解決Mar 03, 2025 pm 05:40 PM

本文在C程序編譯中對缺少輸出窗口進行故障排除。 它研究了諸如無法運行可執行文件,程序錯誤,錯誤編譯器設置,背景過程和快速程序終止之類的原因。解決方案涉及ch

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境