[讨论] 弱关键字的程式语言

楼主: sunneo (艾斯寇德)   2015-04-18 13:23:44
#原本发在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) 高

Links booklink

Contact Us: admin [ a t ] ucptt.com