We are currently in the process of converting the website to the new design. Some pages, like this one, are still broken. We appreciate your patience.
Bitwise»Episode Guide
More Programming & Parsing
?
?

Keyboard Navigation

Global Keys

[, < / ], > Jump to previous / next episode
W, K, P / S, J, N Jump to previous / next marker
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)

Menu toggling

q Quotes r References f Filter y Link c Credits

In-Menu Movement

a
w
s
d
h j k l


Quotes and References Menus

Enter Jump to timecode

Quotes, References and Credits Menus

o Open URL (in new tab)

Filter Menu

x, Space Toggle category and focus next
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus

Filter and Link Menus

z Toggle filter / linking mode

Credits Menu

Enter Open URL (in new tab)
0:10Recap and set the stage for the day, pointing out the homework from yesterday1
🗩
0:10Recap and set the stage for the day, pointing out the homework from yesterday1
🗩
0:10Recap and set the stage for the day, pointing out the homework from yesterday1
🗩
4:27A note on the pull request policy
🗩
4:27A note on the pull request policy
🗩
4:27A note on the pull request policy
🗩
7:01Point out off-stream fixes to xmalloc() and buf_free(), assertion additions to buf_test() and start-end range for everything in the Token struct
📖
7:01Point out off-stream fixes to xmalloc() and buf_free(), assertion additions to buf_test() and start-end range for everything in the Token struct
📖
7:01Point out off-stream fixes to xmalloc() and buf_free(), assertion additions to buf_test() and start-end range for everything in the Token struct
📖
10:01Note the reason for the alphabetical switch statement in next_token()
📖
10:01Note the reason for the alphabetical switch statement in next_token()
📖
10:01Note the reason for the alphabetical switch statement in next_token()
📖
12:28Check out the asm for the switch statement, to illustrate its efficacy over a loop
🏃
12:28Check out the asm for the switch statement, to illustrate its efficacy over a loop
🏃
12:28Check out the asm for the switch statement, to illustrate its efficacy over a loop
🏃
14:47All the C data structures you'll ever need: 1. Stretchy buffers; 2. Pointer / uintptr hash tables; 3. String intern table
🗩
14:47All the C data structures you'll ever need: 1. Stretchy buffers; 2. Pointer / uintptr hash tables; 3. String intern table
🗩
14:47All the C data structures you'll ever need: 1. Stretchy buffers; 2. Pointer / uintptr hash tables; 3. String intern table
🗩
16:47String interning
🗩
16:47String interning
🗩
16:47String interning
🗩
23:13Introduce str_intern_range() to work on a global interning table
23:13Introduce str_intern_range() to work on a global interning table
23:13Introduce str_intern_range() to work on a global interning table
30:36Note the reason for doing *str rather than str[0]
🗩
30:36Note the reason for doing *str rather than str[0]
🗩
30:36Note the reason for doing *str rather than str[0]
🗩
32:12Introduce str_intern() as a slow version
32:12Introduce str_intern() as a slow version
32:12Introduce str_intern() as a slow version
33:18Fix up our buf_push() call in str_intern_range(), with a few words on the C preprocessor's parenthesis counting capabilities
33:18Fix up our buf_push() call in str_intern_range(), with a few words on the C preprocessor's parenthesis counting capabilities
33:18Fix up our buf_push() call in str_intern_range(), with a few words on the C preprocessor's parenthesis counting capabilities
35:13Introduce str_intern_test()
35:13Introduce str_intern_test()
35:13Introduce str_intern_test()
36:15Step through str_intern_range() to see what it does
🏃
36:15Step through str_intern_range() to see what it does
🏃
36:15Step through str_intern_range() to see what it does
🏃
37:10Make str_intern_test() call str_intern() on our two strings on separate lines
37:10Make str_intern_test() call str_intern() on our two strings on separate lines
37:10Make str_intern_test() call str_intern() on our two strings on separate lines
37:47Step in to str_intern_test() to see that str_intern_range() didn't return anything
🏃
37:47Step in to str_intern_test() to see that str_intern_range() didn't return anything
🏃
37:47Step in to str_intern_test() to see that str_intern_range() didn't return anything
🏃
37:52Make str_intern_range() return the str
37:52Make str_intern_range() return the str
37:52Make str_intern_range() return the str
38:30Continue to step through str_intern_test() to see that it works
🏃
38:30Continue to step through str_intern_test() to see that it works
🏃
38:30Continue to step through str_intern_test() to see that it works
🏃
38:39Augment str_intern_test() with more testing
38:39Augment str_intern_test() with more testing
38:39Augment str_intern_test() with more testing
39:19Step through str_intern_test() to see that it works correctly
🏃
39:19Step through str_intern_test() to see that it works correctly
🏃
39:19Step through str_intern_test() to see that it works correctly
🏃
39:26A few words on this ptr testing
🗩
39:26A few words on this ptr testing
🗩
39:26A few words on this ptr testing
🗩
40:50Add a name to the Token struct and duplicate a substring of our test string in lex_test()
40:50Add a name to the Token struct and duplicate a substring of our test string in lex_test()
40:50Add a name to the Token struct and duplicate a substring of our test string in lex_test()
42:29Step in to next_token() and inspect the interned strings
🏃
42:29Step in to next_token() and inspect the interned strings
🏃
42:29Step in to next_token() and inspect the interned strings
🏃
45:02Introduce init_keywords()
45:02Introduce init_keywords()
45:02Introduce init_keywords()
48:11Q&A
🗩
48:11Q&A
🗩
48:11Q&A
🗩
50:15Why are you using string interns?
🗪
50:15Why are you using string interns?
🗪
50:15Why are you using string interns?
🗪
50:56Would you recommend using this technique in most languages, or is it just C?
🗪
50:56Would you recommend using this technique in most languages, or is it just C?
🗪
50:56Would you recommend using this technique in most languages, or is it just C?
🗪
53:41Why not just use a stretchy buffer instead of the intern str stuff?
🗪
53:41Why not just use a stretchy buffer instead of the intern str stuff?
🗪
53:41Why not just use a stretchy buffer instead of the intern str stuff?
🗪
54:37buf[0] is a nonstandard extension
🗪
54:37buf[0] is a nonstandard extension
🗪
54:37buf[0] is a nonstandard extension
🗪
55:36Introduce the standard set of functions for parsing: is_token(), is_token_name(), match_token() and expect_token()
55:36Introduce the standard set of functions for parsing: is_token(), is_token_name(), match_token() and expect_token()
55:36Introduce the standard set of functions for parsing: is_token(), is_token_name(), match_token() and expect_token()
1:01:29Introduce fatal()2
1:01:29Introduce fatal()2
1:01:29Introduce fatal()2
1:05:19Introduce token_kind_name()
1:05:19Introduce token_kind_name()
1:05:19Introduce token_kind_name()
1:09:36Introduce parse_test(), parse_expr() and its layers of accompanying functions, as a usage example of our parser
1:09:36Introduce parse_test(), parse_expr() and its layers of accompanying functions, as a usage example of our parser
1:09:36Introduce parse_test(), parse_expr() and its layers of accompanying functions, as a usage example of our parser
1:23:38Step in to parse_expr() to see what it does
🏃
1:23:38Step in to parse_expr() to see what it does
🏃
1:23:38Step in to parse_expr() to see what it does
🏃
1:24:41Introduce test_parse_expr() and enable parse_test() to perform more tests
1:24:41Introduce test_parse_expr() and enable parse_test() to perform more tests
1:24:41Introduce test_parse_expr() and enable parse_test() to perform more tests
1:26:02Step in to parse_test() to see what it does
🏃
1:26:02Step in to parse_test() to see what it does
🏃
1:26:02Step in to parse_test() to see what it does
🏃
1:26:52Add a test for "!" in parse_test()
1:26:52Add a test for "!" in parse_test()
1:26:52Add a test for "!" in parse_test()
1:27:46Step in to parse_test() and correctly receive the error upon finding the '!' character
🏃
1:27:46Step in to parse_test() and correctly receive the error upon finding the '!' character
🏃
1:27:46Step in to parse_test() and correctly receive the error upon finding the '!' character
🏃
1:28:15Add a test for "(1)" in parse_test()
1:28:15Add a test for "(1)" in parse_test()
1:28:15Add a test for "(1)" in parse_test()
1:28:24Step in to parse_test() to see how that works
🏃
1:28:24Step in to parse_test() to see how that works
🏃
1:28:24Step in to parse_test() to see how that works
🏃
1:29:00Make the parse_expr() functions return their evaluated result
1:29:00Make the parse_expr() functions return their evaluated result
1:29:00Make the parse_expr() functions return their evaluated result
1:34:56Step in to parse_test() to see that it works
🏃
1:34:56Step in to parse_test() to see that it works
🏃
1:34:56Step in to parse_test() to see that it works
🏃
1:35:02Add some precedence, unary and parenthesis checks in parse_test(), according to C's own evaluations
1:35:02Add some precedence, unary and parenthesis checks in parse_test(), according to C's own evaluations
1:35:02Add some precedence, unary and parenthesis checks in parse_test(), according to C's own evaluations
1:39:17Step through parse_test() to see that it does something
🏃
1:39:17Step through parse_test() to see that it does something
🏃
1:39:17Step through parse_test() to see that it does something
🏃
1:39:38Set the homework3
🗩
1:39:38Set the homework3
🗩
1:39:38Set the homework3
🗩
1:45:50Q&A
🗩
1:45:50Q&A
🗩
1:45:50Q&A
🗩
1:46:19nothings2 pervognsen Should the grammar be 'expr2 = expr3 | -expr2' to allow for "- - 5"?
🗪
1:46:19nothings2 pervognsen Should the grammar be 'expr2 = expr3 | -expr2' to allow for "- - 5"?
🗪
1:46:19nothings2 pervognsen Should the grammar be 'expr2 = expr3 | -expr2' to allow for "- - 5"?
🗪
1:46:27Fix parse_expr2() to return -parse_expr2() if it matches the '-' character
1:46:27Fix parse_expr2() to return -parse_expr2() if it matches the '-' character
1:46:27Fix parse_expr2() to return -parse_expr2() if it matches the '-' character
1:48:00The homework seems kind of daunting
🗪
1:48:00The homework seems kind of daunting
🗪
1:48:00The homework seems kind of daunting
🗪
1:49:15xanatos387 pervognsen You've used the phrase "left-fold" several times tonight. What does that refer to?
🗪
1:49:15xanatos387 pervognsen You've used the phrase "left-fold" several times tonight. What does that refer to?
🗪
1:49:15xanatos387 pervognsen You've used the phrase "left-fold" several times tonight. What does that refer to?
🗪
1:53:19elavid gargltk Yes, grammar is broken right now, doesn't use expr3
🗪
1:53:19elavid gargltk Yes, grammar is broken right now, doesn't use expr3
🗪
1:53:19elavid gargltk Yes, grammar is broken right now, doesn't use expr3
🗪
1:54:34A few words on having a finely interleaved debugging and editing flow, in response to a question from CaptainKraft about debugging with GDB on Linux
🗩
1:54:34A few words on having a finely interleaved debugging and editing flow, in response to a question from CaptainKraft about debugging with GDB on Linux
🗩
1:54:34A few words on having a finely interleaved debugging and editing flow, in response to a question from CaptainKraft about debugging with GDB on Linux
🗩
1:55:18There's a typo in the Wirth book4
🗪
1:55:18There's a typo in the Wirth book4
🗪
1:55:18There's a typo in the Wirth book4
🗪
1:57:32A few words on not having solved the entire homework on stream
🗩
1:57:32A few words on not having solved the entire homework on stream
🗩
1:57:32A few words on not having solved the entire homework on stream
🗩
1:59:11teluial pervognsen Also are you going to develop within the VM later on when cross-compiling isn't necessary
🗪
1:59:11teluial pervognsen Also are you going to develop within the VM later on when cross-compiling isn't necessary
🗪
1:59:11teluial pervognsen Also are you going to develop within the VM later on when cross-compiling isn't necessary
🗪
2:00:00Stop the stream
🗩
2:00:00Stop the stream
🗩
2:00:00Stop the stream
🗩