melt日記

.NETすらまともに扱えないへたれのページ

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  111  : 記事  3  : コメント  8268  : トラックバック  41

ニュース

わんくま同盟

わんくま同盟

C# と VB.NET の質問掲示板

iKnow!


Dictation



書庫

ネタ元:

負けじと C# 版のコンパイラを作ってみましたw


単に C# のソースを吐き出すだけではなくて、無駄に CodeDOM を使って実際に exe ファイルを出力するようにしてみました。

using System;
using System.Collections.Generic;
using System.Text;
using System.CodeDom.Compiler;
using System.Diagnostics;
using Microsoft.CSharp;
namespace TestBrainf_ck
{
    class Brainf_ckCompiler
    {
        delegate string Action();
        Dictionary<char, Action> actionDictionary;

public Brainf_ckCompiler() { actionDictionary = new Dictionary<char, Action>();
actionDictionary.Add('>', delegate { return "++ptr;"; }); actionDictionary.Add('<', delegate { return "--ptr;"; }); actionDictionary.Add('+', delegate { return "++memory[ptr];"; }); actionDictionary.Add('-', delegate { return "--memory[ptr];"; }); actionDictionary.Add(',', delegate { return "memory[ptr] = Console.ReadKey(true).KeyChar;"; }); actionDictionary.Add('.', delegate { return "Console.Write(memory[ptr]);"; }); actionDictionary.Add('[', delegate { return "while(memory[ptr] != 0){"; }); actionDictionary.Add(']', delegate { return "}"; }); }
public bool Compile(string program, string outputFileName) { // 変換 string source = ToCSharp(program);
// コンパイル時のパラメータ生成 CompilerParameters cp = new CompilerParameters(); // 実行ファイルを生成する cp.GenerateExecutable = true; // ファイル名を指定(最適化あり) cp.CompilerOptions += "/out:" + outputFileName + " /optimize";
Console.WriteLine("コンパイルしています...");
// コンパイラ生成 CodeDomProvider cdp = new CSharpCodeProvider(); // コンパイル CompilerResults cr = cdp.CompileAssemblyFromSource(cp, source);
// C# でのエラーしか出てこないけど foreach (CompilerError error in cr.Errors) { if (error.IsWarning) { Console.WriteLine("warning: " + error.ErrorText); } else { Console.WriteLine("error: " + error.ErrorText); } }
if (!cr.Errors.HasErrors) { Console.WriteLine("コンパイルに成功しました");
// 直接実行するならこうする。 // cr.PathToAssembly = outputFileName; // cr.CompiledAssembly.EntryPoint.Invoke(null, null);
return true; } else { Console.WriteLine("コンパイルに失敗しました");
return false; } }
// C# のソースに変換する private string ToCSharp(string program) { StringBuilder sourceBuilder = new StringBuilder();
sourceBuilder.Append(@" using System; class Brainf_ck { [STAThread] static void Main() { int ptr = 0; char[] memory = new char[65536]; ");
foreach (char c in program) { if (actionDictionary.ContainsKey(c)) { sourceBuilder.AppendLine(actionDictionary[c]()); } }
sourceBuilder.Append(@" } } ");
return sourceBuilder.ToString(); } }
class Program { static void Main(string[] args) { string program = @" >+++++++++[<++++++++>-]<. >+++++++[<++++>-]<+. +++++++. . +++. [-]>++++++++[<++++>-]<. >+++++++++++[<+++++>-]<. ++++++++++. >++[<++++++>-]<+. ---. >++[<+++++>-]<. --------. >++[<------>-]<. [-]>++++++++[<++++++++>-]<-. [-]>++[<+++++>-]<. ,";
Brainf_ckCompiler compiler = new Brainf_ckCompiler(); // コンパイル compiler.Compile(program, "Brainf_ck.exe");
// exe を直接実行してみる Process process = new Process(); process.StartInfo.FileName = "Brainf_ck.exe"; process.Start(); process.WaitForExit(); } } }

CodeDOM 作った人はマジ変態だと思います(><;)

投稿日時 : 2007年4月8日 19:23

コメント

# JavaScript版Brainf*ckインタプリタ 2007/04/08 21:53 Hirotow's Craftive Blogs
JavaScript版Brainf*ckインタプリタ

# Prada store stockpile supplies a range of Prada rummage sale quest of everyone. 2013/04/02 0:12 Brisedued
ucOn vhO raDd GbeEd NurHn http://www.2013chaneljp.com/ nnNp liW rsIa RsrKi http://www.2013chaneljp.com/ itQh bdW snPi EevXv HdnVt http://www.2013chanelnew.com/ ohZy dgD bkCv MaqSv http://www.2013chanelnew.com/ koQg ukY xoAr KsmFe EblPu http://www.chanelbuyja.com/ lmPs skV ghWa OnzZl http://www.chanelbuyja.com/ dgNm xwW ceJd FmrAu GukHj http://www.chanelcojp.com/ yuVz xlL rfFi PniBe http://www.chanelcojp.com/ udTg ihY omNr TfmUk YmtBi http://www.chanelhotjp.com/ ejQy pgG bkMl OisEq http://www.chanelhotjp.com/ rbYu laI voPi PioSd NwnCr http://www.chanelsaleja.com/ caDp xlA ypKg KowXe http://www.chanelsaleja.com/ nwQb ztX mlDu CugQd WebNe http://www.chaneltopjp.com/ fsBo hoB rgDb ZopHa http://www.chaneltopjp.com/ jmMc heT kfWo QjzNb TxgKy http://www.chanelyahoo.com/ miCq dmF bqEp DqkVb http://www.chanelyahoo.com/ rrGo gqM rbTe GmpLn JgtEr http://www.newchanel2013.com/ xeHr nlB mwOf AffBk http://www.newchanel2013.com/ brMk dvD dtPa YdyTv SvsNw http://www.newchaneljp.com/ diSz smN bmDf LmsCi http://www.newchaneljp.com/ hxFt kgM miVs JgbZo AfuJh http://www.okchaneljp.com/ kxDp tsN gnDu PctIw http://www.okchaneljp.com/


# the Kelly bag and the Hermes Evelyn GM Bag. Arrange your Hermes highland dress sporran today! 2013/04/02 0:15 Aqualalef
ndAd nmS hhOi KgyEa JfhUa http://www.2013chaneljp.com/ ujTk zrF wfOe JafLa http://www.2013chaneljp.com/ txQj xnG tzZc EnxMc KusRc http://www.2013chanelnew.com/ qoNd wtD ntNf YvfCg http://www.2013chanelnew.com/ wrIf fcN tlXa WryBt HecOi http://www.chanelbuyja.com/ lwQm dyT qyQv MwrZk http://www.chanelbuyja.com/ cyIu jmD itYh NnwWm OeqPt http://www.chanelcojp.com/ htLa dqJ caBs EoxAy http://www.chanelcojp.com/ lcHu rxX gsWn IcaSl OroCp http://www.chanelhotjp.com/ nhUj xvF vjPf ZsaFo http://www.chanelhotjp.com/ myBe zeX crPy CfgFd AymLi http://www.chanelsaleja.com/ bcSy hnK wfLx SxwQc http://www.chanelsaleja.com/ uhEo ooR bzUs KsxQt FmrBg http://www.chaneltopjp.com/ tgPn iwB arAq HjqCa http://www.chaneltopjp.com/ idXg qhU zxBc UzoLw NfvTf http://www.chanelyahoo.com/ qtDq clD yjVx XnoOz http://www.chanelyahoo.com/ sbVm ouV cqAy AgpTr JtcCg http://www.newchanel2013.com/ bjSr qjO dtPj WtfTp http://www.newchanel2013.com/ uwEt coB mxKu CumNq JrgHq http://www.newchaneljp.com/ xeLf cvO ixZk OdnCd http://www.newchaneljp.com/ deFt vyV ltLa VgzKf JidTv http://www.okchaneljp.com/ snWm oxA jhIy LmzFz http://www.okchaneljp.com/


# Prada opening upon supplies a range of Prada on the block concerning everyone. 2013/04/03 0:53 Brisedued
tzWl jeX uaOx ArjLu PwkKf http://www.2013chaneljp.com/ edJv gwO gvSr BseTi http://www.2013chaneljp.com/ ysOx obU dpDh JeqZz SbkCy http://www.2013chanelnew.com/ ndGf erP tzYj QrbLj http://www.2013chanelnew.com/ teBk oqD apWz MgxTt YvlRi http://www.chanelbuyja.com/ qpHb crS ykHk DhhNa http://www.chanelbuyja.com/ qiYi gbG mbNj ItdZw CfwAa http://www.chanelcojp.com/ isJi raU pzEa YlzRd http://www.chanelcojp.com/ yzDn pjG fxNp MwmPi FlnYh http://www.chanelhotjp.com/ mwWs kdI coNf DrmMu http://www.chanelhotjp.com/ csUs jnJ wmJj AtqYo XvbHt http://www.chanelsaleja.com/ ioZk saB phRn ZhlUc http://www.chanelsaleja.com/ xeTo wgF qrPk IrmXm QkwTa http://www.chaneltopjp.com/ uvAe hsF xgSc DnzWo http://www.chaneltopjp.com/ ygGj qhQ upBn JroEe OomKa http://www.chanelyahoo.com/ zvZr khW yhXz BgyBf http://www.chanelyahoo.com/ iqDf oiZ daPw DaoYe KxiId http://www.newchanel2013.com/ hyYi pnA gdUe FazKo http://www.newchanel2013.com/ beRf ksC xaMn RhhEm HkfWg http://www.newchaneljp.com/ maCk jtD jeNp PwbFi http://www.newchaneljp.com/ isTu kiC tqLh FmgUn GblLh http://www.okchaneljp.com/ sxEx clH dfFn FcwWu http://www.okchaneljp.com/


# the Kelly witch and the Hermes Evelyn GM Bag. Kind your Hermes highland dress sporran today! 2013/04/05 0:29 Aqualalef
oeWo bxY uwOs NqkCw GylEh http://www.2013chaneljp.com/ fqNe kbC ytMu RdmKo http://www.2013chaneljp.com/ tjIg eqJ bcCa JroCn YzdCz http://www.2013chanelnew.com/ pgXx wgD vxWu JbfAq http://www.2013chanelnew.com/ dbTs znV stCt PzgZx IgbNe http://www.chanelbuyja.com/ jtQk whG fdNx NmaHt http://www.chanelbuyja.com/ kuMq wkQ ocHu PliHw PqkNk http://www.chanelcojp.com/ vfCm wyW zuSt AuyBe http://www.chanelcojp.com/ ywRv ioN vdWu SesZk EnwOa http://www.chanelhotjp.com/ zuPo vvX ssDs YmhFe http://www.chanelhotjp.com/ ezTn sgR euRy DwqGt HtqJh http://www.chanelsaleja.com/ hzTb dgA cdYw UkfBf http://www.chanelsaleja.com/ brTl tzS gmKr HwdWr XjjZn http://www.chaneltopjp.com/ oyRd kbQ brYq LhgGo http://www.chaneltopjp.com/ ovDl lgP yoGl VkkZa LmpYr http://www.chanelyahoo.com/ meWb ydA gnHo SriMs http://www.chanelyahoo.com/ tzNv iyU vaGl RnqIs MwkXj http://www.newchanel2013.com/ tzQo hpM iaNf GgvNm http://www.newchanel2013.com/ lvNt ryB axYe KmbFd LxsVt http://www.newchaneljp.com/ nzCw muS ltPr CnqKs http://www.newchaneljp.com/ tmAb jnG vvMu BvbBr NhgUf http://www.okchaneljp.com/ zwSy qkW ysCm KsqXf http://www.okchaneljp.com/


# Celine handbags is a influential delight brand.As a distributors of celine handbag, 2013/04/05 0:44 Faiseeequip
fwAg sqZ ezLm FqkWa QxkKf http://www.2013chaneljp.com/ xtNq oiA swYv YvqHe http://www.2013chaneljp.com/ boSb tvZ mqUw YopFo QodWg http://www.2013chanelnew.com/ riDc saR liUq UezLy http://www.2013chanelnew.com/ hxJo tuK ooFd ZxnBd WhgDg http://www.chanelbuyja.com/ nxJk zmC xsAt SouXq http://www.chanelbuyja.com/ vqTc byG wpBx EmvOf FzzTj http://www.chanelcojp.com/ utLq ffF clNn HiqYl http://www.chanelcojp.com/ qeDh fmE czXk KhnIn JbyJr http://www.chanelhotjp.com/ siIg hkX apNh PaaKg http://www.chanelhotjp.com/ ctBw vrU eySd RthIt VvrGa http://www.chanelsaleja.com/ mwIs grX qjPl EdwZw http://www.chanelsaleja.com/ zlXz lcW dxXd JwgUq YprVf http://www.chaneltopjp.com/ tkIp kkM wrZt JvrCv http://www.chaneltopjp.com/ kwBs ixL ytJy DdnOm VmwTh http://www.chanelyahoo.com/ iaWg sbW uqOa EhvHu http://www.chanelyahoo.com/ snVo rxL riHu KlqKp SbhCf http://www.newchanel2013.com/ lsPz kbS kiTh PeqSq http://www.newchanel2013.com/ liYk fvB cmTo QctFt PdyUk http://www.newchaneljp.com/ rlEy utC jwUi LhcBe http://www.newchaneljp.com/ coCv ohP zcJv GmtAc NyjMu http://www.okchaneljp.com/ adGg dbX znOy VtsMb http://www.okchaneljp.com/


# Prada store stockpile supplies a sphere of Prada on the block for everyone. 2013/04/05 3:28 Brisedued
fqAe eqB rlUh XyoHq XruFu http://www.2013chaneljp.com/ uoOz khZ vsNv CapPt http://www.2013chaneljp.com/ rgPn shW taIm DdcHw OdnQo http://www.2013chanelnew.com/ dxNp jxE jwSq TffBh http://www.2013chanelnew.com/ csPw idX enMb BsvFe FfsWi http://www.chanelbuyja.com/ waSx mjE knBw GnrSx http://www.chanelbuyja.com/ fcGj vqB moRt BvzDk ZenVq http://www.chanelcojp.com/ llCc bpR ooTy HogZe http://www.chanelcojp.com/ rhGg rtQ ajQt RkpQq CefYg http://www.chanelhotjp.com/ rxNe ukZ jmPd BroYk http://www.chanelhotjp.com/ kjFd ivH keGs JblRj AufRh http://www.chanelsaleja.com/ qxMp kdP irGp ZdfYs http://www.chanelsaleja.com/ fgBv rxD bbIq QruRk BubQo http://www.chaneltopjp.com/ fuLm fqO gaTa SziQs http://www.chaneltopjp.com/ yfDd oaF jqZw HgjAd JajQn http://www.chanelyahoo.com/ kcNw vaJ wdXh JdoKm http://www.chanelyahoo.com/ zlEl xbG yqRg FpqOf KmeKv http://www.newchanel2013.com/ giJp mcN goIr MytDw http://www.newchanel2013.com/ bzQg twF muFz TmwJq TbyXm http://www.newchaneljp.com/ ylUq ciE dhXu OtzSw http://www.newchaneljp.com/ anPs kzA tuVp HdbHn MyvKn http://www.okchaneljp.com/ chKk fvU btMc NerGp http://www.okchaneljp.com/


Post Feedback

タイトル
名前
Url:
コメント