YouTube

Got a YouTube account?

New: enable viewer-created translations and captions on your YouTube channel!

Japanese subtitles

← 05xps-04 Parsing Javascript Statements Solution

Get Embed Code
3 Languages

Showing Revision 1 created 10/23/2014 by Udacity.

  1. この問題では JavaScript構文解析器の
    大部分を作ります
  2. 特にJavaScriptのステートメントについて
    見ていきます
  3. 簡単にするために
    6種類の文だけについて考えます
  4. if文には基本的によくある
    if-then文とif-then-else文です
  5. つまり次のように書かれた
    JavaScriptの文を扱います
  6. elseにも内容があるタイプです
  7. if-then文はこの部分だけで
  8. if-then-elseは このすべてを扱います
  9. さらに代入も行います
    x=5のようなものです
  10. JavaScriptでのreturn文の例は
  11. このようにreturnという言葉のあとに
    式が来ます
  12. ここでは式はただの5です 2つ残っています
  13. 1つは宣言で
  14. varキーワードを使い
    この場合 変数xを宣言して5を代入しています
  15. このあとで5を代入するだけのものとは違います
  16. 最後に扱うのは ただの式文です
  17. JavaScriptのコードでは
  18. コードの途中にただの式を書くことができます
  19. この中身の代わりに
    5とだけ書くことができるということです
  20. これは何もしませんが
  21. 数字の5で れっきとしたJavaScriptの構文です
  22. これはプログラムの始めに与えられた
    規則を追えば簡単にできます
  23. IDEに入って1つずつ行っていきましょう
  24. 問題を解くためにインタプリタを準備しました
  25. すでに関数の規則は書いてあります
  26. これをコードで書いていきます
  27. 構文解析器に使う非終端記号elementを
  28. functionとして構文解析する関数と名づけます
  29. 最初に書くのは
  30. 構文解析器にこの規則を教える文字列です
  31. これでelementが終端記号の
  32. FUNCTION、IDENTIFIER、
  33. LPAREN、optparams、RPARENと
  34. 複文が続くものに書き換えられると示します
  35. これが一致すると
  36. こういった要素を含むタプルとして
  37. “function”という言葉とともに返します
  38. 関数名IDENTIFIERの値で
    省略可能な引数optparamsは4番目で
  39. 6番は複文のcompounssになります
  40. elementはただの文でもよく
  41. 何かの文と そのあとに続くセミコロンです
  42. これのタプルは“statement”という文字列と
  43. statementの中身を含みます
  44. ここにoptparamasの構文を示す
    2つの規則を書きました
  45. 名前の通り引数は省略可能ですから
  46. optparamsは何もなしに
    書き換えられることもあります
  47. あるいは引数の列になって
  48. 識別子のあとにコンマと他の引数が続くものが
    引数の列となったり
  49. もしくは 識別子だけで最後の引数となり得ます
  50. この識別子をリストにしている点に
    注意してください
  51. 引数は1つでも 常にリストだからです
  52. 複文は文の列で
  53. 中括弧に挟まれています
  54. 規則では 文は空でもよいので
  55. 左右の中括弧の間が空にもなり得ます
  56. あるいは1つの文と
    それに続く他の文にもなれます
  57. 今度は文を定義します
  58. ifから始めましょう
  59. if文がある時は 構文木のタプルには
  60. 最初にif文であることを示す文字列を入れます
  61. 2番目はif文のexpを入れ
  62. 最後はthenに含まれる複文を加えます
  63. if-then-elseでも非常に似た構造を作りますが
  64. expがTrueとならなかった時に行う
  65. elseの複文を最後に加えるところが違います
  66. ここで代入を定義します
  67. IDENTIFIERがあり 等号があり
  68. そして5のようなexpがあり
  69. 構文解析木には代入であることを示す“assign”と
  70. 代入するexpを加えます
  71. return文については
  72. ただreturnと返す式で木を作ります
  73. 変数宣言にはvariableではなく
    varというキーワードを使い
  74. varのあとに識別子が来て
    等号と式が続くので
  75. 木には“var”と識別子と式を入れます
  76. もう少し具体的に説明すると
  77. このような文があったとすると
  78. 構文木に渡されるタプルは
    (“var”,x,5)となります
  79. 最後に文はexpでもあると言えますが
  80. expについてはまだ定義しておらず
    次の問題に残しておきます
  81. 全部合わせると
    JavaScriptの構文解析器がほとんどできました
  82. 最低でも文を扱う部分はできました