私は現在Javascript: The Good Partsを読んでいますが、それらの「文法」図を理解するのに苦労しています。
最初のものは空白です
読み方がよくわかりませんが、おそらくいくつかのコードが理解に役立つでしょうか?
上級者の助けをありがとう。
私は現在Javascript: The Good Partsを読んでいますが、それらの「文法」図を理解するのに苦労しています。
最初のものは空白です
読み方がよくわかりませんが、おそらくいくつかのコードが理解に役立つでしょうか?
上級者の助けをありがとう。
一番左から始めて、||
右に進みます。カーブが左(進行方向)から始まっていないため、最初のバー(開始点のすぐ隣)をたどることはできません。カーブがどこから来ているかを見ると、それがwhile
ループ:
while (!EOF) {} // While there's still text to parse
曲線は左から始まっているため、2行目をたどることができます(現在のディレクトリをたどっています)。この行は、次のif-elseステートメントを表しています。
if (char == '/') {} // Forward slash
else if (char == '\n') {} // Line end
else if (char == '\t') {} // Tab
else if (char == ' ') {} // Space
スペース、タブ、および終了行は両方とも、機能を終了し、いずれかreturn
またはcontinue
すぐに終了します。ただし、文字がスラッシュの場合は、1行(//
)または複数行()のどちらであるかを確認する必要があります/* */
。
*char++; // Move to next character
if (char == '*') {} // Multi line
else if (char == '/') {} // Single line
単一行の場合は、行の終わりまで読み取り、続行します。複数行の場合は、「*」の後に「/」が続くまで同様の方法で読み取り、続行します。
左側の二重バー( "||")は関数の「入力」と見なすことができ、右側の二重バーは「出力」と見なすことができます。したがって、この場合、文字または行が入力であり、二重バー間のパスがテストです。いずれかのテストで文字/行が「空白」と見なされた場合、関数の出力は「true」になり、そうでない場合は「false」になります。
特に、4番目のパスをたどるとします。このパスでは、最初に「/」が表示され、次に別の「/」が表示され、その後にEOL文字まで他の文字が表示されます。この場合、コード行が「//例」の場合、出力はtrueになります。
Think about it as if you are the parser or the language, and you need a set of rules to understand the input stream of characters.
By thinking how the parser does, you can understand exactly what constitues the tokens of the JavaScript language.
あなたが参照している文法図は、Pascal 構文を文書化するために広く使用されていました。これは基本的に、ソース コードがどのように解析されるかのフローチャートです。チャートの各「チャンク」、例では「空白」は関数呼び出しのようなものです。技術的には、再帰降下パーサーについて話しています。
したがって、それについての私の考え方は次のとおりです。
パーサーは、入力ストリームから文字を取得します。そのため、空白関数を「試して」、その文字がスペース、タブ、行末、または「/」文字である場合は次のステップに進み、そうでない場合は「見つからない」戻り値で終了します。
'/' の場合は、次の文字を取得します。それが別の '/' である場合、行末になるまで文字を読み取り、'found' 戻り値で終了します。
次の文字が ' ' の場合、'/' や ' ' 以外の文字を読み取ります。など...
基本的に流れは左から右ですが、ラインが左にループする場合は繰り返しになります。これらのダイアグラムの優れた点は、一度コツをつかめば、構文的に正しいコードをすばやく簡単に記述できることです。そして、「フローチャート」に従うことで、再帰降下パーサーをかなり簡単にコーディングできます。