Этот материал находится в платной подписке. Оформи премиум подписку и смотри или слушай Compilers, Interpreters and Formal Languages, а также все другие курсы, прямо сейчас!
Премиум
  1. Урок 1. 00:14:35
    Motivations & Learning Outcomes
  2. Урок 2. 00:02:59
    How to Take this Course
  3. Урок 3. 00:06:47
    Compilers as Translators
  4. Урок 4. 00:11:28
    CPU Components
  5. Урок 5. 00:10:00
    Opcodes & Instructions
  6. Урок 6. 00:05:32
    Stack Push & Pop
  7. Урок 7. 00:15:11
    Control Flow
  8. Урок 8. 00:11:10
    What is a Program?
  9. Урок 9. 00:05:23
    Tokens & Lexemes
  10. Урок 10. 00:17:00
    Syntax Tree
  11. Урок 11. 00:09:50
    Setting Up our Project Folder
  12. Урок 12. 00:02:58
    Configuring Python on Windows
  13. Урок 13. 00:01:25
    Makefile
  14. Урок 14. 00:03:22
    Adding Token & Lexer Files
  15. Урок 15. 00:11:33
    Simple Scanning Algorithm
  16. Урок 16. 00:11:54
    Single-Character Tokens
  17. Урок 17. 00:09:38
    Ignoring Whitespace & Comments
  18. Урок 18. 00:05:08
    Scanning Equals & Not Equals
  19. Урок 19. 00:06:24
    Scanning Two-Char Tokens
  20. Урок 20. 00:13:22
    Scanning Numbers
  21. Урок 21. 00:09:14
    Scanning Strings & Identifiers
  22. Урок 22. 00:04:56
    Identifying Keywords
  23. Урок 23. 00:05:13
    Scanning -- as Line Comment
  24. Урок 24. 00:01:58
    Multiline Comments
  25. Урок 25. 00:05:44
    Syntax Analysis
  26. Урок 26. 00:17:46
    Context-Free Grammars & BNF
  27. Урок 27. 00:13:56
    Grammar for Simple Expressions
  28. Урок 28. 00:19:36
    A Model for AST Nodes
  29. Урок 29. 00:14:30
    Recursive Descent Parsing
  30. Урок 30. 00:05:44
    Parser Helper Functions (Exercise)
  31. Урок 31. 00:11:41
    AST of a Simple Expression
  32. Урок 32. 00:03:16
    Pretty AST Printing (Exercise)
  33. Урок 33. 00:09:20
    AST Printing & Polish Notation
  34. Урок 34. 00:03:33
    Terminal Colors & ANSI Escape Codes
  35. Урок 35. 00:10:39
    Standardizing Errors Messages
  36. Урок 36. 00:07:11
    Storing Line Numbers in Nodes
  37. Урок 37. 00:04:59
    Renaming Term & Factor
  38. Урок 38. 00:07:47
    A Tree-Walking Interpreter
  39. Урок 39. 00:16:23
    Coding a Simple Tree-Walking Interpreter
  40. Урок 40. 00:02:52
    No Signed Number Tokens?
  41. Урок 41. 00:10:24
    Pinky Language Data Types
  42. Урок 42. 00:14:03
    Dynamic Types at Runtime
  43. Урок 43. 00:08:34
    Runtime Type Checks
  44. Урок 44. 00:08:57
    Parsing Equality & Comparison (Exercise)
  45. Урок 45. 00:10:48
    Parsing Equality & Comparison Operators
  46. Урок 46. 00:07:50
    Exponent Associativity
  47. Урок 47. 00:03:33
    Exponent & Unary Minus Precedence
  48. Урок 48. 00:07:25
    Logical And & Logical Or
  49. Урок 49. 00:12:46
    Short-Circuit Evaluation
  50. Урок 50. 00:13:21
    Testing Expressions
  51. Урок 51. 00:03:24
    REPL
  52. Урок 52. 00:11:56
    Alphabets, Languages, & Grammars
  53. Урок 53. 00:14:43
    Chomsky Grammar Hierarchy
  54. Урок 54. 00:14:03
    A Program as a List of Statements
  55. Урок 55. 00:12:38
    Parsing Print Statements
  56. Урок 56. 00:06:51
    Interpreting Print Statements
  57. Урок 57. 00:01:02
    PrintLn Statements (Exercise)
  58. Урок 58. 00:06:35
    PrintLn Statements & Escape Chars
  59. Урок 59. 00:21:04
    If Statements
  60. Урок 60. 00:16:31
    Identifiers & Assignments
  61. Урок 61. 00:13:01
    Program State & Memory
  62. Урок 62. 00:13:08
    The Environment Class
  63. Урок 63. 00:11:16
    Environment Load & Store (Exercise)
  64. Урок 64. 00:10:53
    Global & Local Variables
  65. Урок 65. 00:02:08
    While Statement (Exercise)
  66. Урок 66. 00:06:43
    While Statements
  67. Урок 67. 00:17:20
    For Statements
  68. Урок 68. 00:07:27
    Stringifying Booleans & Integers
  69. Урок 69. 00:07:52
    Mandelbrot Set (Exercise)
  70. Урок 70. 00:08:25
    Mandelbrot Set Script in Pinky
  71. Урок 71. 00:08:03
    Compiler-Compilers
  72. Урок 72. 00:10:28
    Functions in Pinky
  73. Урок 73. 00:14:02
    Function Model
  74. Урок 74. 00:05:49
    Parsing Function Declaration
  75. Урок 75. 00:17:20
    Parsing Function Call
  76. Урок 76. 00:26:35
    Interpreting Function Declaration
  77. Урок 77. 00:09:51
    Interpreting Function Call
  78. Урок 78. 00:03:06
    Expressions as Statements?
  79. Урок 79. 00:01:05
    Max. Number of Params (Exercise)
  80. Урок 80. 00:00:45
    Max. Number of Params
  81. Урок 81. 00:07:20
    Parsing Return Statements
  82. Урок 82. 00:15:58
    Interpreting Return Statements
  83. Урок 83. 00:05:17
    Fixing Params as Local Variables
  84. Урок 84. 00:16:55
    Local Variables & Shadowing
  85. Урок 85. 00:18:12
    Dragon Curve
  86. Урок 86. 00:08:07
    Simplified Cosine & Sine Functions
  87. Урок 87. 00:12:29
    Code Generation & VMs
  88. Урок 88. 00:05:58
    Example of Stack Instructions
  89. Урок 89. 00:10:46
    Adding Classes for Compiler & VM
  90. Урок 90. 00:17:49
    Emitting Push Instructions
  91. Урок 91. 00:08:40
    Emitting BinOp Instructions
  92. Урок 92. 00:02:46
    Exercise: Formatting our Code
  93. Урок 93. 00:03:47
    Formatting our Instructions
  94. Урок 94. 00:08:28
    Emitting UnOp Instructions
  95. Урок 95. 00:04:41
    Step by Step Stack Execution
  96. Урок 96. 00:14:36
    VM Execution
  97. Урок 97. 00:16:42
    VM Expression Evaluation
  98. Урок 98. 00:14:18
    VM Comparison Instructions
  99. Урок 99. 00:12:06
    Generating Code for If Statements
  100. Урок 100. 00:07:36
    Generating Then & Else Labels
  101. Урок 101. 00:10:47
    VM Jumps & Branches
  102. Урок 102. 00:06:26
    String Concat Instruction?
  103. Урок 103. 00:14:27
    Global Memory Load & Store
  104. Урок 104. 00:17:39
    Coding Globals Load & Store
  105. Урок 105. 00:14:58
    Scope Depth
  106. Урок 106. 00:07:37
    Starting & Ending Blocks
  107. Урок 107. 00:17:19
    Local Variables & Stack Slots
  108. Урок 108. 00:21:12
    Local Variables Code Generation
  109. Урок 109. 00:08:56
    Local Variables at Runtime
  110. Урок 110. 00:08:23
    Storing Globals by Slot Number
  111. Урок 111. 00:08:55
    Program Symbols & Debug Info
  112. Урок 112. 00:01:05
    Exercise: While Code Generation
  113. Урок 113. 00:06:02
    Generating Code for While Statements
  114. Урок 114. 00:05:31
    Register vs Stack VMs
  115. Урок 115. 00:10:26
    Register-based Bytecode
  116. Урок 116. 00:10:29
    CPython Bytecode Disassembly
  117. Урок 117. 00:13:15
    Search Locals in Reverse Order
  118. Урок 118. 00:11:56
    Function Code Generation
  119. Урок 119. 00:16:33
    Activation Frames
  120. Урок 120. 00:08:04
    Function Symbol Table
  121. Урок 121. 00:12:47
    Compiling Function Declarations
  122. Урок 122. 00:10:48
    Implementing JSR & RTS Instructions
  123. Урок 123. 00:03:51
    Exercise: Function Parameters
  124. Урок 124. 00:08:22
    Validating Function Arity & Arguments
  125. Урок 125. 00:13:20
    Frame Pointer Offsets
  126. Урок 126. 00:07:36
    Return Statements
  127. Урок 127. 00:14:40
    Removing Inactive Frame Slots
  128. Урок 128. 00:19:12
    Type Systems
  129. Урок 129. 00:20:28
    Type Annotations
  130. Урок 130. 00:13:11
    Shunting Yard for Simple Expressions
  131. Урок 131. 00:05:19
    Exercise: Shunting Yard Evaluation
  132. Урок 132. 00:13:47
    A Simple Shunting Yard Implementation
  133. Урок 133. 00:09:53
    Shunting Yard & Parentheses
  134. Урок 134. 00:04:28
    Shunting Yard & Right-Associativity
  135. Урок 135. 00:13:43
    Pratt Parser
  136. Урок 136. 00:23:11
    NUD, LED, & Binding Powers
  137. Урок 137. 00:11:07
    Example Pratt Parsing Expression
  138. Урок 138. 00:11:47
    Pratt Code (Without Precedence)
  139. Урок 139. 00:08:24
    Pratt Code (Precedence & Parentheses)
  140. Урок 140. 00:08:53
    Pratt Code (Right Associativity)
  141. Урок 141. 00:10:17
    Pratt Code (Prefix Unary Minus)
  142. Урок 142. 00:22:11
    Parsing Expression Grammar
  143. Урок 143. 00:12:12
    Using a PEG Library
  144. Урок 144. 00:10:27
    Optimizations & Transformations
  145. Урок 145. 00:12:17
    Constant Folding & Propagation
  146. Урок 146. 00:05:43
    Algebraic Simplifications
  147. Урок 147. 00:02:58
    Dead Code Elimination
  148. Урок 148. 00:06:14
    Loop Unrolling & Inlining
  149. Урок 149. 00:07:32
    Branch Prediction & Vectorization
  150. Урок 150. 00:11:36
    Tail Call & Peephole Optimization
  151. Урок 151. 00:14:28
    LLVM IR
  152. Урок 152. 00:05:31
    Function Definition in LLVM IR
  153. Урок 153. 00:12:04
    Using Clang to Visualize LLVM IR
  154. Урок 154. 00:12:47
    Integer & Float LLVM Instructions
  155. Урок 155. 00:08:03
    SSA Form & Phi Function
  156. Урок 156. 00:03:11
    LLVM Language Reference Manual
  157. Урок 157. 00:14:47
    LLVM Load & Store Instructions
  158. Урок 158. 00:08:07
    Installing Numba's llvmlite
  159. Урок 159. 00:07:27
    Adding a Module to LLVM
  160. Урок 160. 00:08:36
    Adding a Function to LLVM
  161. Урок 161. 00:08:52
    Loading & Storing Variables to LLVM
  162. Урок 162. 00:06:23
    Calling External C Functions in LLVM
  163. Урок 163. 00:20:27
    Emit LLVM IR for a Subset of Pinky
  164. Урок 164. 00:05:07
    Visiting AST Nodes & Emitting LLVM IR
  165. Урок 165. 00:13:46
    Emitting LLVM IR fadd Instruction
  166. Урок 166. 00:10:35
    Emitting LLVM IR BinOps & UnOps
  167. Урок 167. 00:11:18
    Compiling External C Print Functions
  168. Урок 168. 00:11:28
    LLVM IR Assignments
  169. Урок 169. 00:09:07
    Emitting LLVM IR for If Statements
  170. Урок 170. 00:05:58
    Emitting LLVM IR for While Statements
  171. Урок 171. 00:11:32
    Conclusion & Next Steps