问题标签 [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.
theory - 上下文自由泵引理
以下语言上下文是免费的吗?
我试图想出一个上下文无关的语法来生成它,但我做不到,所以我假设它不是上下文无关的。至于我的反证法:
假设 L 是上下文无关的,
令 p 是由泵引理给出的常数,
选择字符串 S = a^pb^pc^pd^p 其中 S = uvwxy
作为 |vwx| <= p,那么 vwx 最多可以包含两个不同的符号:
情况 a) vwx 仅包含单一类型的符号,因此 uv^2wx^2y 将导致 i+s != k+r
案例 b) vwx 包含两种类型的符号:
i) vwx 由 b 和 c 组成,因此 uv^2wx^2y 将导致 i+s != k+r
现在我的问题是,如果 vwx 由 a's 和 b's,或 c's 和 d's 组成,那么泵送它们不会破坏语言,因为 i 和 k 或 s 和 r 可能会一致增加,导致 i+s == k +r。
我做错了什么还是这是一种上下文无关的语言?
linq - 关于 LINQ,我是否正确理解谓词
我试图了解谓词和 LINQ。
虽然 LINQ 的语法开始对我有意义,但我在 LINQ 背后的理论方面遇到了一些麻烦。
这是我到目前为止所拥有的。在设计 LINQ 时,Microsoft 没有创建一个新接口来定义可以使用 LINQ 查询的任何对象都需要实现的每个成员,而是决定采用现有的类 IEnumerable,并使用扩展方法扩展该类。
我想我了解扩展方法。扩展方法是静态类中的静态方法。传入此方法的第一个参数与this
参数一起传入,并定义要扩展的类型。然后,与扩展方法在同一命名空间内的任何这种类型的实例都可以使用该方法。
因此,微软在 System.LINQ 命名空间内创建了许多扩展 IEnumerable 的扩展方法,任何使用 System.LINQ 命名空间并包含实现 IEnumerable 的对象的类都可以使用这些扩展方法来查询该对象。这些扩展方法中的每一个都将委托作为其第二个参数。
关于where
,where
是扩展 IEnumerable 并返回实现 IEnumerable 的新对象的扩展方法。下一个参数where
采用 Func 类型(泛型 func)的谓词(返回布尔值的方法)。这是一个委托,它返回 true 或 false,最多可以接受 16 个参数。但是,不必编写满足此条件的方法,而是创建 Func 类型的实例并将其指向您的方法,并将此变量传递给where
方法,C# 允许您即时编写此方法。您在构建 LINQ 查询时放在单词后面的所有内容都将where
成为您的谓词。
在幕后,实现 IEnumerable 的对象的成员被迭代并针对您的谓词进行评估,并且 iftrue
使用yield return
语法添加到新的 IEnumerable 对象中。
抱歉,如果这看起来有点脱节,但我基本上已经把所有事情都从我的大脑中甩了出来,并希望比我自己更了解这一点的人会过来告诉我我的哪些位是正确的,哪些位是错误的并且通常扩展我上面写的内容,因为我在正确理解这里发生的事情时遇到了一些麻烦。
c++ - C++ 模板机制只是一个类型构建器函数吗?
我刚刚开始思考这个问题。每个 C++ 模板都可以替换为返回类(或函数)对象的“普通”函数吗?正常意味着编译时程序。
所以我想用“普通函数(意味着在编译器解析树或类似的东西上工作的编译时程序)”替换 C++ 编译中的模板实例化,我不想使用 declerative 语法。
你认为通过下面的思路我们可以替换C++中的整个模板机制吗?你认为这种方式更容易理解模板吗?我知道这个问题有点理论,但我不知道在哪里讨论这个问题的最佳地点。
parallel-processing - 有限自动机和循环的逻辑是什么
我必须绘制一个接受以下字符串的有限自动机
在我看来 a(a+b+c)*
,这可能是它的正则表达式,因为字符串从它开始a
并且还包含一个空字符串。
现在我没有找到如下图绘制 FA 的逻辑
问题 1:如果字符串在 FA 中以 then 开头,我们在阅读
为什么我们不在这里阅读时a
从x
to移动。y
b
a
问题 2:y
为什么我们在状态和状态上使用 a,b 循环z
grammar - 有人可以举一个上下文相关语法的简单但非玩具示例吗?
我正在尝试理解上下文相关的语法,并且我理解为什么语言喜欢
- {ww | w 是一个字符串}
- {一个n b n c n | a,b,c 是符号}
不是上下文无关的,但我想知道类似于无类型 lambda 演算的语言是否对上下文敏感。我想看一个简单但非玩具的示例(我考虑上面的玩具示例),上下文相关语法的示例,对于某些生产规则,例如,判断是否有一些符号字符串当前在范围内(例如,在生成函数体时)。上下文相关的语法是否足够强大,可以使未定义/未声明/未绑定的变量成为语法(而不是语义)错误?
context-free-grammar - 语言不规则的半规则语法示例
“半正则”文法是一种只允许以下形式的规则的文法:
其中 X 和 Y 是任何单个非终结符,x 和 y 是任何单个终结符。
例如,这是语言 a+ b+ 的半正则文法
举一个语言不是正则语言的半正则语法的例子。一定要说明语言是什么以及为什么它不规则。
turing-machines - 所有无限的语言都是不可判定的吗?
我想知道所有无限语言都无法确定吗?
他们一定是对的,因为试图决定一种无限语言的 TM 只会永远循环,这使它成为一个recgonizer,而不是一个决定者。
多谢你们。
c# - 在C#中返回动态有什么用
...与简单地返回一个对象相比。当你将一个对象分配给一个动态声明的变量时,魔法就开始了,那么返回一个动态有什么不同呢?
那么有什么区别:
和
它们的工作方式似乎完全相同,例如:
请注意,这不是一个实际问题。我对为什么部分感兴趣:)
java - 对“编译器”进行编程 - 以任何方式知道 {(开启器)是否 }(关闭)?
好的,所以,我有一个练习来构建一种 java 编译器。细节我就不多说了。基本上,我想知道是否可以使用可以识别右括号的正则表达式。例如,这将是一个合法的输入
这不会是
如您所见,2 个开瓶器 ({) 只有 1 个关闭器 (}),因此输入无效。有什么方法可以使用正则表达式并确定出现次数是否匹配?