原创 LALR(1)與減少LR(1)分析表的體積

我們知道LR(1)分析表在計算的時候所生成的規範簇集大小會原地昇天——一套簡約的程序語言,它動則生成六百多項甚至一千多項的規範簇,分析表的體積非常膨脹(好吧這着實讓人無法忍受...忍無可忍了)。爲了解決這種問題,我們可以想辦法精煉文法,或

原创 C語言寫一個斐波那契數列

  下午正好有人問到這個問題,所以就寫一個。   斐波那契數列的實現我們可以很快想到——遞推,即當前項等於前兩項的和。但是這樣還是略微令人不愉快,它是O(n)O(n)O(n)的(雖然uint64也只能算到93項…性能差距不明顯),

原创 lambda演算簡單整理

最近在看虎書的時候見到了函數式語言,隨即想到了Lisp,和它的語言寫法——即(write (+ 1 2))這類東西。Lisp語言受到過λ演算的啓發,爲了更好的理解下函數式,便去查找了下λ演算的資料——但是網上資料比較少,折騰了幾日,把它們

原创 在win32上實現響應WM_NCLBUTTONUP

WM_NCLBUTTONUP,按照msdn的原話: Posted when the user releases the left mouse button while the cursor is within the nonclient

原创 C++實現get和set

這個想法來自於C#,經常用wpf的話,會接觸綁定。數據綁定的實現要點之一便是get與set方法,下面的片段展示了這個事請。如果您想直接帶走代碼,可以跳轉到文章末尾。 namespace GetAndSet { class Exa

原创 走進現代OpenGL

作爲前言,這是一篇非常長非常長的文章——在文末,你會得到一個純色三角形,這將經歷非常漫長的努力,甚至你還會覺得氣餒,因爲花費一整天畫了個平面三角形。本文呢包括如何準備VS2019,如何開始第一個HelloWorld,渲染管線的簡介....

原创 關於Win32 SDK(C++)的命令行獲取,通過__argc和__argv

原來獲取命令行是這樣的: int APIENTRY wWinMain( _In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPWSTR lpCm

原创 HelloWorld是怎麼跑出來的?

基本上從學C語言的第一天起,我們就會知道一個C程序,需要經過編譯、鏈接,才能得到可執行文件,然後,才能跑起來。在我們用IDE或者類似於gcc 1.c這樣的命令的時候,有很多步驟被省略了。現在我想回過來看看它們,加深下理解。 C語言從頭到尾

原创 索引緩衝對象

我們的約定依然成立哦~用粉色表示我認爲關鍵的地方,用藍色表示一些無所謂的強調,用綠色表示一些關鍵概念。如果有加粗,那當然是更重要啦~API名稱或者宏定義會使用紫色或者是超鏈接(超鏈接意味着它指向一篇文檔)。 有一點3D基礎應該是知道這麼個

原创 一個簡單的log2(x)的快速計算方法

最近因爲某一些原因,需要要求高速計算一下常用對數的值。但是自然對數的快速算法和常用對數的快速算法都沒想到......只得去找那個以2爲底的對數值的快速運算方法了,由於精度要求不高(大約0.1即可),固可以嘗試這種方案。 因爲直接把floa