2.3 形式言語のモデル化 (1)メタ言語(metalanguage) ■言語を定義する言語=メタ言語 ①バッカス記法、BN記法(Buckus-naur Form), BNF ②構文図(syntax diagram) ③COBOL記法 ④正規表現 (2)バッカス記法 ■数字が0~9、英字がA~Z, a~z <数字>::=0|1|2|3|4|5|6|7|8|9 <英字>::=A|B|C|D|E|F|G|H|I|J|K|L|M| N|O|P|Q|R|S|T|U|V|W|X|Y|Z| a|b|c|d|e|f|g|h|i|j|k|l|m| n|o|p|q|r|s|t|u|v|w|x|y|z バッカス記法その他の例(その1) ■識別子(変数名や関数名) <識別子>::=<英字>|<英字><英数字列> <英数字>::=<英字>|<数字> <英数字列>::=<英数字>| <英数字> <英数字列> 【識別子の例】 A B x z <英字> AA Ab AZ <英字><英数字列>→<英字><英数字>→<英字><英数字> C2 Z3 X6 <英字><英数字列>→<英字><英数字>→<英字><数字> AB1 MY8 <英字><英数字列>→<英字><英数字><英数字列> →<英字><英字><英数字列>→<英字><英字><英数字> →<英字><英字><数字> バッカス記法その他の例(その2) ■if文(C) <if文>::=if(論理式)<ブロック>| if(論理式)<ブロック>else <ブロック> <複文>::=<文>|<文><複文> <ブロック>::=<文>|{<複文>} バッカス記法の論理式としての解釈 ■識別子(Prolog表現) 識別子([A]):=英字(A). 識別子([A|LL]:=英字(A),英数字列(LL). 英数字(A):=英字(A). 英数字(A):=数字(A). 英数字列([A]):=英数字(A). 英数字列([A|LL]):=英数字(A),英数字列(LL) 数字(‘0’). 数字(‘1’). ・ ・ ・ 数字(‘9’). 数字(‘A’). 数字(‘B’). ・ ・ ・ 数字(‘Z’). 数字(‘a’). 数字(‘b’). ・ ・ ・ 数字(‘z’). バッカス記法の特徴 【長所】 言語仕様を厳密に定義するのに適している。 【短所】 右辺に同じような表現が多数出てくる場合が あり、見づらくなることがある。 (3)構文図 ■文法を図式的に表現する 識別子 英字 英字 数字 ■If文 構文図の例 If文 if( 式 ) else 文 文 (4)正規表現 記号(Symbol) : アルファベットの各記号aについて文字aだけを含 む言語 選択(Alternation) : 2つの正規表現AとBが与えられたとき、A | B は 「AまたはB」を表す。 連接(Concatenation) : 2つの正規表現AとBが与えられたとき、A・B は 「AとBが連続する」ことを表す。 空(ε) : 正規表現εは「空の文字列」だけを含むことを表 す。 反復(Repetition) : 正規表現A*は「Aのゼロ個以上の連接からなる 文字列。正規表現A+は「Aの1個以上の連接か らなる文字列 すなわち A*=(A+|ε) また、{ 0|1|2|3|4|5|6|7|8|9 } をA=[0-9]のように表記することもある。 正規表現のあいまいさの排除 ■最長一致(Longest Match) 正規表現に一致する入力の部分文字列のうち最長の文字 列を次のトークンにする ■優先規則(Rule Priority) 最長部分文字列のうち最初に一致する表現がそのトークン を決定する。 【例】 if5 : 最長一致により識別子、 if : 優先規則により予約語
© Copyright 2025 ExpyDoc