运行时语言更改的解析技术

发布于 2024-10-04 21:51:08 字数 63 浏览 2 评论 0原文

看看 Rakudo Perl6,我想知道是否有解析和词法分析的技术可以改变/扩展语言的语法,并且高效且不难实现。

Looking at Rakudo Perl6 I wonder if there are techniques for parsing and lexical analyses that allow to alter/extend the syntax of the language and that are efficient and not to hard to implement.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

錯遇了你 2024-10-11 21:51:08

看看 PEG。有些语言是基于 PEG 的 ( http://en.wikipedia.org/wiki/Parsing_expression_grammar ),可扩展,例如:

http://www.chrisseaton.com/katahdin/

http://www.meta-alternative.net/mbase.html

Perl5 和 Perl6 语法可以很容易地以 PEG 形式定义(我可能是错的,但当前的 Perl6 很可能是这样实现的)。

Take a look at PEGs. There are languages that are based on PEGs ( http://en.wikipedia.org/wiki/Parsing_expression_grammar ), which are extendable, for example:

http://www.chrisseaton.com/katahdin/

http://www.meta-alternative.net/mbase.html

Perl5 and Perl6 grammars could be easily defined in PEG form (and I might be wrong, but the current Perl6 is most likely implemented this way).

萌︼了一个春 2024-10-11 21:51:08

“不”。 [编辑:截至问题提出时]如果问题是关于词法/解析 Perl,那么它相当困难。我们(请参阅我的简介中的“我们”)有一个 Perl5 词法分析器。我们拥有非常好的词法分析器生成器工具(Unicode、多状态、内置“not regexp”的正则表达式)。 Perl 词法分析器的构建是一件令人头疼的事情。我们最终得到了大约 50 种词法模式(每种模式都有自己的一组标记定义)来处理词法部分。

我们正在关注解析部分,今天我们很幸运,没有直接需要这样做,所以到目前为止我们已经避免了这一点。显然,根据各种标识符的动态定义,该语言是不明确的,因此您在某一时刻如何解释(解析)一个短语并不是静态可确定的。我们认为我们可以使用 GLR 解析器来处理歧义,并且只是简单地保留歧义作为可能的运行时替代方案。几个月后我会通知你。

"No". [edit: as of the time of the question] If the question is about lexing/parsing Perl, its pretty hard. We (see my bio for "we") have a Perl5 lexer. We have really good lexer-generator tools (Unicode, multi-state, regexps complete with "not regexp" built-in). The Perl lexer was a royal headache to build; we ended up with something like 50 lexical modes (each with its own set of token definitions) to handle the lexing part.

We're staring at the parsing part and today we are lucky and don't have a direct need to do it, so we've avoided this so far. Apparantly the language is ambiguous depending on the dynamic definitions of various identifiers, so how you interpret (parse) a phrase at one moment isn't statically decidable. We think we can do it using a GLR parser that handles ambiguities and just simply hold on to the ambiguities as possible runtime alternatives. I'll let you know in several months.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文