hongweipeng 发布的文章

PHP命名空间下的自动加载


前言

命名空间的出现解决了类/函数/常量之间的名字冲突。使得在新建一个对象的时候需要指定其所在空间:

$req = new Framework\App\Request();

由于空间的出现,以前自动加载的函数似乎就不那么好用了:

function __autoload($className) {
    static $map = array();
    if (!isset($map[$className])) {
        require __APP__.'classes/'.$className.'.php';
        $map[$className] = true;
    }
}


开发编程语言(五):词法分析


起步

我的开发阶段比写博客的速度要快一些,终于也有了可以运行的版本了. github:https://github.com/OriginUnion/origin

词法分析

词法分析其实就是把源代码分割为若干个记号(Token),给一个单词或者数字标记,给保留字添加标签,数字归数字的一类,变量归变量,运算符归运算符.

执行词法分析器的程序也称为词法分析器.在这个开发过程中我用了flex/lex工具来完成.关于它的用法兄台可以自己查找.


开发编程语言(四):变量


开头

变量的标识符与函数名规则一样,采用[A-Za-z_][A-Za-z_0-9]*识别.作为弱类型语言并不代表没有数据类型,而是其数据类型在运行时确定,不像编译型语言在编译阶段就确定.我们仍然需要对数据类型进行定义:

//变量类型
typedef enum {
    ORG_BOOLEAN_VALUE = 1, //布尔类型
    ORG_INT_VALUE,          //整型
    ORG_DOUBLE_VALUE,       //浮点型
    ORG_STRING_VALUE,       //字符串型
    ORG_NATIVE_POINTER_VALUE, //复杂数据类型
    ORG_NULL_VALUE,         //空值,未设置类型
} ORG_ValueType;

ORG_NATIVE_POINTER_VALUE可以说这个是指针类型,我更愿意说其是复杂的数据类型,在这里我将字符串型作为基本数据类型,是因为这个太常用了,并且移除了单字符和多字符的区别.


解决Linux CLion不能输入中文的问题


起步

IntelliJ CLion 是一款C/C++所设计的跨平台IDE,最喜欢就是它可以自动补全和代码跳转。对于#define都能很好识别,CMake 配合也足够简单好用。但是中文却不能输入。

环境

  • Ubuntu:16.04
  • 搜狗输入法
  • CLion 2016.1.3

解决方案

搜狗中文输入在Linux下其他程序中均可正常使用,Linux下的CLion无法使用中文输入法。 这与CLion的程序应用环境有关系。在clion.sh配置文件中尾部加入下面3个选项:

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS=@im=fcitx