SyntaxHighlighter

StackEdit CSS

2013年12月2日月曜日

YAMLでプログラムを書いてみる

キーと値を持ついわゆる連想配列にプログラムを書こうというよくわからん言語を考えてみた。名前は、実行可能なhashでXASH(eXecutable hASH)。今、Rubyで組んでる。

例えばFizzBuzzをこんな感じで書ける(予定)

#YAMLで書いた
for: [1..10,
    do: [[i],
        case: [
            [$i, mod, 15, ==, 0], do: [ puts: FizzBuzz ],
            [$i, mod, 15, ==, 0], do: [ puts: Fizz ],
            [$i, mod, 5, ==, 0], do: [ puts: Buzz ],
            do: [ puts: $i ]
        ]
    ]
]

今後仕様が変わる可能性があるが、全部式にしようと思う。なので、ifを始めとする構文も関数にしようとしている。

今、試験勉強期間なのであまりガッツリ実装できないが、一応for、lambda式あたりはできた

つまり、これがちゃんと動く。

- for: [1..10,
    do: [[i],
        print: [[$i, ', ']]
    ]
]

- puts: 

#Python style
- for:
    - 1..10
    - do: 
        - [i]
        - print: [[$i, ', ']]

- puts:

- for: [ array: [Ruby, Python, Perl] ,
    do: [[i],
        print: [[$i, ', ']]
    ]
]

- puts: 

- for:
    - object: { name: long_long_float, age: 9999 }
    - do:
        - [k, v]
        - print: [[$k, ' => ', $v]]
        - puts: 

- puts: 

- for: [hello,
    do: [[c],
        print: [[$c, ', ']]
    ]
]

出力

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 
Ruby, Python, Perl, 
name => long_long_float
age => 9999

h, e, l, l, o, 

前に、Cuickというプログラミング言語を作ったことがあるが、処理の中心がパースだった(パース→AST木作る→C++コードで出力)。今回は文法はYAMLなのでパースは一瞬で楽だが、プログラマにやや易しくないorz…

0 件のコメント:

コメントを投稿