LoginSignup
1

More than 5 years have passed since last update.

おめがシスターズの名言(迷言?)でBrainf*ck派生言語を作ってみた

Last updated at Posted at 2019-02-04

はじめに

おめシスはいいぞ。
ということで、Brainf*ck派生言語、「Ω」です。
C++で実装しました。

説明

Ωは、Brainf*ckの8つの命令をそれぞれおめシスの台詞に置き換えただけのものです。

+ -> "おめシスはいいぞ。"
- -> "おめがってるー!?"
> -> "う、うん"
< -> "わかるぅ〜"
. -> "って言わないで"
, -> "うんちゃん"
[ -> "えーんえーん"
] -> "おめ合体"

実装

Omega.cpp
#include <iostream>
#include <cstdio>
#include <string>
#include <fstream>

int main(int argc, char* argv[]) {
    using Byte = unsigned char;
    Byte buf[30000] = {};
    Byte* ptr = buf;
    std::string s;
    int count = 0;
    bool flag = false;
    if(argc == 1) {
        std::cout << "Please specify an OMGS file." << std::endl;
        return 1;
    }
    std::string file = argv[1];
    int i = file.rfind(".", file.size());
    if(file.find("omgs", i) != (i + 1)) {
        std::cout << "Please specfy an OMGS file." << std::endl;
        return 1;
    }
    std::ifstream ifs(file);
    while(getline(ifs, s)){
        for(i = 0; i != s.size();) {
            if(s.find("う、うん", i) == i) {
                ++ptr;
                i += 12;
                if(flag) count += 12;
            }
            else if(s.find("わかるぅ〜", i) == i) {
                --ptr;
                i += 15;
                if(flag) count += 15;
            }
            else if(s.find("おめシスはいいぞ。", i) == i) {
                ++*ptr;
                i += 27;
                if(flag) count += 27;
            }
            else if(s.find("おめがってるー!?", i) == i) {
                --*ptr;
                i += 27;
                if(flag) count += 27;
            }
            else if(s.find("って言わないで", i) == i) {
                putchar(*ptr);
                i += 21;
                if(flag) count += 21;
            }
            else if(s.find("うんちゃん", i) == i) {
                *ptr = getchar();
                i += 9;
                if(flag) count += 9;
            }
            else if(s.find("えーんえーん", i) == i) {
                i += 18;
                if(*ptr == 0) {
                    while(s.find("おめ合体", i) != i)
                        i += 3;
                }
                else {
                    flag = true;
                    count += 18;
                }
            }
            else if(s.find("おめ合体", i) == i) {
                if(*ptr != 0) i -= count;
                else {
                    flag = false;
                    i += 12;
                }
                count = 0;
            }
            else i += 3;
        }
    }
    return 0;
}

Ωのソースコード例

"Omega sisters"と出力するコードです。omgsという拡張子を使います。

Omega_sisters.omgs
おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。わかるぅ〜わかるぅ〜おめがってるー!?おめ合体う、うんう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでおめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?って言わないでおめシスはいいぞ。おめシスはいいぞ。って言わないでおめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?って言わないでわかるぅ〜って言わないでう、うんう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでおめシスはいいぞ。って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?おめがってるー!?う、うんおめがってるー!?おめ合体わかるぅ〜って言わないでう、うんおめシスはいいぞ。おめシスはいいぞ。えーんえーんわかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。う、うんおめがってるー!?おめ合体わかるぅ〜おめシスはいいぞ。おめシスはいいぞ。おめシスはいいぞ。って言わないでおめシスはいいぞ。って言わないで

実行

以下のようにcppファイルをコンパイルし、Omegaという実行ファイルを作成。

$ g++ Omega Omega.cpp

そしたら、次のように実行。

$ ./Omega Omega_sisters.omgs

そうすると、以下のように出力されます。

Omega sisters

まとめ

この台詞入れて!とか、ここはこうしたらいいんじゃない?などというご意見がありましたら是非コメントをください。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1