TL;DR
当初、私は次のような仮説を立てていました。
ソース コードのヒントに基づいて、埋め込み式がこのトークンの最も可能性の高い定義のようです。
これは事実であることが判明し、Ruby 2.x のドキュメントによって公式に検証されました。この回答が最初に書かれた後のRipper ドキュメントの更新に基づいて、パーサートークンは正式に定義されているようstring_embexpr
で、シンボル自体は「埋め込み式」と呼ばれます。詳細な確証については、この回答の下部にある「Ruby 2.x の更新」セクションを参照してください。
回答の残りの部分は、特に Ruby 1.9.3 などの古い Ruby に関連しており、元の回答を開発するために使用された方法論は依然として興味深いものです。したがって、回答を更新していますが、現在の回答は短くなる可能性がありますが、歴史的な目的のために元の投稿の大部分をそのまま残しています。
Ruby 1.9.3 ソースコードに基づく 2.x 以前の回答
関連する回答
この回答は、コード ベース全体でembexprを多数参照している Ruby ソースに注意を促します。@Phlip は、この変数が「EMBedded EXPRession」の略語であることを示唆しています。これは合理的な解釈のように思えますが、ruby-1.9.3-p194 のソースも Google (この記事の執筆時点)も、Ruby に関連するかどうかに関係なく、embexprに関連して埋め込み式という用語を明示的に参照していません。
追加研究
Ruby 1.9.3-p194 ソースコードのスキャン:
ack-grep -cil --type-add=YACC=.y embexpr .rvm/src/ruby-1.9.3-p194 |
sort -rnk2 -t: |
sed 's!^.*/!!'
mbexprという用語を含む 9 つのファイルと 33 行が表示されます。
test_scanner_events.rb:12
test_parser_events.rb:7
eventids2.c:5
eventids1.c:3
eventids2table.c:2
parse.y:1
parse.c:1
ripper.y:1
ripper.c:1
特に興味深いのは、 parse.yおよびripper.y bison ファイルの 4,176 行目にstring_embexprが含まれていることです。同様に、TestRipper::ParserEvents#test_string_embexprには、 test_parser_events.rbの 899 行目と 902 行目に#{}の解析への 2 つの参照が含まれています。
test_scanner_events.rbで実行されるスキャナーも注目に値します。このファイルは、さまざまな文字列式内のトークン#{expr}をスキャンする#test_embexpr_begおよび#test_embexpr_endのテストを定義します。テストはembexprとexprの両方を参照しており、「埋め込み式」が実際に意味のある名前である可能性が高くなります。
Ruby 2.x の更新
この投稿が最初に書かれて以来、標準ライブラリの Ripper クラスのドキュメントが更新され、正式にトークンが特定されました。使用法セクションは例として提供"Hello, #{world}!"
し、一部は次のように述べています。
これはとのリテラル部分:string_literal
です。2 つのステートメントの間には、embexprが埋め込まれた式です。@tstring_content
Hello,
!
@tstring_content
:string_embexpr