 
[例題のプログラミング言語の文法]
言語処理プログラムで最初に行うのは,1文を取り出す処理,
すなわち1文を識別します。
言語によっては,
■1行の中に複数の文
■2行以上で1文
■プログラムとは関係のない注釈が含まれる
などを処理する必要があります。
文の終わりの識別を,語彙解析の処理途中で行うと,
処理が複雑になってしまいますので,
最初にこの判定を行います。
ただし,文の中には,文字列等も含まれますので,
文字列範囲識別の最低限の処理が必要となります。
[プログラム例]
プログラムはtextBox1に入っているものとしています。
したがって,textBox1のMultiLineプロパティをtrueにしてください。
以下の例では,
行内で文を分離するときは,コロン(:)で区切り,
次の行に継続するときは,アンダーバー(_)を行の最後に付けることにしています。
なお,簡単化のために,注釈に関する処理は行っていません。
もし,必要であれば,注釈が含まれていても良いように
変更してみてください。
(注釈表現の例: ”//”がきたら次の\nまたは\rまで無視する)
public int ptrText;
public string AllText;
private string 文取り出し() //
全ソースの中から1文を取り出す
{
string S="";
while(ptrText<AllText.Length)
{
if(AllText[ptrText]=='\n'||AllText[ptrText]=='\r'){ptrText++;return
S;}
else if(AllText[ptrText]==':')
{ptrText++;return S;}
else if(AllText[ptrText]=='_')
{
ptrText++;
while(ptrText<AllText.Length)
{
if(AllText[ptrText]=='\n'||AllText[ptrText]=='\r')break;
ptrText++;
}
ptrText++;
}
else if(AllText[ptrText]==‘“’)
{ // 文字列内処理
S += AllText[ptrText].ToString();
ptrText++;
while(ptrText<AllText.Length)
{ if(AllText[ptrText]=='\n'||AllText[ptrText]=='\r')
{ MessageBox.Show("ダブルクォーテーション(\")が足りません");
return S;
}
else if(AllText[ptrText]=='"')
{
S += AllText[ptrText].ToString();
ptrText++;
if((ptrText>=AllText.Length)
|| (AllText[ptrText]!='"')) break;
}
S+=AllText[ptrText].ToString();
ptrText++;
}
}
S=S+AllText[ptrText].ToString();
ptrText++;
}
return S;
}
private void 全文取出し() // テキストボックスの内容をソースプログラムとする。
{ AllText=textBox1.Text; ptrText=0;
}
目 次
1.言語プロセッサの処理
2.文の識別
3.語彙解析
4.逆ポーランド記法
5.構文解析とコード生成
6.インタプリタ
ダウンロード
(以下をクリックするとダウンロードできます)
|