NHKから国民を守るプログラミング言語

#はじめに
先日、[【数学】NHKから国民を守る党からNHKを守る党からNHKから国民を守る党を守る党](https://qiita.com/MirrgieRiana/items/da7dade622770a04d8f7)という記事がQiitaに投稿されました。

この記事の中で**NHKから国民を守る党文法**というものが定義されています。
これを読んだ私はこう思いました。

*「この文法でプログラムを書ければ、どんなに素晴らしいだろう」*

#コンビネータ論理
NHKから国民を守る文法は、**NHK**と**国民**という2種類の葉を持つ2分木を曖昧さなく表記できます。

このようなシンプルな構文を持つプログラミング言語として、[Lazy K](https://ja.wikipedia.org/wiki/Lazy_K)に注目しました。

Lazy K は[コンビネータ論理](https://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8D%E3%83%BC%E3%82%BF%E8%AB%96%E7%90%86)に基づくプログラミング言語であり、 `S` `K` `I` という3つのコンビネータだけでプログラムを書くことができます。
このうち `I` は `S K K` と外延的に等しいことが知られているので、実質的に必要なコンビネータは `S` と `K` だけです。[^1]

[^1]: `ι= (λf . (f S) K)` とすれば`S`と`K`すら必要ありません。[参考](https://en.wikipedia.org/wiki/Iota_and_Jot)

よって、以下の様な読み替えを行うだけで、チューリング完全な言語を作れます[^2]。

[^2]: つまり、Brainfuck に対する Ook! のように「NHKから国民を守る言語」は Lazy K の予約語を変えただけのものです。


| NHKから国民を守る文法 | コンビネータ |
|:-:|:-:|
| NHK | S |
| 国民 | K |
| AからBを守る党 | (A B) |

入出力や数値の取り扱いについては Lazy K の入門サイトなどをあたって下さい。

# 処理系の実装
処理系の実装には Python を使いました。

```py:nhk.py
#!/usr/bin/env python3
import sys
class Combinator :
    '''X-Y is synonym of Apply(X,Y)'''
    def __sub__(self, arg) :
        return Apply(self, arg)

    def evaluate(self) :
        return self

    def get_left(self, xs) :
        xs.append(self)

class _SIN(Combinator) :
    '''Do not call _SIN() . Use SIN instead'''
    sinlist = None
    def evaluate(self) :
        if _SIN.sinlist is None :
            _SIN.sinlist = str_to_sk(sys.stdin.read())
        return _SIN.sinlist

class _S(Combinator) :
    '''Do not call _S() . Use S instead'''

class _K(Combinator) :
    '''Do not call _K() . Use K instead'''

class Foreign(Combinator) :
    '''Non-combinator class. ((Foreign f)-(Foreign x)).evaluate() == f(x)'''
    def __init__(self, val) :
        self.val = val

class Apply(Combinator) :
    '''Application of combinators. Apply(X,Y) represents (X Y)'''
    def __init__(self, fun, arg) :
        self.fun = fun
        self.arg = arg

    def get_left(self, xs) :
        xs.append(self.arg)
        self.fun.get_left(xs)

    def evaluate(self) :
        left_evaled = self.fun.evaluate() - self.arg
        left = []
        left_evaled.get_left(left)
        n = len(left)
        if(n == 4 and left[3] == S) :
            return (left[2] - left[0] - (left[1] - left[0])).evaluate()
        if(n == 3 and left[2] == K) :
            return (left[1]).evaluate()
        if(n == 2 and isinstance(left[1], Foreign)) :
            return Foreign(left[1].val(left[0].evaluate().val))
        return left_evaled

S = _S()
K = _K()
SIN = _SIN()

I = S-K-K
true = K
false = K-I

# cons = \ x y c . c x y
cons = S-(S-(K-S)-(S-(K-K)-(S-(K-S)-(S-(K-(S-I))-K))))-(K-K)

succ = S-(S-(K-S)-K)
zero = K-I
one = I
two = succ-one
mul = S-(K-S)-K

def str_to_sk(string) :
    ret = cons - int_to_church(256) - false
    for c in reversed(string) :
        ret = cons - int_to_church(ord(c)) - ret
    return ret

def church_to_int(c) :
    return (c-(Foreign(lambda n: n+1))-(Foreign(0))).evaluate().val

def int_to_church(n) :
    if(n == 0) :
        return zero
    if(n == 1) :
        return one
    if(n == 2) :
        return two
    else :
        ret = one
        for c in bin(n)[3:]:
            ret = mul - two - ret
            if c == '1' :
                ret = succ - ret
        return ret

def get_car(c) :
    return (c-true).evaluate()

def get_cdr(c) :
    return (c-false).evaluate()

def evalAsLazyK(arg) :
    sk = arg - SIN
    while True :
        n = church_to_int(get_car(sk))
        if n > 255 :
            break
        print(chr(n), end='')
        sk = get_cdr(sk)

def parseNHK(code) :
    len_NHK     = len('NHK')
    len_people = len('国民')
    len_from    = len('から')
    len_save    = len('を守る党')

    stk = []
    code = code.replace('\n', '')

    while code :
        if code.startswith('NHK') :
            stk.append(S)
            code = code[len_NHK:]
        elif code.startswith('国民') :
            stk.append(K)
            code = code[len_people:]
        elif code.startswith('から') :
            code = code[len_from:]
        elif code.startswith('を守る党') :
            try :
                arg = stk.pop()
                fun = stk.pop()
            except IndexError as e :
               raise Exception('parseNHK failed. Too much "を守る党"')
            stk.append(fun-arg)
            code = code[len_save:]
        elif code.startswith(' ') or code.startswith('\t') or code.startswith('　') :
            code = code[1:]
        else :
            raise Exception('parseNHK failed at ' + code[:10])
    if len(stk) == 1 :
        return stk.pop()
    else :
        raise Exception('parseNHK failed. Too few "を守る党"')

if __name__ == '__main__' :
    with open(sys.argv[1]) as f:
        src = f.read()
    ast = parseNHK(src)
    evalAsLazyK(ast)
```

本当は必要になるたびに標準入力から1文字ずつ読み込む仕様にしたかったのですが、私のカンフーが足りなかったため、最初に必要になったときに標準入力を全て読み込む仕様になっています[^3]。

[^3]: 気が向いたら直します

#サンプルコード

## echo
標準入力をそのまま標準出力に吐き出すだけのプログラムを書いてみます。
コードは次のようになります。

```:sample.nhk
NHKから国民を守る党から国民を守る党
```

実行してみます。

```bash:
echo "foo bar baz" |./nhk.py sample.nhk
```


```:出力
foo bar baz
```

上手く動いてますね。

# 文字列の出力
国民（Kコンビネータ）を使えば、標準入力を無視して、決まった出力を与えるプログラムも書けます。

以下はサンプルコードです。

```:sample2.nhk
国民からNHKからNHKから国民からNHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから
国民からNHKを守る党を守る党からNHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守
る党を守る党から国民を守る党を守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHK
から国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民
を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る
党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からN
HKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から
国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民から
NHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党か
らNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党か
ら国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHK
を守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る
党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から
国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守
る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党を守る党
を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党からNHKから国民
から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党からNHKから国民からNHKからNHKから国民
を守る党から国民を守る党を守る党を守る党を守る党から国民を守る党を守る党を守る党を守る党を守る党から
国民から国民を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党か
らNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党か
ら国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民
からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る
党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国
民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からN
HKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国
民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からN
HKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党から
NHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守
る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民から
NHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党か
らNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を
守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKか
ら国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る
党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから
国民からNHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守
る党からNHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民を
守る党を守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKからNHKから国民からNHK
を守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNH
KからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る
党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国
民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る
党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る
党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからN
HKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守
る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守
る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKか
らNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党か
ら国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を
守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党
を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党
を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国
民を守る党から国民を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を
守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党からNHKから国民から国民を守る党を
守る党からNHKから国民からNHKを守る党を守る党からNHKから国民からNHKからNHKから国民を守る党から国民を
守る党を守る党を守る党を守る党から国民を守る党を守る党を守る党を守る党を守る党から国民から国民を守る
党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る
党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから
NHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から
国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守
る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を
守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を
守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHK
から国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国
民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る
党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからN
HKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守
る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民から
NHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守
る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る党を
守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHK
から国民からNHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党
を守る党からNHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国
民を守る党を守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKから国民からNHKを守
る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党か
らNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民
を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党
から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHK
から国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る
党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る
党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから
国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守
る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を
守る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党
からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党からNHKから国民からNHK
からNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民を守る党を守る党を守る党を守
る党を守る党から国民から国民を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を
守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを
守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHK
からNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党
から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民
を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る
党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る
党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから
国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守
る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守
る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKか
らNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党
を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民
からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党
を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る
党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党か
らNHKからNHKから国民からNHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民か
らNHKを守る党を守る党からNHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を
守る党から国民を守る党を守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKからNHK
から国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国
民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る
党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからN
HKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守
る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守
る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKか
らNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党か
ら国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を
守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHK
からNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る
党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国
民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る
党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守
る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKか
ら国民からNHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を
守る党からNHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民
を守る党を守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKから国民からNHKを守る
党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からN
HKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守
る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から
国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党か
らNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党か
ら国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHK
を守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る
党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る
党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国
民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守
る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守
る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党か
らNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党
を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国民からNH
Kを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党からNH
Kから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民を守る党を守
る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党か
ら国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を
守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHK
からNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る
党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNH
Kを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党から
NHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守
る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから
国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党か
らNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を
守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKか
ら国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を
守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民
を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国
民からNHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る
党からNHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民を守
る党を守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKから国民からNHKを守る党を
守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKか
ら国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党
からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民
を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民
からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る
党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る
党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民から
NHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守
る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る党を
守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党からNHKか
ら国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党からNHKから国民からNHKからNHKか
ら国民を守る党から国民を守る党を守る党を守る党を守る党から国民を守る党を守る党を守る党を守る党を守る
党から国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからN
HKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守
る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民から
NHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守
る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守
る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから
国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を
守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを
守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党
からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国
民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る
党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからN
HKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守
る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党を守る党を守る党を守る党を守る党
を守る党を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党からNHKから国民から国民
を守る党を守る党からNHKから国民からNHKを守る党を守る党からNHKから国民からNHKからNHKから国民を守る党
から国民を守る党を守る党を守る党を守る党から国民を守る党を守る党を守る党を守る党を守る党から国民から
国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民から
NHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党か
らNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党か
ら国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHK
を守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る
党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る
党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国
民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守
る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守
る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民か
らNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を
守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る党
を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る
党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党からNHKから国
民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民を守る党を守る党を守
る党を守る党を守る党から国民から国民を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党か
ら国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民か
らNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党
からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党
を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHK
から国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る
党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国
民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からN
HKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国
民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守
る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党か
らNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民
を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党
から国民を守る党を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党を守る党を守
る党を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党か
らNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党からNHKから国民からNHKか
らNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民を守る党を守る党を守る党を守る
党を守る党から国民から国民を守る党を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守
る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守
る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKか
ら国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を
守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党
を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHK
から国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る
党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国
民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国
民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守
る党からNHKから国民を守る党から国民を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党
からNHKからNHKから国民からNHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民
からNHKを守る党を守る党からNHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党
を守る党から国民を守る党を守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKから
国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守
る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKからNHKから国民からNHKを守
る党を守る党から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKか
らNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党
を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHK
を守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からN
HKから国民を守る党から国民を守る党を守る党を守る党を守る党を守る党を守る党からNHKからNHKから国民から
NHKを守る党を守る党からNHKから国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党から
NHKから国民からNHKからNHKから国民を守る党から国民を守る党を守る党を守る党を守る党から国民を守る党を
守る党を守る党を守る党を守る党から国民から国民を守る党を守る党からNHKから国民からNHKを守る党を守る党
から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民
を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNH
KからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る
党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNH
Kを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党から
NHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から
国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを
守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党
からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国
民を守る党からNHKからNHKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る
党から国民を守る党を守る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからN
HKから国民からNHKを守る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守
る党を守る党からNHKから国民からNHKを守る党を守る党から国民を守る党からNHKからNHKから国民からNHKを守
る党を守る党から国民を守る党を守る党からNHKから国民を守る党から国民を守る党を守る党を守る党からNHKか
ら国民を守る党から国民を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る
党から国民からNHKから国民を守る党から国民を守る党を守る党を守る党を守る党を守る党を守る党を守る党を
守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党を守る党
```

実行してみます。

```bash:
./nhk.py sample2.nhk
```


```:出力
Down with NHK!
```

良さそうです。

#まとめ
いかがでしたか？

素晴らしいですね。

#追記
[先駆者の方](https://twitter.com/Yubeshi/status/1210045567146983424?s=20)がいらっしゃいました。

やはりNHKから国民を守る文法でプログラミングをしたいという需要は大きいようです。