问题标签 [tinypg]

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 投票
1 回答
1228 浏览

regex - 在 TinyPG 中使用 BNF 中的现有语言?

如何在 TinyPG中使用GOLD 元语法(RegExp + BNF)中的这些 BNF 语法?我是 BNF 的新手,所以大约需要进行什么样的转换才能将 BNF 转换为 EBNF?

我相信这应该很简单,因为 TinyPG 需要 RegExp + EBNF,而 GOLD 语法是 RegExp + BNF

另外,是否有任何可用语言的 TinyPG 源代码,只是为了看看我需要做什么样的转换?

0 投票
1 回答
2386 浏览

c# - 什么是 TinyPG,它是如何工作的?

什么是 TinyPG,它是如何工作的?我知道它是一个“编译器-编译器”,但我该如何开始并在 C# 中创建自己的编译器?

0 投票
1 回答
89 浏览

c# - TinyPG 功能实现

最近我对解析器生成器和编译器编译器非常感兴趣。为了玩转,我下载了 TinyPG,现在有了一种简单的语言来解析字符串和浮点数。现在,我很好奇用参数实现简单的函数。我设法通过评估一个表达式主体并将其存储在一个表中来创建无参数函数,然后在调用函数时检索该值。我将如何在 TinyPG(或任何其他解析器生成器)中使用参数实现简单的一个表达式函数?

0 投票
1 回答
248 浏览

parsing - 使用 LL1 解析器解析 lambda 演算风格的函数应用程序

我正在使用TinyPG,它是一个 LL1 解析器生成器,来解析 lambda 演算。我正在尝试编写一个规则来解析函数应用程序,比如(a b)or(a b c)等​​等。

到目前为止,我有这个规则(有点简化):

但这将无法解析在左括号之后和右括号之前有空格的术语:( a b ). 我可以在左括号后允许空格,如下所示:

但我无法将其设置为在右括号前允许空格。我想出了这个,这似乎有效:

但是是混乱和递归的,这将使节点难以读取和编译。是否有任何非递归或至少更简单的方法来解析它?

0 投票
1 回答
244 浏览

c# - TinyPG 没有正确解析这个语法、错误或语法错误?

我需要解析一种不是我设计的简单语言,所以我无法更改语言。我需要 C# 中的结果,所以我一直在使用TinyPG,因为它非常易于使用,并且不需要外部库来运行解析器。

事情一直进展顺利,直到我在语言中遇到了这个结构。(这是一个简化版本,但确实显示了问题):

结果解析器无法解析:

因为它贪婪地将 END 作为一个IDENTIFIER, 而不是正确地作为END关键字。

所以,这是我的问题:

  1. 对于 LL(1) 解析,此语法是否模棱两可或错误?或者这是 TinyPG 中的错误?

  2. 有什么方法可以重新设计语法以TinyPG正确解析示例行?

  3. C#对于输出代码且不需要额外库的简单解析器,还有其他建议吗?我看过LLLPGand ANTLR4,但发现它们比TinyPG.

0 投票
1 回答
139 浏览

c# - BNF 语法有没有结尾的部分?

我需要解析一种不是我设计的简单专有语言,所以我无法更改语言。我需要 C# 中的结果,所以我一直在使用 TinyPG,因为它非常易于使用,并且不需要外部库来运行解析器。TinyPG 生成一个简单的 LL(1) 解析器。

我目前遇到的问题与语言如何将文件划分为部分有关。它有用于不同类型变量的部分,设置它们的初始值,方程定义等。我只关心声明变量的部分,所以我想忽略其余部分。我不知道其他部分的所有规则,也不想弄清楚它们。它们可能被视为评论。

这是一个代码示例:

我关心 PARAMETER 和 SET 部分,但不关心 EQUATION 部分。如您所见,问题在于这些部分没有 END 标记。所以我不知道如何告诉语法当你得到一个不同的关键字时一个节结束,但是新的关键字可能会开始一个新的节。在我的尝试中,新部分开始关键字被消耗以关闭旧部分。

还有比我在这里列出的更多的部分,其中一些我关心,一些我不关心。它们似乎分为两种类型,“看起来像参数”,在语句末尾没有分号,“看起来像方程”。这种语言不区分大小写或空格。这些部分可以按任何顺序排列。(例如,SET、EQUATION、PARAMETER) 除了注释之外,整件事都可以写在一行上。

目前我正在通过使用正则表达式来找到我感兴趣的部分来解决这个问题,并且只将这些部分提供给解析器,但是我也很难想出一个适用于所有情况的正则表达式,但是不会意外地在评论中选择关键字。我可能最终只是扩展了这个解决方法来解决它的问题,但直接在语法中解决问题会更好。这可能不是 LL(1) 语言。

0 投票
1 回答
103 浏览

scripting - 如何修改此脚本以在打开的文件上运行 TinyPNG,而不必使用打开对话框来选择文件?

我正在尝试修改此脚本以压缩然后使用 TinyPNG Photoshop 插件关闭所有打开的文件,而不必在打开的对话框中一次选择一个文件。他们确实提供了另一个脚本,允许您压缩整个文件夹。但是,我发现自己需要在一个文件夹中压缩 50 张图像中的 10 张,所以我宁愿选择那 10 张或打开这 10 张并在所有打开的文件上运行脚本。

我试过更换

compressFile(File.openDialog("Choose a PNG or JPEG file to compress")

compressFile(app.activeDocument)

试图让脚本只压缩当前文档。

它不使用活动文档,而是直接跳到 catch(error)。