分享

Tex源码笔记(四)

 negatlov 2011-06-14

Tex源码笔记(四)


下面是Tex对字符串进行操作的数据结构:str_pool和str_start:
    pool_size=32000;
    pool_pointer=0..pool_size;

    max_strings=3000;
    str_number=0..max_strings;

    packed_ASCII_code=0..255;{可以将ASCII_code和packed_ASCII_code等同}
   
    str_pool:packed array[pool_pointer] of packed_ASCII_code;
    str_start:array[str_number] of pool_pointer;
    pool_ptr:pool_pointer;
    str_ptr:str_number;

其中,str_start用来指示一个字符串开始字符在str_pool中的索引,每个字符串都在str_start中占一个表项。因而,对于两个连续的字符串来说,第一个字符串的结为第二个字符串的开始位置减1,从而

    define length(#)=(str_start[#+1]-str_start[#]);

可以来表示第#个字符串的长度。该数据结构的图示以后给出。

为了保证str_start和str_pool的协调,Tex定义了一些例程来对它们进行操作:

    append_char(#) {添加字符#到str_pool}
    flush_pool{删除str_pool中的一个字符}
    str_room(#){增加#个字符时候越界?}
    make_string:str_number{分配结束的收尾工作,更新str_ptr,str_start[str_ptr]至未使用的索引}
    flush_string{删除刚刚分配的字符串}
    str_eq_buf(s:str_number;k:integer):boolean
          {比较字符串s是否等于buffer中始于k的字符串}
    str_eq_str(s,t:str_number):boolean{比较两个字符串s和t是否相等}

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多