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

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
lbfuvab
記事: 72
登録日時: 9年前

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

#1

投稿記事 by lbfuvab » 5年前

環境はWin7 Pro、VC++ 2008Express editonです。
VC++を使ってはいますがほぼc言語しか分かっていません。

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

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

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

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

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

#2

投稿記事 by h2so5 » 5年前

よく使われるのはLuaです。

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

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#3

投稿記事 by softya(ソフト屋) » 5年前

私もLua言語推薦。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
lbfuvab
記事: 72
登録日時: 9年前

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

#4

投稿記事 by lbfuvab » 5年前

うーん、なんか違う気がします。

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 9年前
住所: 東海地方
連絡を取る:

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

#5

投稿記事 by softya(ソフト屋) » 5年前

そういうのならスクリプト言語に限定する理由がないのでは? コンパイラ言語で構わないですよね。
JavaでもC#でもVBAでも出来ます。Lua言語の単体で動くものもあります。
スクリプトにこだわるならVBScriptでも出来ます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#6

投稿記事 by みけCAT » 5年前

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


【追記】速度が必要ということですね。すみません。
最後に編集したユーザー みけCAT on 2015年4月14日(火) 01:06 [ 編集 1 回目 ]
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
みけCAT
記事: 6247
登録日時: 9年前
住所: 千葉県
連絡を取る:

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

#7

投稿記事 by みけCAT » 5年前

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 -
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
lbfuvab
記事: 72
登録日時: 9年前

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

#8

投稿記事 by lbfuvab » 5年前

これです、これです、こういうのです!
こういうのが欲しかったんです!
本当にありがとうございます。
今からPHPの勉強してきます!


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

YuO
記事: 941
登録日時: 9年前
住所: 東京都世田谷区

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

#9

投稿記事 by YuO » 5年前

解決となっていますが,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++がないのでテンプレートを別言語でかかないといけない,という問題点はありますが……。

アバター
lbfuvab
記事: 72
登録日時: 9年前

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

#10

投稿記事 by lbfuvab » 5年前

こういうのもあるんですね。
これについても色々調べてみます。

閉鎖

“C言語何でも質問掲示板” へ戻る