问题标签 [parsimonious]

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 投票
2 回答
163 浏览

algorithm - 来自有限位 TRNG 的均匀分布无偏 4 位简约范围映射

我正在尝试为范围最大为 4 位的 C 应用程序的 TRNG 输出文件实现范围映射器。由于鸽子偏差问题,我决定使用丢弃算法。

我对简约算法的想法是这样的:

-- 从文件中读取 16 个字节并存储为索引的 128 位无符号整数位桶,以便一次选择 n 位作为位掩码。
-- 尽可能多地预先确定每个输入所需的范围/存储桶并存储在一个数组中。
-- 对于 bitbucket 中的每 n 位,从数组中选择一个输入,如果存在则不会丢弃它。如果 2 位找不到输入,请尝试 3 位,如果找不到输入,请尝试 4 位。起初,当有很多输入时,不丢弃应该很容易,但随着输入的选择变得低丢弃将变得更加普遍。我不完全确定从更少的位开始并按我的方式工作是否更好,或者相反。

这个位啜饮范围映射器的缺点似乎是我需要假设随机输入数据的数量大约是偏置缩放方法所需的两倍。例如,来自 4 位 rand 输出的 9 桶输入将丢失大约 43% 的时间。

现有的实现/算法: 似乎是一个更复杂、更有效的简约范围映射方法的例子,但我发现他的解释完全难以理解。任何人都可以用英语向我解释或建议我可能读的一本书或我可能参加的大学课程,这会给我一个理解它的背景吗?

还有arc4random似乎是运行时优化的无偏模丢弃实现。像几乎所有无偏范围映射器实现一样,我发现这似乎并不特别关心它使用了多少数据。然而,这并不意味着它必然会降低数据效率,因为它具有更少未命中的优势。

arc4random 的基本思想似乎是,只要鸽子的数量(max_randvalue_output)可以被孔的数量(rangeupperbound)整除,模函数本身就是一个优雅且无偏的范围映射器。然而,模数似乎仅在您不啜饮时才相关​​,即当随机源的输出超过 ceil(log2(buckets)) 位时。

在“浪费”的随机位的数量和丢弃的百分比之间似乎存在权衡。未命中的百分比与范围映射器输入中的多余位数成反比。似乎应该有一种数学方法来比较一个有点小范围映射器的数据效率和一个更饥饿的版本和更少的失误,但我不知道。

所以我的计划是只写两个实现:有点吝啬类型的范围映射器,可能有点像也可能不像数学论坛的例子(我不明白)和一个接受字节输入的不变字节输入模范围映射器来自 TRNG 并使用从最大的顶部丢弃的模数除偏方法将 (x)n 只鸽子与 n 孔匹配,这类似于 arc4random。完成后,我计划将它们发布在 codereview 上。

我基本上是在寻找任何这些问题的帮助或建议,这些问题可能会帮助我编写一个更简洁但仍然不偏不倚的范围映射器,特别是在我的简约算法方面。运行时效率不是优先事项。

0 投票
1 回答
84 浏览

python - 如何编写一个 PEG 解析器,它完全使用任何和所有文本,同时仍然匹配其他给定规则?

我正在制作一个应用程序,以使没有经验的人更容易理解和用户友好的编写(PEG)解析器。是的,它以前已经做过,但它对我来说是一个很好的关于 GUI 的学习经验。

使其平易近人的部分原因是用户不必担心他们的语法必须匹配整个文本,他们应该能够在没有所有“样板”的情况下提取有意义的数据。

如何做到这一点?请看下面我的回答。或者提供你自己的。

0 投票
1 回答
81 浏览

python - 为什么这个使用简约的 Python 解析器永远找不到 ifdef 块

这是一个大型解析器的简化版本。我一直让我有点发疯,因为我似乎无法让它始终如一地工作。较大的版本可以工作,但有很多边缘情况,它不能很好地工作,我发现自己必须教 python 整个语法,我想要的只是#ifdef 预处理器指令。

我试图简化它并得到这个(下),但它从来没有找到 ifdef / endif。为什么?

它找到了许多“行”,但从来没有找到一个“if”块。(注意“代码”不应该做任何有用的事情,它只是一些示例文本)

0 投票
1 回答
49 浏览

python - 如何在 PyPEG 中处理所有可能的 C 类块注释样式

在放弃简约之后,我尝试了 PyPEG。我已经取得了更大的成功,因为我已经实现了最初的目标,但似乎无法正确处理评论。

我已将问题提炼为以下代码。

您可以看到,如果块注释前面有代码(测试用例 4 和 5),则并非所有测试用例都有效,然后生成 Line 而不是 BlockComment。

有没有办法让 PyPEG 自己做到这一点,或者我需要对行进行后处理以找到存在于多行中的 BlockComments。

0 投票
0 回答
31 浏览

python - 如何完全忽略简约中的空格?

我有以下代码使用简约解析算术表达式。它工作正常,但空格包含在解析树中。我们怎样才能去掉解析树中的空格,只保留有意义的标记?Lark 解析库通过%ignore WS. 是否有类似的简约或其他方式来达到相同的效果?

这是输出: