你能解释一下吗,我怎么能检查一下,第一个上下文无关语法(G1)的语言是第二个上下文无关语法(G2)语言的子集。
G1和G2是两个字母相同的LL(1)语法:
{a, b, c, d, f}
生产规则如下:
A -> αB
或
A -> α
α是一个非epsilon字符串(由终端符号组成).
上下文无关语法G1:
S1 -> aK
K -> bC|cE
C -> cB|d
E -> bA|f
A -> abC
B -> acE
上下文无关语法G2:
S2 -> aX
X -> bZ|cY
Z -> cV|d
Y -> bU
给定一个任意的上下文无关语法,我如何检查它是否描述了一种常规语言?
我不是在找考试“花招”。我在找一个绝对可靠的机械测试,我可以编码。
如果有帮助的话,这里有一个CFG的例子,我可能会收到它作为输入。特别要注意的是,答案必须比寻找左递归或右递归要复杂得多,因为另一种递归的存在并不自动意味着语法是不规则的。
S: A B C D X
A: A a
A:
B: b B
B:
C: c C c
C: c
D: D d D
D: d
X: x Y
X:
Y: y X
Y:
一种能被TM识别但不能由TM决定的语言可以吗?
一种语言的例子,该语言可以被商标识别,但不能由商标决定
答案是:
TM={<M,w> M is a TM that accepts input string w}
我可能错了吗?
可判定性和可识别性之间的区别是什么?
简而言之,由TM识别的任何字符串都称为TM可识别的,而被TM接受的任何字符串则称为TM可判定的。
我对哈斯克尔很陌生,只是玩了一会儿。
我编写了一个轻量级的OOP仿真:
--OOP.hs
{-# LANGUAGE MultiParamTypeClasses, FlexibleInstances, UndecidableInstances, ScopedTypeVariables, FunctionalDependencies #-}
module OOP where
class Provides obj iface where
provide::obj->iface
(#>)::obj->(iface->a)->a
o #>
像C++模板这样的参数化类型是一件很好的事情,但大多数时候它们只能被其他类型参数化。
但是,在C++中有一种特殊情况,可以将模板参数化为整数。例如,固定长度数组是一个典型的用例:
template<typename T, int SIZE> class FixedArray
{
T m_values[SIZE];
public:
int getElementCount() const { return SIZE; }
T operator[] (int i) const {
if (i<0 || i>=SIZE)
下面是显示此问题的最小演示代码:
interface A
fun <T1, T2> test() where T2 : T1, T2 : A {}
当我试图编译它时,编译器会抱怨:
错误:(81,25) Kotlin: Type参数如果被另一个类型参数限制,它就不能有任何其他边界
我读过,但只找到以下绑定限制:
类型参数不能将自身指定为自己的绑定,而多个类型参数不能以循环方式相互指定为绑定。
这并不能解释我遇到的限制。
我研究了Kotlin的问题跟踪器,我发现了一个关于这个限制的问题:。然而,这一问题被拒绝的原因如下(2017年5月6日更新: Stanislav
我很难理解机器识别和决定一种语言意味着什么。我想我已经接近定义了,但不对。
当有人说图灵机T识别语言L时
L = { <A> | A is a DFA }
其中DFA =确定性有限自动机
我的理解是,这意味着它可以建立一个图灵机,提供任何类型的输入(字符串,汽车,人,什么!)将能够告诉你,你给它输入的东西是否是DFA。这样,我的意思是,将永远接受一个DFA,并将永远拒绝一个非DFA的输入。
也就是说,如果输入是L的一个成员。另一个例子是说X是他父亲的认同感,因为不管你在他面前放什么东西,他都能告诉你他面前的是他的父亲。这是正确的吗?哪一部分不对?
另一方面,语言上的decider似
我有一个编程语言的AST的数据类型,我想解释一下,但AST大约有10个不同的构造函数。
data Term : Set where
UnitTerm : Term
VarTerm : Var -> Term
...
SeqTerm : Term -> Term -> Term
我正在尝试编写一个函数,它对这种语言的语法树具有可判定的等价性。从理论上讲,这很简单:没有什么太复杂的,它只是存储在AST中的简单数据。
问题是,编写这样一个函数似乎需要大约100个用例:对于每个构造函数,有10个用例。
eqDecide : (x : Term) -> (y