私は現在を読んでいます。JavaScript:良い部品と私は "文法"の図を理解するのに苦労しています。このjavascriptの図を読むにはどうすればよいですか?
最初のものは、私はそれを読んでどのように非常にわからない空白
で、おそらくいくつかのコードは、私が理解するのに役立ちますか?
先進的な人の助けをありがとう。
私は現在を読んでいます。JavaScript:良い部品と私は "文法"の図を理解するのに苦労しています。このjavascriptの図を読むにはどうすればよいですか?
最初のものは、私はそれを読んでどのように非常にわからない空白
で、おそらくいくつかのコードは、私が理解するのに役立ちますか?
先進的な人の助けをありがとう。
左側のダブルバー( "||")は、関数の "入力"と見なすことができ、右側のダブルバーは "出力"とみなすことができます。したがって、この場合、文字または線が入力であり、二重線間のパスがテストです。文字/行がいずれかのテストによって「空白」とみなされた場合、関数の出力は「真」になり、そうでない場合は「偽」になります。
特に、4番目の経路に従っているとします。このパスでは、最初に「/」、その後に別の「/」、EOL文字までの他の文字が続きます。この場合、コード行が "// example"の場合、出力はtrueになります。
これは助けてくれますが、私は3行目の後についてしまいます。何らかの理由で、私はダイアグラムが/ *// * /の空白を3行目から伝えようとしていると思っていました。 私を助けてくれてありがとう。 – RufioLJ
のように考えると、はパーサーまたは言語であり、文字の入力ストリームを理解するための一連のルールが必要です。
パーサの仕組みを考えれば、JavaScript言語のトークンの構成要素を正確に理解できます。
||
の左端から開始し、右に進みます。カーブが左から始まっていないので、最初のバーの下(始点のすぐ隣)は追跡できません。移動している方向を見てみると、 while
ループ:曲線が(。あなたの現在のディレクトリに続いて)この行の左に由来するため、2番目の行が続くことができる
while (!EOF) {} // While there's still text to parse
この場合-else文を表します
if (char == '/') {} // Forward slash
else if (char == '\n') {} // Line end
else if (char == '\t') {} // Tab
else if (char == ' ') {} // Space
スペース、タブと両方の機能を終了し、すぐにreturn
またはcontinue
のいずれかを終了します。文字がスラッシュである場合は、それは、単一の行(//
)または複数行(/* */
)だかどうかを確認する必要があります:
*char++; // Move to next character
if (char == '*') {} // Multi line
else if (char == '/') {} // Single line
それは行の最後まで読み、続け一行だ場合。複数行の場合は、 '*'の後に '/'が見つかるまで同様の方法で読み込み、次に続行します。
参照する文法図は、パスカル構文を文書化するために広く使用されていました。これは、基本的に、ソースコードがどのように解析されるかのフローチャートです。あなたの例では、「空白」のグラフの各「チャンク」は関数呼び出しのようです。技術的には、再帰的な降下パーサーについて説明しています。
だから、それについて考えての私の方法は次のとおりです。
パーサは、入力ストリームから文字を取得します。だから、スペースが空白、タブ、行末または '/'の文字であれば、空白関数を "試して"試してみましょう。もし見つからなければ、次のステップに進みます。
'/'の場合、次の文字を取得します。それが別の '/'の場合は、行末を取得して 'found'戻り値で終了するまで文字を読み取ります。
次の文字が ''の場合は、 '/'または ''以外の文字を読み取ることになります。
基本的にフローは左から右ですが、行が左にループバックすると繰り返しがあります。これらのダイアグラムについての素敵なことは、いったんそれを理解すると、構文的に正しいコードを素早く簡単に書くことが容易になるということです。そして、あなたは、「フローチャート」に従って、再帰的降下パーサを簡単にコード化することができます。
鉄道線図の読み方を学ぶために
(this answerを参照)、これらの3つの状況のグラフの違いを理解する必要があります。
ゼロ以上、0または1を、1かmore。
これらの相違点を理解するには(図のように)、"左端から開始し、右端までトラックをたどります。"あなたは電車であると想像してください。ちょうど右に曲がり、左に曲がることはできません。
「編集文法」タブでhttp://bottlecaps.de/rr/ によって作成された上の写真は、入力、次の文法:
zeroormore ::= element*
zeroorone ::= element?
oneormore ::= element+
基本的には、スペース、タブ、改行文字は、すべての空白とみなされ、コメントだけでなく、 – Brad
私は、コメント構文が空白と何をしなければならなかったのか把握しようとしていましたが、今はBradの答えで意味があります。 –
今私はちょっと分かります。しかし、構造はどうですか?まだ次のセクションの例とちょっと混乱しています:/文法の章をスキップしてオブジェクトを使うべきですか? – RufioLJ