日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年12月27日日曜日

命令構文と関数構文(1): 「文法」と「構文」の違い

先日のエントリ「Fieldコントロール(3):floatField(2)」の「(2)値を変数へ代入」のところで、オンラインヘルプの「戻り値を使用する: 関数構文とバッククォーテーション」にある以下の内容を転載している。

コマンドの関数構文を使用すると、コマンドは値を返します。
命令構文を使用すると、コマンドはスクリプト エディタ(Script Editor)に戻り値を出力するだけで、使用できる戻り値は提供されません。
エクスプレッションで命令構文を使用すると構文エラーの原因となります。


実は、この内容はよく理解出来なかった。
そこで今回、そこにある疑問を解決し、明確に理解できるようにしようと思う。


----------------------------------------
この文章で、まず分からなかったのが
「命令構文」「関数構文」の違い。

同じページの上方に、それぞれの説明が具体例もふくめて書いてあるのだが、今ひとつ頭の中で結びつかない。とくに、「関数構文」の説明は、よくわからなかった。

このオンラインヘルプのページ見出しは「コマンド構文」となっている。
そしてその中の小見出しに「命令構文」とある。

最初に疑問に思ったのは、この二つは同じことではないのか?
ただ日本語の訳で変えているだけではないのか?という疑問だった。
というのが「命令」って英語でいうと「コマンド」でもあるからだ。

そこで、まず、それぞれの表記を英語のオンラインヘルプで確認してみた。
コマンド構文=Command syntax
命令構文=Imperative syntax
関数構文=Function syntax
(ちなみに「フラグ」はflags、「引数」はargumentsである。)

日本語の「命令」は「Command」と訳すことも出来る(goo辞書)が、あえて「Imperative」となっているのは、この言葉が文法的な性質を持っていることを示しているからで、通常は「命令に使われる動詞の形」を示す言葉である。(ワードパワー英英和辞典)

ようするに「Imperative syntax」とは、後に続く単語「Syntax(構文)」が命令文の性質を持っていることを示唆している。
意味的には日本語の「命令」でも良いと思われるが文法的な物につかわれる用語ということだ。
それにしても英語には「命令」を意味する単語が多い、これは命令というものに対してのいろいろなニュアンスをわけて考えるような習慣があるのだろうか?

さて、これで、英語表記では明確に異なっていることがわかった。
「コマンド構文」と「命令構文」は違う単語なのである。


----------------------------------------
(1)構文

実は、ここでもう一つ疑問がでてきた。
それは、「Syntax」という単語だ。
英語で見るまで自分は文法を勉強しているのだと思っていたがSyntaxが「構文」と訳されている。

これは、日本語で「文法」ではなかったか?
なぜわざわざ「構文」となっているのか?
「文法」と「構文」の意味は同じなのか違うのか?

というのも命令構文と関数構文の違いを理解する上で、この言葉「構文」が理解を妨げ、混乱の一因となっているような気がするからだ。

こういった頭の中での些細な混乱が、バタフライエフェクトのようにより大きな問題となり、何か別のことやより高度なことを理解しようとするとき、それをさまたげたり、いっそう混乱をひきおこすことがよくある。
このあたりの些細な疑問というのは人によって違うケースもあるので、明確に理解できている人からすると、何を馬鹿なことにこだわっているのかと思えることもあるだろう。
しかしこのブログは個人的な物、遠慮無く調べていきたい。w

そもそも「Syntax=文法」という考えは、ずっと以前にBasicを勉強していたときに身についた。

昔、Basicでは、入力間違いをすると「文法エラー」と表示されることがあった。
Basicはそのパソコンメーカーによって異なり、「Syntax Error」と表示される機種もあったため、どちらも同じ意味を示していたことから、Syntax=文法と解釈していた。


では、なぜMayaのオンラインヘルプでは「構文」となっているのか?
また「構文」とはどんな意味があるのか?
まずは辞書で「Syntax」の定義を調べてみた。

@IT XML用語辞典
シンタックスとは、構文を意味する。具体的な文字がどのように配列されているかに着目した概念を示す言葉である。

IT用語辞典BINARY
シンタックスとは、もともと「構文」や「統語論」を意味する英語である。
(このページは「シンタックス・エラー」の解説であるが上記のように「シンタックス」の説明が書かれている。また「別名」として「文法エラー」と「構文エラー」の二つがあり、「シンタックス」が両方の意味で使われていることがわかる。)


以上の定義からは、「シンタックス」=「構文」で間違いないことがわかる。

おそらく昔のBasicユーザーには、小中学生も含まれており、英語に親しみのない人にもわかりやすくするためにエラー表記を日本語にしていたのだと思う。
そのときに、翻訳のミスか、ユーザーがプログラミングが初めての人が多いとういことに配慮して一般的にもわかりやすい「文法」という言葉を選んだのかは定かではない。
どちらにしても、これが混乱の源だった。
まぁよくよく考えてみれば、確かに「文法」を英語でいうと「Grammar」であり、「Syntax」ではないので正確な訳ではないことは注意深く調べればわかったかもしれない。



----------------------------------------
2)文法

では「文法」の定義は何か?

wikipedia
文法(ぶんぽう)とは、ある言語において、その言語のより小さな単位を連結してより大きな構造を作る際の規則である。


以上の定義で、なんとなくわかってきたが、もう少し「文法」と「構文」の違いを明確にしておきたいと思う。

面白い物で英語の学習においても同じような疑問を持った人がいて、Yahoo知恵袋で質問していた。
Yahoo知恵袋;「英語の「構文」と「文法」とは何処が、違うのでしょうか?教えて下さい。」
回答:文法とは、語学を分析して、どういうルールで解釈していくのかをまとめたものです。例えばDVDプレーヤー本体が英語とすると、文法は取扱説明書だと思ってください。
構文というのは、その中で具体的に、文法で分析した内容を文章にしてわかりやすく示したものです。

DVDプレーヤーを使ってどうやってDVDを見ればいいのかわかったあなたは、再生ボタンを押してスタートさせますよね。その再生ボタンそのものが構文だと思ってください。
説明書を読んで使い方がわからなくても、ボタンを押したらスタートして見ることができる、というわけです。

個人的には、わかったような今ひとつのような感じだが、
「文法」はそれぞれの単語同志の関係やつながり、機能などを説明した物。
「構文」は、具体的な表記(記号やアルファベット)とその位置などを明確に定めた物
したがって「文法」をしらずとも「構文」がわかっていればとりあえず、プログラムは書ける。
しかしその逆はできない。
ということでよいだろうか。


もうひとつ、信州大学海尻賢二教授による「プログラミング言語論(2009年度)」のシラバスにある「構文と意味」というページが参考になる。
以下に、そのページから一部を引用した。

次の様な表現を考えよう
i = i + 1
この表現が正しいとは何を意味しているか?
例えばi=i+1+は正しくない。この形としての正しさを定める規則が構文規則である

# 文法は正しい文(プログラム)を定義する
# 文法によるプログラムの定義には、語彙、構文、意味という階層がある

余談だがこの言語論、なかなかおもしろそう。まだすべて読んだわけではないので言い切れないですが、先日のエントリ「プログラミングの勉強方に関して(メモ)」で述べた考えをさらにまとめるための助けとなりそうです。


----------------------------------------
まとめ
----------------------------------------
さて「文法」と「構文」の違いについての自分の解釈をまとめてみます。

「文法」は「構文」より広い意味を持ち、「構文」は「文法」に含まれる

「文法」を知らずとも「構文」がわかっていれば、プログラムは書ける。しかしその逆は否。

「構文の間違い」という意味で「文法の間違い」と表記されることがある。

●「文法」はそれぞれの単語(コマンドなど)を使うときに、どういった時に、どういうふうに、どういったことに使い、どういった動作をするのかといったことの決まりである。
「if文は条件式を使って判断し、判定がTrueの場合は、実行文に書かれた内容を実行する、Falseの場合は実行しない」といった内容。

「構文」とは具体的な文字または記号の配列についての決まりである。
「If文において、条件文は「( )」内に表記、実行文は条件文に続けて「{ }」を使って書く、実行文の各行は「;」で区切る。」といった具体的な記述における決まりが「構文」ということだろう。

「構文」は厳格に、正確に理解する必要がある。
「具体的」ということは曖昧さはみとめられないということでもある。


「文法」の定義は上記wikipediaが、自分にとって一番わかりやすかった
その言語のより小さな単位を連結してより大きな構造を作る際の規則である。

「構文」については@IT XML用語辞典が簡潔で分かりやすかった
具体的な文字がどのように配列されているかに着目した概念を示す。

  

0 件のコメント:

コメントを投稿