tiny Cについて

この講義では、具体的なコードを解説しながら、講義を進めていく。 コードの例として使うのがC言語風の極簡単なプログラミング言語tiny Cであ る。講義の中では、tiny Cに対して

を紹介する。

tiny Cの言語仕様

以下に、tiny Cの言語仕様を示す。

以下に、tiny-Cで書いた 0から、10までの加算し、それをプリントするプログ ラムを示す。
main()
{
    var i,s;
    s = 0;
    i = 0; 
    while(i < 10){
	s = s + i;
	i = i + 1;
    }
    println("s = %d",s);
}
配列と関数を使う場合には、以下のようにして使う。
var A[10];

main()
{
    var i;
    for(i = 0; i < 10; i = i + 1) A[i] = i;
    println("s = %d",arraySum(A,10));
}

arraySum(a,n)
{
    var i,s;
    s = 0;
    for(i = 0; i < 10; i = i + 1) s = s + a[i];
    return s;
}
なお、for文については、作っていないので注意。この他にも、演算子など必要な機能に ついては各自演習で作ること。

tiny Cの文法

以下に、簡単なBNF書式での文法を示す。

tiny Cの文法
program :=  {external_definition}*

external_definition:=
	  function_name '(' [ parameter {',' parameter}* ] ')' compound_statement
	| VAR variable_name ['=' expr] ';'
	| VAR array_name '[' expr ']' ';'

compound_statement:=
        '{' [local_variable_declaration] {statement}* '}'

local_variable_declaration: = 
         VAR variable_name [ {',' variable_name}* ] ';'

statement :=
	 expr ';'
	| compound_statement
	| IF '(' expr ')' statement [ ELSE statement ]
	| RETURN [expr ] ';'
	| WHILE '(' expr ')' statement
	| FOR '(' expr ';' expr ';' expr ')' statement

expr:= 	 primary_expr
	| variable_name '=' expr
	| array_name '[' expr ']' '=' expr
	| expr '+' expr
	| expr '-' expr
	| expr '*' expr
	| expr '<' expr
	| expr '>' expr

primary_expr:=
	  variable_name
	| NUMBER
	| STRING
	| array_name '[' expr ']'
	| function_name '(' expr [{',' expr}*] ')'
	| function_name '(' ')'
	| '(' expr ')'
	| PRINTLN  '(' STRING ',' expr ')'

ソースコード

注意:このソースコードは、完全ではない。説明のためにいろいろと簡単化し てある。「正しいプログラムは正しく」動作するが、間違ったプログラムにつ いてのチェックは完全ではない。