ruby interperter如何解析双引号字符串

ruby interperter如何解析双引号字符串,第1张

概述背景: 我正在实现一种类似于Ruby,called Sapphire的语言,作为尝试编程语言中的并发性的一种方法.我正在尝试使用嵌入式代码复制Ruby的双引号字符串,我发现它作为程序员非常有用. 题: 任何Ruby解释器如何将带有嵌入代码的双引号字符串转换为AST? 例如: puts "The value of foo is #{@foo}."puts "this is an example 背景:

我正在实现一种类似于Ruby,called Sapphire的语言,作为尝试编程语言中的并发性的一种方法.我正在尝试使用嵌入式代码复制Ruby的双引号字符串,我发现它作为程序员非常有用.

题:

任何Ruby解释器如何将带有嵌入代码的双引号字符串转换为AST?

例如:

puts "The value of foo is #{@foo}."puts "this is an example of unmatched braces in code: #{ foo.go('}') }"

细节:

我遇到的问题是如何决定关闭代码块.代码块可以在其中包含其他大括号,只需稍加努力就可以获得无与伦比的功能.词法分析器可以在字符串中找到代码块的开头,但是在没有解析器的帮助下,它无法确定哪个字符是该块的结尾.

它看起来像Ruby的parse.y文件同时执行lexing和解析步骤,但reading that thing is a nightmare它是11628行,没有注释和很多abbr.

解决方法 没错,Yacc文件起初读起来有点令人生畏,而parse.y不是最好的文件.你看过各种字符串制作规则了吗?你有什么具体问题吗?

至于实际的解析,词法分析器也解析数字文字和字符串的确很少见,例如SO的similar question接受答案.如果你以这种方式处理事情,那么就不难看出如何去做.点击字符串中的#{,基本上会启动一个新的解析上下文,再次将其解析为表达式.这意味着您示例中的第一个}不能作为插值的终止,因为它是表达式中文字字符串的一部分.一旦到达表达式的末尾(记住表达式分隔符,如;),下一个}就是你需要的那个.

总结

以上是内存溢出为你收集整理的ruby interperter如何解析双引号字符串全部内容,希望文章能够帮你解决ruby interperter如何解析双引号字符串所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1281941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-09
下一篇 2022-06-09

发表评论

登录后才能评论

评论列表(0条)

保存