ページ 11

c言語のソースをスクリプト言語で処理する

Posted: 2015年4月13日(月) 20:29
by lbfuvab
環境はWin7 Pro、VC++ 2008Express editonです。
VC++を使ってはいますがほぼc言語しか分かっていません。

現在、タイトルの様な事を考えています。
というのも、今、割と速度が必要なプログラムを書いておりジャンプテーブル等をゴリゴリを使っているのですが、
似たような関数を何十個と書いていくのが割と辛いのです。
今回は結局、その部分を出力するプログラムもc言語で書いたのですが、文字列の処理がやはりc言語では辛かったので
次からは別の言語にしたいのですが、どの言語がこの様な用途に向いているのかが分かりません。

欲しい特徴は
・c言語のソース中にスクリプト言語の処理部分を埋め込める
・文字列処理が強い、少なくとも簡単な正規表現が使える
・タダで入手できる
です。

この様な場合、どの様なスクリプト言語を使うのが適切なのでしょうか?

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月13日(月) 21:02
by h2so5
よく使われるのはLuaです。

正規表現もこれくらいのものなら使えます。
http://www.lua.org/pil/20.2.html

もう少し高級なものが欲しいならmrubyもおすすめです。

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月13日(月) 23:32
by softya(ソフト屋)
私もLua言語推薦。

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月14日(火) 00:47
by lbfuvab
うーん、なんか違う気がします。

c言語の中からスクリプト言語を呼びたいのではなくて、「スクリプト言語でc言語のソースを作らせる」といった方が正しいのかもしれないです。
陥っていた状況としては、
ある7x7の盤を持ったゲームの思考エンジンをビットボードを使って実装している時に49マス分のマクロを用意しないといけなかったけれど、手打ちするのが酷く面倒
という状況でした。

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月14日(火) 00:54
by softya(ソフト屋)
そういうのならスクリプト言語に限定する理由がないのでは? コンパイラ言語で構わないですよね。
JavaでもC#でもVBAでも出来ます。Lua言語の単体で動くものもあります。
スクリプトにこだわるならVBScriptでも出来ます。

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月14日(火) 00:58
by みけCAT
lbfuvab さんが書きました:陥っていた状況としては、
ある7x7の盤を持ったゲームの思考エンジンをビットボードを使って実装している時に49マス分のマクロを用意しないといけなかったけれど、手打ちするのが酷く面倒
という状況でした。
その大量のマクロは本当に必要なのですか?
どのような実装かはわかりませんが、マクロをプログラムで生成できるのであれば、そもそもマクロに積むデータを計算するプログラムを直接書くことはできないのですか?


【追記】速度が必要ということですね。すみません。

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月14日(火) 01:03
by みけCAT
lbfuvab さんが書きました:c言語のソース中にスクリプト言語の処理部分を埋め込める
PHPかな…

例:
test.php

コード:

#include <stdio.h>

int main(void) {
<?php
	for($i=0;$i<100;$i++) {
		printf("\tputs(\"%d\");\n",$i);
	}
?>
	return 0;
}
コンパイル方法

コード:

php test.php | gcc -xc -o test -

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月14日(火) 01:39
by lbfuvab
これです、これです、こういうのです!
こういうのが欲しかったんです!
本当にありがとうございます。
今からPHPの勉強してきます!


また、教えていただいたLuaも今回は使えなさそうですが、これはこれで便利そうなので勉強してみますね。

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月14日(火) 16:53
by YuO
解決となっていますが,VC++でも一応T4 Templateが利用可能です。
CODEXPERT - CODEXPERT: T4 in Visual C++

コード:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ output extension=".cpp" #>
#include <iostream>

int main (void)
{
<#
	for (int i = 50; i < 100; ++i)
	{
#>	std::cout << <#= i #> << std::endl;
<#
	}
#>	return 0;
}
から

コード:

#include <iostream>

int main (void)
{
	std::cout << 50 << std::endl;
	std::cout << 51 << std::endl;
	std::cout << 52 << std::endl;
	std::cout << 53 << std::endl;
	std::cout << 54 << std::endl;
	std::cout << 55 << std::endl;
	std::cout << 56 << std::endl;
	std::cout << 57 << std::endl;
	std::cout << 58 << std::endl;
	std::cout << 59 << std::endl;
	std::cout << 60 << std::endl;
	std::cout << 61 << std::endl;
	std::cout << 62 << std::endl;
	std::cout << 63 << std::endl;
	std::cout << 64 << std::endl;
	std::cout << 65 << std::endl;
	std::cout << 66 << std::endl;
	std::cout << 67 << std::endl;
	std::cout << 68 << std::endl;
	std::cout << 69 << std::endl;
	std::cout << 70 << std::endl;
	std::cout << 71 << std::endl;
	std::cout << 72 << std::endl;
	std::cout << 73 << std::endl;
	std::cout << 74 << std::endl;
	std::cout << 75 << std::endl;
	std::cout << 76 << std::endl;
	std::cout << 77 << std::endl;
	std::cout << 78 << std::endl;
	std::cout << 79 << std::endl;
	std::cout << 80 << std::endl;
	std::cout << 81 << std::endl;
	std::cout << 82 << std::endl;
	std::cout << 83 << std::endl;
	std::cout << 84 << std::endl;
	std::cout << 85 << std::endl;
	std::cout << 86 << std::endl;
	std::cout << 87 << std::endl;
	std::cout << 88 << std::endl;
	std::cout << 89 << std::endl;
	std::cout << 90 << std::endl;
	std::cout << 91 << std::endl;
	std::cout << 92 << std::endl;
	std::cout << 93 << std::endl;
	std::cout << 94 << std::endl;
	std::cout << 95 << std::endl;
	std::cout << 96 << std::endl;
	std::cout << 97 << std::endl;
	std::cout << 98 << std::endl;
	std::cout << 99 << std::endl;
	return 0;
}
が生成され,実行もできます。
C#やVBと違って,IDEサポートが効かないのでテンプレートの展開がビルド時まで遅延する,T4の言語にC++がないのでテンプレートを別言語でかかないといけない,という問題点はありますが……。

Re: c言語のソースをスクリプト言語で処理する

Posted: 2015年4月16日(木) 03:20
by lbfuvab
こういうのもあるんですね。
これについても色々調べてみます。