@require: class-slydifi/theme/akasaka @require: code-printer/code-design @require: code-printer/code-printer @require: code-printer/code-theme @require: figbox/figbox let-block +code-block source keywords = let syntax = let void-syntax-rule = CodePrinter.syntax-rule-fun (fun _ -> None) in CodePrinter.make-syntax (| line-comment = void-syntax-rule; block-comment = void-syntax-rule; string = void-syntax-rule; keywords = keywords; identifier = void-syntax-rule; others = []; |) in '< +code-printer?:( CodePrinter.make-config syntax CodeTheme.iceberg-light |> CodePrinter.set-number-fun CodeDesign.number-fun-null )(source); > let source = `# +frame{Polyglotとは}< +fig-center(vconcat [ textbox{単一のソースコードが複数の言語として解釈可能なプログラム}; gap 20pt; textbox{今回はPHP・Ruby・Perlの組み合わせ}; ]); > +frame{ソースコード}< +code-block(source)([]); +p{ 実行結果: \inline-code(`#php`);、\inline-code(`#ruby`);、\inline-code(`#perl`); } > +frame{PHPとして解釈する}< +code-block(source)([`# +frame{PHPとして解釈する}< +code-block(source)([`$a = 'a';`]); +p{ \inline-code(`$a`); に \inline-code(`'a'`); を代入 } > +frame{PHPとして解釈する}< +code-block(source)([`$/* 0; # */$a`; `=begin`; `();`]); +p{ \inline-code(`$$a = begin();`); (variable variable) } > +frame{PHPとして解釈する}< +code-block(source)([`echo "php\n";`]); +p{ 出力部分。実際の出力には先頭に \inline-code(`#`); が付く } > +frame{PHPとして解釈する}< +code-block(source)([`function begin() {}`]); +p{ 関数 \inline-code(`begin()`); を定義 } > +frame{PHPとして解釈する}< +code-block(source)([`$a = << +frame{おわりに}< +fig-center(vconcat ?:(align-center) [ gap 20pt; textbox{来たる3月のPHPerKaigi 2023で、}; gap 20pt; textbox{ここから\textbf{もう1言語足して}4言語にしたバージョンを}; gap 20pt; textbox{弊社デジタルサーカスからPHPerチャレンジの問題として出題します!}; ]); > +frame{Rubyとして解釈する}< +code-block(source)([`# +frame{Rubyとして解釈する}< +code-block(source)([`$a = 'a';`]); +p{ \inline-code(`$a`); に \inline-code(`'a'`); を代入 } > +frame{Rubyとして解釈する}< +code-block(source)([`$/* 0;`]); +p{ \inline-code(`$/`); はRubyの特殊なグローバル変数。\inline-code(`*`); は乗算 } > +frame{Rubyとして解釈する}< +code-block(source)([`# */$a`]); +p{ \inline-code(`#`); 以降は行コメント } > +frame{Rubyとして解釈する}< +code-block(source)([`=begin`; `();`; `echo "php\n";`; `function begin() {} $a = << +frame{Rubyとして解釈する}< +code-block(source)([`puts "#ruby";`]); +p{ 出力部 } > +frame{Rubyとして解釈する}< +code-block(source)([`=cut`; `print "#perl\n";`; `'# ';`]); +p{ 文字列リテラルとして読み飛ばし、行コメント } > +frame{Rubyとして解釈する}< +code-block(source)([`nil;`]); +p{ Rubyの \inline-code(`nil`); はPHPでいう \inline-code(`null`); } > +frame{Perlとして解釈する}< +code-block(source)([`=begin`; `=cut`]); +p{ ほぼRubyと同じ。 Perlだと \inline-code(`=begin`); から \inline-code(`=cut`); までがコメント } > >