加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-17 02:40:18 所属栏目:百科 来源:网络整理
导读:背景: 我正在实现一种类似于Ruby,called Sapphire的语言,作为尝试编程语言中的并发性的一种方法.我正在尝试使用嵌入式代码复制Ruby的双引号字符串,我发现它作为程序员非常有用. 题: 任何Ruby解释器如何将带有嵌入代码的双引号字符串转换为AST? 例如: put
背景:

我正在实现一种类似于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接受答案.如果你以这种方式处理事情,那么就不难看出如何去做.点击字符串中的#{,基本上会启动一个新的解析上下文,再次将其解析为表达式.这意味着您示例中的第一个}不能作为插值的终止,因为它是表达式中文字字符串的一部分.一旦到达表达式的末尾(记住表达式分隔符,如;),下一个}就是你需要的那个.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读