シェイクスピアプログラミング言語(SPL)は、Jon ÅslundとKarl Wibergによって設計された難解なプログラミング言語です。 [ 1 ] Chef言語と同様に、プログラムをプログラム以外のもの、この場合はシェイクスピア劇のように見せるように設計されています。
プログラムの冒頭にある文字リストでは、当然ながら「ロミオ」や「ジュリエット」といった名前のスタックがいくつか宣言されます。これらの文字は互いに対話を行い、スタックの最上位の値を操作したり、スタックをプッシュしたりポップしたり、入出力(I/O)を行ったりします。また、文字同士で質問を交わすことができ、これは条件文のように機能します。全体として、このプログラミングモデルはアセンブリ言語に非常によく似ていますが、はるかに冗長です。
Shakespeareプログラムの最初の行は「タイトル」と呼ばれます。コンパイラは、最初の行から最初のピリオドまでの内容をすべてコメントとみなします。
ここは変数を宣言するセクションです。各変数は符号付き整数値を保持でき、以下の形式をとります。
名前、説明
Nameは変数名であり、コンパイラDescriptionによって無視されます。コンパイラは、実際のシェイクスピアの登場人物に対応する名前のみを認識します。[ 1 ]
Shakespeare のコードは、文字 (変数) が相互作用するActs部分を含むに分割されます。各と にはローマ数字が付けられ、ラベルとして機能します。コロンの後のコードはすべてコメントとみなされます。それらは次の形式で記述されます。ScenesActSceneGOTO
第一幕:ハムレットの侮辱とお世辞。 第一幕:ロミオへの侮辱。
個々のコード行は、一般的に、あるキャラクターが別のキャラクターに話しかけるセリフの形式をとります。このようにして、変数(話しかけられるキャラクター)の値が代入、変更、または出力されます。キャラクターは「You」、「Thou」、「Thee」としてのみ呼びかけることができます。したがって、セリフが話されるときは、通常、正確に 2 人のキャラクターが「ステージ上」にいなければなりません。1 人が話すキャラクター、もう 1 人が話しかけられるキャラクターです。[ 1 ]変数をステージに呼び出すには、Enterコマンドを 1 つ以上のキャラクターのリストとともに使用します。このExitコマンドは、リストされたキャラクターのうち 1 人にステージから退出するように指示します。Exeunt複数のキャラクターに退出するように指示するか、キャラクターがリストされていない場合は、すべてのキャラクターがステージから退出するように指示します。[ 1 ]次の形式が使用されます。
【ジュリエット登場】 【ロミオとジュリエット登場】 【ロミオ退場】 【ロミオとジュリエット退場】 [退場]
行はキャラクターが話すセリフとして表現され、少なくとも1つの文で構成されます。各文は、変数に新しい値を代入したり、変数にその値を出力するように指示したり、入力を受け取るように指示したりできます。行はスタックを操作したり、if/then文やgoto文のように機能したりすることもできます。行はキャラクターの名前とコロンで始まります。このキャラクターが話し手であるため、ステージ上のもう1人のキャラクターは、「あなた」、「汝」、「汝」などと呼ばれる変数になります。
定数は名詞と形容詞の組み合わせで表されます。言語はそれぞれ有限のリストを認識し、Åslund と Hasselström が認識したように、両方のリストは肯定、否定、中立のトーンを持つものに分けられます。肯定名詞と中立名詞は 1 の値を持ち、否定名詞は -1 の値を持ちます。任意の形容詞は名詞を 2 倍し、形容詞は複合できます。[ 1 ]所有代名詞はパーサーによって無視されますが、基本的な算術に関連する単語は「合計」、「商」、「立方」などの演算として認識されます。文字に値を割り当てる文は「You」、「Thou」、「Thee」で始まり、オプションで「are as [任意の形容詞] as」と続き、その後、新しい値の数学式を名詞、形容詞、変数、演算で示します。そのような行の例は次のとおりです。[ 1 ]
ハムレット: 嘘つきで愚かで、父親のいない、臭くて頭の悪い、半人前の臆病者め! ジュリエット: お前はロミオの平方根と同じくらい悪党だ!
数式では、他の登場人物の名前(たとえその登場人物が舞台上にいなくても)を使用して、その登場人物の現在の値を計算に利用したり、話しかけている登場人物に対して「あなた自身」や「汝自身」といった表現を使用したりすることもできます。
行では、変数に出力または入力の受け取りを要求することもできます。「Open your heart」は変数の数値を出力し、「Speak your mind」は対応するASCII文字を出力します。「Listen to your heart」または「Open your mind」は、変数にユーザーからの入力を取らせます。前者は数値、後者は文字です。[ 1 ]
if/then 文は、登場人物が問いかける形で表現されます。「as [任意の形容詞] as」は等価性のテストを表し、「better」と「worse」はそれぞれより大きいこととより小さいことを表します。「if so」または「if not」で始まる後続の行は、元の条件の真偽に応じて何が起こるかを決定します。 goto 文は「Let us」、「We shall」、または「We must」で始まり、「return to」または「proceed to」と続き、その後、幕またはシーンを指定します。シーンは現在の幕のそのシーンとして解析されます。goto 文は別の幕のシーンを呼び出すことはできません。[ 1 ] goto を呼び出す条件文は次のようになります。[ 1 ]
ジュリエット: 私はあなたより優れているのか? ハムレット: そうであれば、シーンIIに進みましょう。
各変数はスタックです。行が文字に「私を覚えていてください」や「自分自身を覚えていてください」などの適切な値を「覚えておく」ように指示すると、変数のスタックに整数がプッシュされます。文字に何かを「思い出す」ように指示すると、スタックの最上位の値がポップされます(つまり、変数はこの値になります)。この単語以降のすべてのテキストはコメントとして扱われます。[ 1 ]
標準的な「Hello, World!」プログラム:
このアイデアは、文字列の各文字のASCII値を生成し、「Speak your mind」コマンドを使用してそれを表示することです。たとえば、ハムレットの最初のセリフでは、算術演算を組み合わせて、もう一人の主人公ロミオに10進数値72(2進数1001000)を割り当てています。これはASCIIでは文字「H」に対応します。
『さよならは言わないで』、二幕劇。 ロミオは、並外れた忍耐力を持つ青年だった。 ジュリエットもまた、並外れた優雅さを備えた若い女性だった。 オフィーリアは、ハムレットと激しく対立する、並外れた女性である。 ハムレット、アンデルセンを侮辱する者。 第一幕:ハムレットの侮辱とお世辞。 第一幕:ロミオへの侮辱。 【ハムレットとロミオ登場】 ハムレット: 嘘つきで愚かで、父親のいない、臭くて頭の悪い、半人前の臆病者め! あなたはハンサムで金持ちで勇敢な人とそうでない人の違いと同じくらい愚かです 英雄よ、そして汝自身よ! 思うままに発言せよ! あなたは、あなたの太った小さな詰め物をした、乱用された埃っぽいものの総和と同じくらい勇敢です 古くて腐った股当てと美しく、暖かく平和で晴れた夏の 日。あなたの健康度は、 最も甘く真っ赤なバラと、私の父とあなた! 思うままに話して! あなたは、あなた自身と、その差の合計と同じくらい臆病です。 大きくて力強く誇り高い王国と馬の間で。あなたの考えを述べてください。 遠慮なく意見を述べてください! 【ロミオ退場】 第二幕:ジュリエットへの称賛。 【ジュリエット登場】 ハムレット: あなたはロミオと彼の馬と彼の 黒猫よ! 思うままに話せ! 【ジュリエット退場】 シーンIII:オフィーリアへの称賛。 【オフィーリア登場】 ハムレット: あなたはロミオと四角い人の違いと同じくらい美しい 巨大で緑豊かで平和な木。思うままに話してください! あなたは大きな田舎町の産物のように素敵で、私の素晴らしい 底なしの刺繍入り財布。思ったことを言ってください! あなたは、最も青く澄み切った甘い空が生み出すもののように愛に満ちている そしてリスと白馬の合計。あなたはとても美しい ジュリエットとあなた自身の違い。率直に意見を述べてください! [オフィーリアとハムレット退場] 第二幕:ハムレットの背後で。 第1幕:ロミオとジュリエットの会話。 【ロミオとジュリエット登場】 ロミオ: 思ったことを言ってください。あなたは自分自身と 私の小さな滑らかなハムスターと私の鼻の違い。 心! ジュリエット: 自分の考えを言え!お前はハムレットと同じくらい悪い!お前はハムレットと同じくらい小さい マイリトルポニーの差の二乗の差 そしてあなたの大きな毛むくじゃらの猟犬とあなたの哀れな小さな立方体 股間当て。思ったことを言ってください! 【ロミオ退場】 第二幕:ジュリエットとオフィーリアの会話。 【オフィーリア登場】 ジュリエット: あなたはロミオと小さな合計の商と同じくらい良い 毛むくじゃらの動物とヒル。あなたの意見を述べてください! オフィーリア: お前はロミオと2倍の商と同じくらい嫌悪感を催させる ヤドリギと膿が滲み出る感染した水疱の違いを話してください! あなたの心! [退場]