公共命名空间中的依赖关系

需求分析

公共命名空间中包括大量的句子,句子之间有依赖关系。例如,许多操作都需要用到字符串,则字符串操作是基础的。根据分“两步走”的计划,先在公共命名空间中确定语言是什么样子的,再想办法实现计算机语言。这两步和字符集+字体的划分,如出一辙。依赖关系的分析是第二步的开始。

一个句子作为一个节点,依赖关系的分析的目标,不是画出关系图,而是给它们排队,从复杂的图变成简单的线。

理论

首先说表示方式:a->b表示先实现a再实现b,或者说b依赖a。

节点间关系分为:顺序、分支、循环、合并。

顺序:a->b, b->c推导出a->b->c
分支:a->b, a->c推导出a->d, d=(b, c)
循环:a->b, b->a推导出c=(a, b)
合并:a->c, b->c推导出d=(a, b), d->c

d=(b, c), b->a推导出d=(b, c), d->a,把b升格为d

如果x=(a, b), y=(a, b),则x和y等价

编码

如何在计算机中表示a->b->c?用数组
如何表示d=(a, b, c)?用集合

ordered[5237]=['a', 'b', 'c']
unordered[625]={'a', 'b', 'c'}

5237和625是编号,因为预测公共命名空间会很大,里边的句子排到几千几万都有可能

用ordered数组记录形如a->b->c的
用unordered集合记录形如d=(a, b, c)的,编号625就代表d了

举例1

有如下依赖关系:
a->b, b->c, c->d, a->c, b->d
解:
由a->b, a->c推导出a->x, x=(b, c)
因为b属于x,所以,b->c推导出x->c
由c->d, b->d推导出y->d, y=(c, b)
a->x->c, y->d发现x等于y
因为c属于x,所以有a->x->x推导出a->x
a->x, y->d推导出a->x->d, x=(b, c)
根据b->c对x内部进行排序,结果不变

举例2

已知:a->b, a->c, a->d, a->e, b->c, c->d, c->e
解:
a->x, x=(b, c, d, e)
求x内部关系,取只包括(b, c, d, e)的式子,得:
b->c, c->d, c->e
推导出b->c->y, y=(d, e)
求y内部关系,取只包括(d, e)的式子,得空集
y的内部得空集,无需处理,停
所有集合都停止时就停止

举例3

已知:a->c, a->d, b->d, b->e
解:
a->x, x=(c, d), b->y, y=(d, e)
在x, y中都有d,合并x, y得z=(c, d, e)
a->z, b->z
得t->z, t=(a, b), z=(c, d, e)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值