構文図(または鉄道図)は、文脈自由文法を表現する方法です。これらは、メタ言語としてのバッカス・ナウア記法、EBNF、拡張バッカス・ナウア記法、およびその他のテキストベースの文法のグラフィカルな代替手段です。構文図を使用した初期の書籍には、ニクラウス・ヴィルト著の「Pascal User Manual」[ 1 ](図は47ページから始まります)やバロウズCANDEマニュアル[ 2 ]などがあります。コンパイル分野では、BNFやその派生形のようなテキスト表現が一般的に好まれます。BNFはテキストベースであり、コンパイラ開発者やパーサー生成者によって使用されます。鉄道図は視覚的であり、一般の人にも理解しやすく、グラフィックデザインに組み込まれることもあります。JSONデータ交換フォーマットを定義する標準的なソースは、これらの図の現代における一般的な使用例のもう1つです。
文法の表現は、構文図の集合です。各図は、処理における「非終端」段階を定義します。言語を定義する主要な図があり、それは次のように定義されます。言語に属する単語は、主要な図においてパスを記述する必要があります。
各図には、始点と終点があります。この図は、他の非終端点や終端点を経由することで、これら2点間の可能な経路を示しています。従来、終端点は丸い箱で、非終端点は長方形の箱で表されてきましたが、公式な標準はありません。
ここでは、さまざまな文法形式における算術式を例として取り上げます。
BNF:
<式> ::= <項> | <項> "+" <式> <項> ::= <因子> | <因子> "*" <項> <因子> ::= <定数> | <変数> | "(" <式> ")" <変数> ::= "x" | "y" | "z" <定数> ::= <数字> | <数字> <定数> <数字> ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" EBNF:
式=項、[ "+" 、式];項 =因子、[ "*" 、項];因子 =定数|変数| "(" 、式、")" ;変数 = "x" | "y" | "z" ;定数 =数字、{定数};数字 = "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ;ABNF:
式=項[ "+"式]項=因子[ "*"項]因子=定数/変数/ "("式")"変数= "x" / "y" / "z"定数= 1 *桁桁= "0" / "1" / "2" / "3" / "4" / "5" / "6" / "7" / "8" / "9"ABNF は範囲もサポートしていますが、他の例との一貫性を保つため、ここでは使用していません。DIGIT=%x30-39
Red(プログラミング言語)構文解析方言:
赤[タイトル: "Parse Dialect" ]式: [項オプション[ "+"式]]項: [因子オプション[ "*"項]]因子: [定数|変数| "("式")" ]変数: [ "x" | "y" | "z" ]定数: [何らかの数字]数字: [ "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9" ]この形式は範囲もサポートしていますが、他の例との一貫性を保つため、ここでは使用していません。digit:charset[#"0"-#"9"]
例示文法の構文図の一例を以下に示します。テキストベースの文法の構文は異なりますが、メタ言語であるため、構文図はすべて同じにすることができます。

注:最初のリンクは、サーバーがドメイン外からアクセスをブロックする場合がありますが、archive.orgで閲覧可能です。このファイルはstandardpascal.orgにもミラーリングされています。