I need to know when do we include "term" and "factor" in the parse tree and how are they used.
@maryelainecaliff3 күн бұрын
That is purely a matter of looking at the grammar. Each parent and its children must match one of the rules for that nonterminal. And reading across the leaves of the tree from left to right, you must have the "sentence" that you're trying to parse. If both of those things are true, you have a correct parse tree.
@NaomyLimatukei14 күн бұрын
Thanks for the video i love this
@lucnguyen454416 күн бұрын
Thank you
@fikernewberhanu920120 күн бұрын
This was great explanation. Thanks for the video. Subscribed right after!
@maryelainecaliff20 күн бұрын
I'm glad you found it helpful, and hope some of the other videos are as well. I also hope to give you some new content eventually.
@abdom.abdellatif480721 күн бұрын
very smooth explanation. thanks, Dr.
@maryelainecaliff21 күн бұрын
Glad it was helpful!
@rhysespieces_23 күн бұрын
You just turned my prof's entire two hour lecture into a fifteen minute video. Thank you so much
@maryelainecaliff22 күн бұрын
I'm glad you found it helpful.
@AlirezaBagheri-j6g24 күн бұрын
I hate BNF.
@maryelainecaliff24 күн бұрын
I'm sorry to hear that. It's a useful formalism.
@JohnSmith-yv5bn27 күн бұрын
At 18:25 we expected the difference between memory addresses in neighboring indexes to be 8 bytes, but looks like the difference between index 1 and 2 is only 2 bytes?
@maryelainecaliff26 күн бұрын
This is a hexadecimal number (base 16), not a decimal number, so the difference is, in fact, 8 bytes.
@smarikabehera9358Ай бұрын
i have my oops exam tmrw, thankyu for this
@maryelainecaliffАй бұрын
Glad you found it helpful.
@AsmaaDiisАй бұрын
I found this video not knowing anything about parse three and guezz what im thrilled getting 2 examples done
@maryelainecaliffАй бұрын
Glad it was helpful.
@juliusgummersbach6391Ай бұрын
This was a great class to refresh my c++ knowledge for my new job. Straight to the point. The timestamps were very helpful to focus on the things I forgot. Thanks a lot!
@maryelainecaliffАй бұрын
I'm glad you found it helpful, and I have to credit one of my former students for adding the timestamps, which I agree are very useful.
@hszr58522 ай бұрын
It is very similar to Context-Free Grammar!
@maryelainecaliff2 ай бұрын
BNF grammars can represent regular, context free, or context sensitive grammars. It's just a different syntax for the grammar that we typically use in theory contexts.
@Oglser2 ай бұрын
Thanks. The only video that actually made sense after 12 hours of studying gibberish
@maryelainecaliff2 ай бұрын
I'm glad you found it helpful.
@hossainratul63442 ай бұрын
thank you
@coroutinedispatcher2 ай бұрын
ahhhh feels like university again
@maryelainecaliff2 ай бұрын
Definitely who it was created for. ;-)
@AlexN20222 ай бұрын
still uncreal why this algorithm is O(N). We have O(N) non-leafs to visit, and each may have to go all the way down to the leaf, which means each may need O(logN) swaps. What's stopping ths from being O(N*logN)?
@maryelainecaliff2 ай бұрын
The basic idea here is that we know that most of our operations are not operating on the whole tree. We have at most N/2 percolate down operations to do. But half of those are constant time operations, guaranteed to require just one comparison, because they are performed on a node whose children are leaves. And half of the remaining are no more than 2 and so on. We can take advantage of that knowledge to work out the math and see that the number of comparisons for the whole process is actually O(n).
@AlexN20222 ай бұрын
@@maryelainecaliff so, N/2 total nodes, comprised of: N/4*1 + N/8*2 + N/16*4.. So all parts of the N/2 set may require up to N/4 operations each. Doesn't look like O(N)
@maryelainecaliff2 ай бұрын
@@AlexN2022 I recommend 2 things. For intuitive understanding, see what happens with worst case situations (form a max heap from an array sorted in a ascending of moderate size and count). For the math, dig up one of the actual formal proofs from a textbook or website. I am not going to repeat that work here.
@kanelupis2 ай бұрын
Underrated series
@maryelainecaliff2 ай бұрын
Thank you.
@VisiArise2 ай бұрын
Ma'am you deserves millions of like from the developer who wannabe switch or learn c++. Thanks
@maryelainecaliff2 ай бұрын
That is kind. I'm glad you found the video helpful.
@tejashiremath34582 ай бұрын
Really Well Explained!
@maryelainecaliff2 ай бұрын
Glad it was helpful!
@wrrsean_alt2 ай бұрын
Very clear. Thanks!
@maryelainecaliff2 ай бұрын
Glad it was helpful!
@anacsgo3 ай бұрын
thank you!!
@maryelainecaliff3 ай бұрын
You're welcome!
@maddiem000323 ай бұрын
this is so helpful thank you! finally understand what flushing the buffer actually means
@maryelainecaliff3 ай бұрын
I'm glad it helped.
@timi_t_codes3 ай бұрын
Excellent video/tutorial! Thanks a lot Dr Califf
@maryelainecaliff3 ай бұрын
Glad you found it helpful.
@kotazkozla2534 ай бұрын
słabe niestety eh duzo szczekania malo robienia
@bishoywesa66854 ай бұрын
hello dear ms mary can i contact you privately - iam a begginner want to find ahelp to be a professional progamer and need a hand of help from you if you dont mind. thanks in advance
@guilhermecampos83134 ай бұрын
Finally someone who doesn't simply say that std::endl flushes the buffer, but explains it in more detail! Thank you very much.
@maryelainecaliff4 ай бұрын
Glad it was helpful!
@dmytroboiko14 ай бұрын
thanks a lot! the applications section is very useful!
@maryelainecaliff4 ай бұрын
I'm glad you found it helpful.
@dmytroboiko14 ай бұрын
This is great explanation! Thank you very much! 🙏
@maryelainecaliff4 ай бұрын
I'm glad you found it helpful.
@ferael00134 ай бұрын
You are an amazing teacher, thank you for this
@maryelainecaliff4 ай бұрын
I'm glad you found it helpful.
@Fuckyourfeelings-x8x4 ай бұрын
very helpful. thank you
@hsoftdev174 ай бұрын
I've coded in C++ but it was ages ago and I've been coding in Java and C# for the last 25 and 15 years respectively. I love this series for all the same reasons as everyone else has said, definitely don't need beginner stuff, just need to understand better how to mentally translate to C++ and to understand the differences. This video says that dynamically allocated arrays are initialized and I'm not sure if it's just different now because of C++20 or something I did wrong, but it doesn't appear to be the case for me. I get some garbage numbers at the beginning of the dynamic and then a pile of zeros instead of it being all zeros like when you showed it. I realize I'm late to this party since all these videos were from a few years ago, but if you are looking for ideas on how to extend this series (or perhaps make a separate series?) I would be very excited to see a series of videos with topics that fit the category of "these are java.util things, and this is how you use C++ STL things that are similar."
@maryelainecaliff4 ай бұрын
Dynamic arrays are not generally initialized by default, but they can be initialized with syntax like this: int * myDynIntArray = new int[20]{0}; If I said they were, that was definitely mis-speaking. I'm glad you have found the series useful.
@siyabongampongwana9905 ай бұрын
Thank you for the video, really appreciate it.
@maryelainecaliff5 ай бұрын
Glad it was helpful!
@pseudolimao6 ай бұрын
This is it. If you don't understand dijkstra's with heaps, this demystifies it. I just looked at the code implementation and couldn't comprehend it, but this decomposition helped tremendously. The key takeaway is how the priority queue pushes down costly jumps to a node X, so when we get to that item in the queue, that node X will already be "marked" by a shorter path, meaning we can discard that item from the queue, essentially skipping steps. Moreover, since we push "up" the uncostly jumps, our "marks" essentially give us the shortest path to each node, meaning we can stop the algorithm as soon as we have marks equal to the number of nodes. If you imagine a big graph, you're going to "push down" into the queue a bunch of costly items, you're going to "mark" the nodes rather quickly, finding the shortest path as soon as you mark them all, and discarding a considerable amount of items in the process. Notice too, that if you have a huge number of edges, compared to vertices, you're doing a lot of work sorting edges in the queue, that you could spend doing lookups, so intuitively you can start being suspicious that this solution might be equal or worse than the naive approach. I am really pleased with what i unlocked watching this video, thank you Mary. You've also shown me i should, ideally, grab a pen and paper and just go through problems to understand them.
@maryelainecaliff5 ай бұрын
I'm glad you found the video helpful. I think you're right that the key to understanding is with the ideas and diagrams, because we don't get bogged down in the specifics of code. Then once we really understand what's going on, it becomes much easier to translate into code (in any language).
@pseudolimao5 ай бұрын
@@maryelainecaliff the code is just that, code for a set of ideas. and some key ideas, especially for these fundamental algorithms' optimized implementations, are very obfuscated within the code. From the array implementation to the priority queue one, the key takeaway is that sorting the queue by edge weight gives us the optimal edge as the first edge we process between those nodes (if one edge is always smaller than two, aka no negative weights), which is almost impossible to decipher this without brute forcing examples in your head/paper or having someone explain it to you, but it's really beautiful once you actually grasp the intention.
@anerdindisguise6 ай бұрын
Only thing I would recommend is looking at cmake instead of make files. They are closer to the maven/gradle workflows, java/spring developers are use to.
@A572786 ай бұрын
Dr, why you stopped 😢
@maryelainecaliff6 ай бұрын
I've been very busy. I'm hoping to get a few new videos out this summer.
@JordanCagle-k9x6 ай бұрын
live roger reaction
@niranjanm59426 ай бұрын
Explained in a way that's very easy to understand and thanks for not giving the code. Now I can try it on my own and test my understanding
@maryelainecaliff6 ай бұрын
That's my goal. I'm glad you found it helpful.
@nahombiniam72816 ай бұрын
I wish I found you 10 years ago
@davedition20776 ай бұрын
Looking for this playlist. Finally found..
@maryelainecaliff6 ай бұрын
I hope you find it helpful
@mehedihasanshameem53476 ай бұрын
take love from Bangladesh
@syedatifshah80206 ай бұрын
v.nice you earned a subscriber, your video content is incredible, but I was searching for "attribute grammar" in the context of theory of programming language but I did not find
@maryelainecaliff6 ай бұрын
I'm glad you like the content, but attribute grammars are beyond the scope of the classes I currently teach, and I'm still primarily focused on making videos for my current students, though I'm delighted that others find them helpful.
@DanielHenriquePeresServejeira6 ай бұрын
By seeing the example of the <if-statement>, I just remembered I've already seen the problem of that way of doing it, that tuns ambiguous using the parse trees, but how we do an unambiguous BNF of <if-statement>? I've already seen the explanation of this problem, using the concepts of matched and unmatched sentences, but I did not understand it very well.
@maryelainecaliff6 ай бұрын
Have you checked out my video on ambiguous grammars?
@DanielHenriquePeresServejeira6 ай бұрын
@@maryelainecaliff Not yet, I'll check it.
@vanlang99596 ай бұрын
Thank you for such an insightful video!
@maryelainecaliff6 ай бұрын
Glad it was helpful.
@exe.m1dn1ght6 ай бұрын
I don't understand, this is Depth First Search.. Why all the complication with In-Degree arrays ??
@maryelainecaliff6 ай бұрын
Actually, it's a breadth-first search, deliberately limited so that a node is not taken until all of the nodes it depends on are taken. The in-degree array is how we ensure that we don't take a node until all of its dependencies have been taken, which is the point of a topological ordering or topological sort. You could also do a topological ordering depth-first, but it's generally agreed that the breadth-first approach produces the more desirable result in general.
@exe.m1dn1ght6 ай бұрын
@@maryelainecaliff thanks, but i did some tests with DFS and a hashmap that store visited and it's yelding the same result so what s the difference?
@maryelainecaliff6 ай бұрын
@@exe.m1dn1ght I can't tell you without knowing more precisely what you did.