language-theory相关内容

所有的迭代算法都可以递归表达吗?

如果没有,是否有一个很好的反例来说明不存在递归对应的迭代算法? 如果是所有迭代算法都可以递归表示的情况,有没有更难做到的情况? 另外,编程语言在这一切中扮演什么角色?我可以想象,与纯 Java 程序员相比,Scheme 程序员对迭代(=尾递归)和堆栈使用有不同的看法. 解决方案 对此有一个简单的临时证明.由于您可以使用严格的迭代结构构建图灵完备语言,而仅使用递归结构构建图灵完备 ..

解析器、解释器和编译器的学习资源

一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此需要在解析器、解释器和编译器的构建方面相对扎实.所以: 有没有人知道关于构建解析器、解释器和编译器的任何好的资源? 编辑:我不是在寻找编译器编译器/解析器编译器,例如 Lex、Yacc 和 Bison... 解决方案 我读过的关于编译器的最好的论文是日期 1964Val Schorre 的“META II 一 ..

关于解析器、解释器和编译器的学习资源

一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此需要相对扎根于解析器、解释器和编译器的构建.所以: 有人知道有关构建解析器、解释器和编译器的任何好的资源吗? 编辑:我不是在寻找诸如 Lex、Yacc 和 Bison 之类的编译器编译器/解析器编译器... 解决方案 我读过的最好的关于编译器的论文是 1964 年“META II 一种面向语法的编译器编写语言 ..

“现代"的识别力正则表达式

真正的现代正则表达式能识别哪类语言? 每当存在具有反向引用的无限长度捕获组(例如 (.*)_\1)时,正则表达式就会匹配非常规语言.但这本身并不足以匹配 S ::= '(' S ')' | 之类的东西.ε — 匹配括号对的上下文无关语言. 递归正则表达式(对我来说是新的,但我确信存在于 Perl 和 PCRE 中)似乎至少可以识别大多数 CFL. 有没有人做过或阅读过这方面的研究 ..
发布时间:2021-12-02 23:44:50 其他开发

上下文无关语言问题(Pumping Lemma)

我知道这与编程没有直接关系,但我想知道是否有人知道如何将泵引理应用于以下证明: 证明 L={(a^n)(b^n)(c^m) : n!=m} 不是上下文无关语言 我对应用抽水引理非常有信心,但这真的让我很恼火.你怎么看? 解决方案 编辑:我完全把你引向了错误的轨道.这就是当我自己还没有完全解决问题时尝试提供帮助时会发生的情况. 奥格登引理 假设 L 是上下文无关的.根 ..
发布时间:2021-09-07 18:30:30 其他开发

经常使用很少定义的术语:lvalue

什么是左值? 解决方案 lvalue 是一个可以赋值给的值: lvalue = rvalue; 它是“left value"或“lefthand value"的缩写,它基本上只是=符号left上的值,即你分配的值. 作为一个不是左值(即仅右值)的例子: printf("Hello, world!\n") = 100;//跆拳道? 该代码不起作用,因为 printf()(返回 ..
发布时间:2021-09-05 20:39:17 其他开发

有人可以给出一个简单但不是玩具的上下文相关语法示例吗?

我正在尝试理解上下文相关的语法,并且理解为什么这样的语言 {ww | w是一个字符串} {a n b n c n | a,b,c是符号} 不是上下文无关的,但是我想知道一种类似于未类型化lambda演算的语言是否对上下文敏感.我想看一个简单但非玩具的示例(我考虑了上面的玩具示例),它是上下文相关语法的示例,对于某些生产规则,例如可以判断是否有一些符号字符串当前处于范围内(例如,在生成 ..

允许递归构造函数可能有什么好处(如果有)?

在Java中,构造函数不能递归。编译时错误:“递归构造函数调用”。假设我们没有此限制。 要记住的事情: 构造函数的返回类型为void。由于它是void方法,因此您无法利用递归的全部功能。 构造函数可以使用this()调用自身(或任何其他构造函数)。但是“对此的调用必须是构造函数中的第一个语句” 我们可以在连续调用之间使用非本地数据,以从递归构造函数中获得一些可能的收益。 允许 ..
发布时间:2020-10-08 19:51:04 Java开发

确切地说,“关闭”与“关闭”之间有什么区别?和一个“块”?

我发现很多人可以交替使用 closure 和 block 一词。这些人中的大多数人无法解释他们在说什么。 一些Java程序员(甚至是来自非常昂贵的咨询公司的程序员)都将匿名内部类称为“块”。和“关闭”-但我知道这不是真的。 (您不能在定义变量的方法范围内传递可变变量...) 我在寻找: 精确的计算机科学块的定义 精确的计算机科学定义结束 并澄清两者之间的区别。 我真的很 ..

“现代"的识别能力被称为“现代".正则表达式

真正的现代正则表达式实际上可以识别哪种语言? 只要有无限长度的捕获组具有反向引用(例如(.*)_\1),则正则表达式现在就会与非常规语言匹配.但是,仅凭它本身还不足以匹配S ::= '(' S ')' | ε之类的东西-匹配配对对的无上下文语言. 递归正则表达式(对我来说是新手,但我确信Perl和PCRE中存在)可以识别至少大多数CFL. 有人在这方面做过或阅读过任何研究吗?这些 ..
发布时间:2020-05-25 18:38:34 其他开发

python中的赋值符号实际上是什么?

大多数资源在线调用=(和+ =,-=等)用于赋值运算符(对于python).在大多数语言中这是有意义的,但是在python中却没有.一个运算符采用一个或多个操作数,返回一个值,并形成一个表达式.但是,在python中,赋值不是表达式,并且赋值不会产生值.因此,=不能是运算符. 那到底是什么?在x = 0这样的语句中,x是一个标识符,0是一个数字文字,但是我不知道该怎么称呼"=". 解决 ..
发布时间:2020-05-21 20:08:52 Python

可变和不可变类型背后的理论是什么?

我对Python佩服的一件事是它在可变类型和不可变类型之间的区别.在使用Python之前花了一段时间的c编程经验,我惊讶于Python多么容易地摆脱了指针反引用的所有复杂性,这些复杂性使我对c感到恼火.在Python中,一切都按我期望的方式运行,并且我很快意识到,可变/不可变的区别在其中起着重要的作用. 当然还有一些皱纹(可变函数参数默认值是一个显着的例子),但总的来说,我认为可变/不可变的 ..
发布时间:2020-05-14 02:07:54 Python

多重继承的确切问题是什么?

我可以看到人们一直在问,下一个版本的C#或Java是否应该包含多重继承.幸运的是,拥有这种能力的C ++人士说,这就像在给某人一条绳索来最终使自己吊死. 多重继承有什么关系?有没有具体样品? 解决方案 最明显的问题是函数覆盖. 假设有两个类A和B,它们都定义了方法doSomething.现在,您定义了第三个类C,该类同时继承了A和B,但是您没有覆盖doSomething方法. ..
发布时间:2020-05-13 19:10:15 其他开发

“注册机"到底是什么?

来自 http://code.google.com/p/unladen-swallow /wiki/ProjectPlan 我引用: “使用JIT还可以使我们将Python从基于堆栈的机器转移到寄存器机器,事实证明,这可以提高其他类似语言的性能(Ierusalimschy等,2005; Shi等,2005). " 在大学里,我为具有递归过程的语言构建了一个简单的编译器-维护每个调用过程 ..

“真"的定义是什么?多维数组,哪些语言支持它们?

我读过的大多数编程书籍都包含以下内容: "X语言不支持真正的多维数组,但是您可以使用数组数组模拟(近似)它们." 由于我的大部分经验都是基于C语言的,例如C ++,Java,JavaScript,php等,所以我不确定什么是“真正的"多维数组. true 多维数组的定义是什么,什么语言支持它? 另外,请尽可能显示一个真实的多维数组示例. 解决方案 C#支持真正的多维数组和 ..

为什么在卷曲的支架后不需要分号?

我知道在声明(我正在谈论Java,C ++和类似语言)之后需要分号,但在卷曲括号之后不需要。为什么会这样? if(a> b) printf(“hello!”); //分号是强制性的 if(a> b){ printf(“hello!”); } //不需要分号 这是什么原因?我的意思是,这背后的理论是什么? 解决方案 因为花括号用于分组语句,但它们本身不是语 ..
发布时间:2019-01-02 11:30:01 Java开发

所有迭代算法都可以递归表达吗?

如果没有,是否有一个好的计数器示例显示迭代算法,其中不存在递归对应物? 如果是所有迭代算法都可以的话以递归方式表达,是否存在更难以做到的情况? 此外,编程语言在这一切中扮演什么角色?我可以想象,Scheme程序员对Java迭代(=尾递归)和堆栈使用的看法不同于仅Java程序员。 解决方案 这是一个简单的临时证明。既然你可以使用严格的迭代结构来构建图灵完整语言,并且只使用递归结构 ..

允许递归推理的可能的好处(如果有的话)是什么?

在Java中,构造函数不能递归。编译时错误:“递归构造函数调用”。让我们假设我们没有这个限制。 注意事项: 构造函数的返回类型为void。因为它是一个void方法,你不能利用递归的完整权力。 构造函数可以使用this()调用自身(或任何其他构造函数)。但是“对此的调用必须是构造函数中的第一个语句” 我们可以在连续调用之间使用非本地数据,仍然可以从递归构造函数中获得一些可能的增益。 ..
发布时间:2016-12-30 17:24:35 Java开发

解析器,解释器和编译器的学习资源

我一直想玩一段时间写自己的语言(表面上是为了学习经验),因此需要相对地依赖于Parsers,Interpreters和Compilers的构建。所以: 有没有人知道构建Parsers,Interpreters和Compilers的任何好资源? > 编辑:我不是在寻找编译器编译器/解析器编译器,如Lex,Yacc和Bison ... 解决方案 我在编译器上阅读的最好的文档是 19 ..

为什么要在C#中确实为了此事的静态初始化?

这代码中有不工作的C#的定义良好的行为: 类Foo { 上配置静态列表< INT>到=新名单< INT>(来自); //将仍然是空 静态的IEnumerable< INT>从东西=(); } 的注:我不是问如何解决代码我已经知道该怎么做 的 ,这是什么理由? C#已经不运行时检查,以检测静态成员第一次访问。为什么不呢?这延 ..
发布时间:2016-09-29 12:32:28 C#/.NET