问题标签 [parser-combinators]
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.
scala - 如何在不丢剑的情况下从文本中解析占位符,这样你就可以用灯罩击退掠夺者
我需要从文本中解析占位符,例如abc $$FOO$$ cba
. 我用 Scala 的解析器组合器破解了一些东西,但我对这个解决方案并不满意。
特别是,我在正则表达式中使用了零宽度匹配器(?=(\$\$|\z))
来停止解析文本并开始解析占位符。这听起来非常接近于在scala 邮件列表中讨论的恶作剧和色彩缤纷的恶作剧(这激发了这个问题的标题。)
所以,挑战:修复我的解析器在没有这个黑客的情况下工作。我希望看到从问题到您的解决方案的清晰进展,因此我可以替换随机组装组合器直到测试通过的策略。
scala - 方法“|”中的预期解析器类型
我针对 scala 2.8.0 编译了以下代码:
编译 MyParser1 给出:
我相信它失败是因为 | 方法类型签名,定义为:
为什么 U 必须是 T 的超类型?“primitiveType”的返回值应该是什么?
scala - 将标签附加到 Scala 中的不可变案例类
我正在尝试使用包括标签和 goto 在内的命令为小语言创建解析器:
GOTO
等是扩展抽象类的IFCMD
案例类Core
为了与功能/类似scala/不可变对象的方式保持一致,我认为这样定义Core
是错误的:
但可以让我用以下内容替换部分<APPENDLABELTO_CORE>
:
谁能指出“scalaish”的方式来做到这一点?
(我试过c copy (label=Some(l))
了,但抽象基类没有自动复制构造函数的魔力)
parsing - 如何为统一的差异语法编写解析器
我应该使用 RegexParsers、StandardTokenParsers 还是这些都适合解析这种语法?可以从这里找到语法示例。
regex - 使用 RegexParsers 解析空白/空格
解析空白/空白有什么问题?
regex - 如何编写一个匹配所有不是“$”后跟“i”或“{”的字符的正则表达式?
意思是,我想匹配:
或者
但不是这个:
或者:
我还想匹配其他所有内容……普通字符、符号、数字等。
匹配除以 $ 开头的所有内容之外的所有内容都很容易。就像这样:
我已经尝试过使用 (?!i) 或 (?!{) 多种组合的正则表达式前瞻语法,但我似乎无法让它工作。我也试过用 = 而不是 ! 像这样: (?=i)
基本上,我已经尝试以我可以用 [^\$] 表达式成像的各种方式注入这些前瞻,但我无法让它工作。
帮助?
编辑:Hrm,这似乎有效:
f# - 这是解析器组合库的合理基础吗?
我最近一直在使用 FParsec,我发现缺乏通用解析器对我来说是一个主要的停止点。我对这个小库的目标是简单性以及对通用输入的支持。你能想到任何可以改善这一点或有什么特别糟糕的补充吗?
回溯
令人惊讶的是,实现您所描述的内容并不需要太多代码。这有点草率,但似乎工作得很好。
回溯第 2 部分
切换代码以使用惰性列表和尾调用优化递归。
parsing - Scala 解析器:可用性、差异和组合?
我的问题是关于 Scala 解析器:
- 哪些是可用的(在标准库和外部),
- 它们之间有什么区别,
- 他们是否共享一个通用的 API 和
- 可以组合不同的解析器来解析一个输入字符串吗?
我至少找到了这些:
- Scala 的“标准”解析器(似乎是 LL 解析器)
- Scala 的Packrat 解析器(从 2.8 开始,是一个 LALR 解析器)
- Parboiled解析器(PEG 解析器?)
- Spiewak 的GLL 解析器组合器
haskell - 解析器组合器能否变得高效?
大约 6 年前,我在 OCaml 中对自己的解析器组合器进行了基准测试,发现它们比当时提供的解析器生成器慢约 5 倍。我最近重新审视了这个主题,并将 Haskell 的 Parsec 与用 F# 编写的简单的手动优先爬升解析器进行了基准测试,并惊讶地发现 F# 比 Haskell 快 25 倍。
这是我用来从文件中读取大型数学表达式、解析和评估它的 Haskell 代码:
这是我在 F# 中的自包含优先级攀爬解析器:
我的印象是,即使是最先进的解析器组合器也会浪费大量时间进行回溯。那是对的吗?如果是这样,是否可以编写生成状态机的解析器组合器以获得具有竞争力的性能,或者是否有必要使用代码生成?
编辑:
这是我用来生成 ~2Mb 表达式以进行基准测试的 OCaml 脚本:
java - 关于Java语法中修饰符的问题
Java语法定义ModifiersOpt: { Modifier }
. Modifier
被定义为public, protected, private, static
etc ...之一。{x}
表示 . 的零次或多次出现x
。
我们知道这public public
不是一个有效的标识符。这是否意味着列表中的任何元素(Modifier
例如public
)只出现一次{Modifier}
?是否有任何“标准”解析器组合器{ Modifier }
?