从语言归纳语法的5种经验方法

语言和语法回顾

参见我的另一篇博文:http://blog.csdn.net/cuiods/article/details/52442584
语言的构造方法有两种:全组合(full combination)和部分组合(partial combination)。
- 全组合:用字母表 Σ 的闭包表示( Σ *)
- 部分组合:基于规则的语法(rule-based grammar)
从语法可以推导出符合语法规则的语言:G==Derivation=>L(G)
极左推导示例:

Grammar:
E => E + F | F
F => F * G | G
G => (E) | i
Leftmost derivation:
E => E + F => F + F => G + F => i + F => i + G => i + i

最左规约是最右推导的逆过程。

从语言归纳到语法一般依靠经验方法,以下五种方法是常见的经验方法。

方法1:对称法(Symmetrical Method )

典型问题:明显的对称特征

Example1:Let L1={a2nbn|n>=1 and a,b VT},Try to construct the grammar G1 from L1
Let n=1, L1 =aab
n=2, L1 =aaaabb
n=3, L1 =aaaaaabbb
……

解决步骤:

  1. Find out axis - special case : 找到对称特例,比如在上面的问题中第一步找到的特例就是S->aab
  2. Find out the symmetrical properties: 我的理解就是找到对称轴,然后把对称的非终结符放在对称轴上,在上面的问题中,第二步就是S->aaSb

因此,Example1的答案就是S->aab|aaSb。(这种语法是之前提到的嵌入式语法(embedded grammar))

用这种方法可以方便地表示回文数(palindrome)。
1. axis: S -> 0|1|2|…|9|

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了设计一种高阶逻辑语言以描述学习归纳知识,我们需要考虑以下几个方面: 1. 语言的基本结构和语法语言需要具备一定的语法和结构,以方便人们理解和使用。我们可以采用像 Prolog 这样的逻辑编程语言作为基础,但需要进行改进和扩展,使其更适合描述学习归纳知识。 2. 归纳规则的描述:学习归纳知识需要归纳规则,我们需要设计一种方式来描述这些规则。可以采用一种类似于 Horn 子句的方式,即将规则表示为前提和结论的形式。例如,如果我们想描述“苹果是水果,橙子是水果,香蕉是水果,那么水果是一种食物”,我们可以表示为: fruit(apple). fruit(orange). fruit(banana). food(X) :- fruit(X). 这样,我们就可以通过查询“food(X)”来推导出“X是一种食物”的结论。 3. 学习过程的描述:除了规则的描述外,我们还需要描述学习的过程。这包括输入数据、学习算法、模型参数等。我们可以采用一种类似于函数式编程的方式,将学习过程表示为一系列函数调用的组合。例如,如果我们想使用决策树算法学习一个分类模型,我们可以表示为: train(data, algorithm(decision_tree), params). predict(model, input). 这样,我们就可以通过调用“train”函数来训练模型,然后通过调用“predict”函数来进行预测。 综上所述,我们可以设计一种高阶逻辑语言,以描述学习归纳知识。该语言具有一定的语法和结构,可以描述归纳规则和学习过程。通过使用该语言,人们可以更加轻松地理解、分析和消化吸收知识。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值