问题标签 [language-theory]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
12 回答
8791 浏览

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

一段时间以来,我一直想尝试编写自己的语言(表面上是为了学习经验),因此需要在解析器、解释器和编译器的构建方面相对扎实。所以:

  • 有谁知道有关构建解析器、解释器和编译器的任何好的资源?

编辑:我不是在寻找编译器编译器/解析器编译器,例如 Lex、Yacc 和 Bison ......

0 投票
2 回答
527 浏览

dsl - 构建规范语言表示的一般复杂性是多少?

拥有语言的规范表示通常很方便(在我的情况下,它们通常是特定领域的语言);但是,我相信所涉及的语言的表达能力有严格的限制,这些语言决定了是否可以为该语言的任意程序确定和/或创建规范形式。不幸的是,我一直找不到我(模糊地)记得在其中读过的参考资料。

一方面,创建语言的规范表示与许多硬图问题(例如:图同构)具有相当的复杂性似乎是合理的,但另一方面,iirc、gcc、yhc 和 ghc 等编译器使用中间表示生成各种格式的输出(程序集、javascript 等),所以这至少在某些形式下是一个已解决的问题。

何时可以确定/生成给定语言的规范形式?(该语言的表达能力如何,语言表达能力如何影响规范形式的效用?)如果可能,请提供参考或证明。

编辑:例如,正则语言(例如:正则表达式的“纯”形式)不能表达图灵完备语言所能表达的许多相同的东西。换句话说,您不能用常规语言编写 Web 服务器,但可以使用 lambda 演算)。我的问题是关于理论上的可能性,并且确实有与复杂性理论有关的具体答案。如果我有一个 DSL 需要传输到另一个系统,那么在传输它之前生成该代码的规范形式通常是有益的,因为这将解耦两个不同系统使用的独立表示。 然而,如果将图灵完备语言翻译成规范形式是 P-Space 完备或 NP-Complete,那么您不应该浪费时间尝试构建规范形式——要么找到另一种方法,要么减少可以在多项式时间内规范化的语言复杂性。

0 投票
5 回答
803 浏览

computer-science - 老年人计算机科学

当它是带有类的 C 时,我学习了 C++。我发现自己越来越不喜欢 XML 和垃圾收集等新技术。另一方面,我发现了像 Lua 和 Python 这样的脚本语言。而且我发现自己更喜欢 C++ 的混合环境,具有确定性内存控制、嵌入式脚本语言、垃圾收集和所有相关功能。

我的问题是,在尝试学习这些语言时,我发现自己遇到了一些我不熟悉的术语:lambdas、闭包等。

有哪些在线资源可供老年人了解这些内容?

0 投票
11 回答
82866 浏览

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

我可以看到人们一直在问是否应该在下一个版本的 C# 或 Java 中包含多重继承。有幸拥有这种能力的 C++ 人说,这就像给某人一根绳子,最终让自己上吊。

多重继承是怎么回事?有具体的样品吗?

0 投票
6 回答
6258 浏览

while-loop - while 语言

在我的计算语言理论课上,我们得到了一个家庭作业,用一种语言实现一段代码,该语言只有用于流控制的 while 语句(没有 if 语句)。这主要是为了证明你可以编写一个图灵完备的语言,只需要一个while循环。

对于那些能够理解语言语法的人,这里是语言规则:

这是从我的课堂笔记中复制的,所以如果有什么遗漏或不正确,请不要怪我!

要实现的代码是这样的:

无论如何,如果您想继续使用上面的语言规则编写它,请继续。否则,请继续使用您最熟悉的任何语言编写它。但有一些警告!

  • 没有 if 语句或除 while 循环之外的任何其他类型的流控制。
  • 不作弊:上面的语法不包括任何 break 语句、return 语句或异常。不要使用它们。

我已经为此编写了一段代码(我将发布它只是为了证明这不是向我展示 codez 帖子)。我有点好奇其他人能想出什么。

0 投票
8 回答
4699 浏览

terminology - 经常使用很少定义的术语:左值

什么是左值?

0 投票
4 回答
2840 浏览

c# - 为什么在 C# 中顺序对于静态初始化很重要?

此代码在 C# 中具有明确定义的不工作行为:

注意:我不是在问如何修复该代码,因为我已经知道如何做到这一点

这样做的理由是什么?C# 已经进行了运行时检查以检测对静态成员的首次访问。为什么不将此扩展到每个成员的事物并让它们按需运行,或者更好地让编译器在编译时找出顺序?

顺便说一句:我认为同样的问题(或几乎相同的问题)也适用于非静态成员。

0 投票
10 回答
3227 浏览

language-agnostic - 一种语言可以在其他方面变得完整但不完整吗?

例如,在编写操作系统时,是否有某些事情无法用图灵完备的语言来完成?

0 投票
6 回答
4918 浏览

language-agnostic - 强制显式 this/self 指针有什么好处?

this//selfme强制显式指针有什么好处

根据OOP理论,方法应该主要(仅?)对成员变量和方法的参数进行操作。在此之后,引用成员变量应该比引用外部(从对象的角度)变量更容易......显式使其this更冗长,因此引用成员变量比引用外部变量更难。这对我来说似乎违反直觉。

0 投票
3 回答
1674 浏览

language-theory - 我如何设计这个下推自动机的转换函数?

我正在学习 PDA 上的测试,我想知道如何设计一个识别以下语言的下推自动机:

如何设计一个转换函数来识别是否n-m大于0

如果你有一些课程材料解决了这个级别的练习,请放一个链接。