[討論] 弱關鍵字的程式語言
#原本發在PLT,不知道這個適合哪裡,但跟PLT的理論關聯性不那麼深,所以
#我把他放在這討論
最近跟人討論我想到一件事:
在組合語言層級,從C的編譯器產生的binary file不會看到的函式名稱,
那八成是_do, _while, _if ... 等關鍵字/保留字
有這些關鍵字,我初略想到他們的用途是在token->grammar這過程可以在找到token時
將parser的狀態進入到某個關鍵字的子狀態。
假使今天有user用組合語言實現一套api,用static linking library發佈,
剛好函式進入點是這些關鍵字甚至是型別名稱,因為是static linking library
恰好無法利用dlopen以函式指標來當進入點。
這很可能發生在任何兩個程式語言相互運作的時候
所以我想到
0) 當一個函式真的是關鍵字命名的,有沒有法子去叫用,像搜尋data/symbol table的解
1) 這個狀態有沒有那麼必要一定要用這關鍵字驅動?
2) 有沒有一個compiler/程式語言支援這種關鍵字強度的?
讓關鍵字本身對於解析器的強度是弱強度,當一個關鍵字在一個scope被賦予其他意義
例如他被變成物件/變數/函式,他當下就不是原先關鍵字的意義。
要不要弄一個語法強度比關鍵字/保留字高的compiler ?
ex:
有人設計了一個函式,是
int if(int val1, int val2);
如果user include擁有這份宣告的檔案,或定義了這個符號,那麼目前他在這個檔案
看到的if就有兩個意義:
if ( Boolean-Expression )
int if(int val1, int val2);
這時編譯器如果看到使用者的式子為 if( a, b ) 他仍不應該立刻進入函式呼叫的意義,
如果他在同一個表示中看到else,而且else沒有被複寫為其他意義。
則以下這個if(a,b) 其實是 if(Boolean-Expression)。
if( a, b ){ } else { }
而內容值為 common-expression-list,就是evaluate a後, evaluate b並把b作為
expression-value,當成Boolean-expression
如果他看到的是 if ( a, b ); 因為可以找到複寫的意義 int if(int,int),那麼
這個if指的函式呼叫。
如果不幸使用者定義了else是一個variable,以下式子仍是if(Boolean-Expression)
if( a, b ){ } else ;
因為 else; 這個式子的運算結果沒用,else; 沒有把else拿來read/write/addrOf
if( a, b ){ } else{ }
因為 else { } 在else為變數的時候不合法
但以下就會成為if function
if ( a, b ){ ... }
因為 if ( a, b )目前強度比 if(Boolean-expression) 高
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.132.1.247
※ 文章網址: https://www.ptt.cc/bbs/Programming/M.1429334629.A.A43.html
※ 編輯: sunneo (220.132.1.247), 04/18/2015 13:24:56
→
04/18 13:26, , 1F
04/18 13:26, 1F
→
04/18 13:49, , 2F
04/18 13:49, 2F
→
04/18 13:49, , 3F
04/18 13:49, 3F
→
04/18 14:02, , 4F
04/18 14:02, 4F
→
04/18 14:03, , 5F
04/18 14:03, 5F
→
04/18 14:03, , 6F
04/18 14:03, 6F
→
04/18 14:04, , 7F
04/18 14:04, 7F
→
04/18 14:05, , 8F
04/18 14:05, 8F
→
04/18 16:34, , 9F
04/18 16:34, 9F
→
04/18 22:55, , 10F
04/18 22:55, 10F
→
04/18 22:56, , 11F
04/18 22:56, 11F
→
04/18 22:56, , 12F
04/18 22:56, 12F
→
04/18 22:56, , 13F
04/18 22:56, 13F
→
04/18 22:57, , 14F
04/18 22:57, 14F
→
04/19 10:23, , 15F
04/19 10:23, 15F
→
04/19 10:33, , 16F
04/19 10:33, 16F
※ 編輯: sunneo (220.132.1.247), 04/20/2015 03:04:05
※ 編輯: sunneo (220.132.1.247), 04/20/2015 03:06:30
推
04/20 12:42, , 17F
04/20 12:42, 17F
→
04/20 12:42, , 18F
04/20 12:42, 18F
→
04/20 18:55, , 19F
04/20 18:55, 19F
→
04/20 18:59, , 20F
04/20 18:59, 20F
→
04/21 03:46, , 21F
04/21 03:46, 21F
→
04/21 03:46, , 22F
04/21 03:46, 22F
→
04/21 13:25, , 23F
04/21 13:25, 23F
→
04/21 13:27, , 24F
04/21 13:27, 24F
→
04/21 13:28, , 25F
04/21 13:28, 25F
→
04/21 13:32, , 26F
04/21 13:32, 26F