重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

計算式の文字列を外部から渡し、計算結果を返すプログラムを作ろうとしています。
色々調べた結果、パーサーという物があることが分かったのですが、
使い方が分りません。
日本語での良い本(サイト)があれば、教えてください。

A 回答 (4件)

★アドバイス


・過去に似たような質問が別カテゴリでありました。参考に。
 http://oshiete1.goo.ne.jp/qa3495084.html→『数式から不要なカッコを取り除く方法』
 LL法について
 http://ja.wikipedia.org/wiki/LL%E6%B3%95→『LL法』
 構文解析について
 (a)http://ja.wikipedia.org/wiki/%E6%A7%8B%E6%96%87% …→『構文解析』
 (b)http://ja.wikipedia.org/wiki/%E5%86%8D%E5%B8%B0% …→『再帰下降構文解析』
 (b)にはソースが載っています。
・最初は『再帰的な式評価』が簡単だと思います。
 下に紹介する『C言語による実用アルゴリズム入門』もお勧めです。
 基本的にアルゴリズムの本ですが、ここに式評価や簡単な多倍長演算のソースなどが
 載っています。電卓プログラムで参考になる1冊です。ぜひ。どうぞ。

本の紹介:
 (1)http://www.amazon.co.jp/dp/4797328290/→『C言語による実用アルゴリズム入門』
 この本の『Chapter7 式の処理』で
  7.1 トークン解析
  7.2 逆ポーランド記法を使う式の解析
  7.3 逆ポーランド記法の式評価
  7.4 再帰的な方法による式の解析
  7.5 電卓のプログラム
  となっています。
 (2)http://www.amazon.co.jp/dp/4839919232/→『いまどきのプログラム言語の作り方』
 こちらは本格的な書籍です。
・以上。参考に。

参考URL:http://www.amazon.co.jp/dp/4797328290/
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
資料を参考に勉強してみます。

お礼日時:2007/12/05 08:04

下記の本をお勧めします。


ソースコードがついています。
Modula2ですが
C++へのが変更可能です。

マイクロコンピュータのための
「コンパイラ・コンパイラ」
~ コンパイラ自動生成にむけて ~

P.レッヒェンベルク
H.メッセンベック 著
玉井 浩(大妻女子大学教授) 訳

定価:3,990円(本体3,800円+税)
発行:サイエンス社
発行日:1991-02-01
ISBN 978-4-7819-0607-2 / A5判/432頁
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
本屋に行って見てみます。

お礼日時:2007/12/05 08:06

本格的なパーサは、コンパイラやインタプリタなどの言語を作る時に使うのが普通ですね。

関数も無いような簡単な計算式でしたら自力で構文解析プログラムを作ったほうが早いですよ。
こんなのとか↓
http://ruffnex.oc.to/kenji/src/dentaku2.c

たしかにパーサで電卓を作っている例も結構ありますので、挑戦してみるのも良いかもしれません。
yacc/lexというプログラムを使います。
http://kmaebashi.com/programmer/devlang/yacclex. …
こちらの方が覚えることは多いです。

どちらが良いかは、どこまでの機能を作るかで決まります。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
パーサのことを知らなかったので自分で作ろうとしたのですが、
途中で挫折し、色々調べているうちに、パーサにたどり着きました。

if, exp, log, max, min やいくつかのオリジナルの関数などを入れたいと考えています。

お礼日時:2007/12/05 08:01

パーサとは構文解析器のことをいい、


CやC++、Java、XMLなどさまざまな種類あります。
言語仕様にも絡んでくると思います。

計算式というのはどのような仕様なのでしょうか?
とりあえず、どういうものか。
http://ysserve.int-univ.com/sugsi/Lecture/syntco …
    • good
    • 0
この回答へのお礼

早速の回答ありがとうございます。

お礼日時:2007/12/05 07:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!