update compilers-aho also add new misc notes on mongodb and opengl
Prithu Goswami prithugoswami524@gmail.com
Mon, 21 Dec 2020 14:53:54 +0530
3 files changed,
408 insertions(+),
0 deletions(-)
A
compilers-aho/04-syntax-analysis.md
@@ -0,0 +1,61 @@
+--- +geometry: +- lmargin=0.9in +- rmargin=0.3in +- tmargin=0.3in +- bmargin=0.5in +- twoside +papersize: A4 +... + +\begin{huge} +\textbf{Chapter 4 - Syntax Analysis} +\end{huge} + +``` +Intro +..Role of the Parser +..Representative Grammars +..Syntax Error Handling +..Error-Recovery Strategies +....Panic-Mode Recovery +....Phrase-Level Recovery +....Error Productions +....Global Correction +Context-Free Grammars +..The Formal Definition of a Context-Free Grammar +..Notational Conventions +..Derivations +..Parse Trees and Derivations +..Ambiguity +..Verifying the Language Generated by a Grammar +..Context-Free Grammars Versus Regular Expressions +Writing a Grammar +..Lexical Versus Syntactic Analysis +..Eliminating Ambiguity +..Elimination of Left Recursion +..Left Factoring +..Non-Context-Free Language Constructs +Top-Down Parsing +..Recursive-Descent Parsing +..FIRST and FOLLOW +..LL(1) Grammars +..Nonrecursive Predictive Parsing +..Error Recovery in Predictive Parsing +....Panic Mode +....Phrase-level Recovery +Bottom-Up Parsing +..Reductions +..Handle Pruning +..Shift-Reduce Parsing +..Conflicts During Shift-Reduce Parsing +Introduction to LR Parsing: Simple LR +..Why LR Parsers +..Items and the LR(0) Automaton +..The LR-Parsing Algorithm +....Structure of the LR Parsing Table +....LR-Parser Configurations +....Behavior of the LR Parser +....Constructing SLR-Parsing Tables +....Viable Prefixes +```
A
misc/mongodb.md
@@ -0,0 +1,289 @@
+## Intro + +- Collections are analogus to tables in relational databases +- A collection consists of documents. Documents are analogus to a record. +- A document is just a simple JSON object, or in mongodb's lingo, it's a BSON + object. +- The schema of each document in a collection is not strict my default. i.e A + collection can have documents that are completely different from each other. +- an `_id` field is like the primary key of a document. If one is not provided + while inserting a new document, then mongodb creates on of the type + `ObjectId` + +## Simple Operations + +### Show All Databases + +``` +show dbs +``` + +### Show Current Database + +``` +db +``` + +### Create Or Switch Database + +``` +use acme +``` + +### Drop + +``` +db.dropDatabase() +``` + +### Create Collection + +``` +db.createCollection('posts') +``` + +### Show Collections + +``` +show collections +``` + +### Insert Row + +``` +db.posts.insert({ + title: 'Post One', + body: 'Body of post one', + category: 'News', + tags: ['news', 'events'], + user: { + name: 'John Doe', + status: 'author' + }, + date: Date() +}) +``` + +### Insert Multiple Rows + +``` +db.posts.insertMany([ + { + title: 'Post Two', + body: 'Body of post two', + category: 'Technology', + date: Date() + }, + { + title: 'Post Three', + body: 'Body of post three', + category: 'News', + date: Date() + }, + { + title: 'Post Four', + body: 'Body of post three', + category: 'Entertainment', + date: Date() + } +]) +``` + +### Get All Rows + +``` +db.posts.find() +``` + +### Get All Rows Formatted + +``` +db.find().pretty() +``` + +### Find Rows + +``` +db.posts.find({ category: 'News' }) +``` + +### Sort Rows + +``` +# asc +db.posts.find().sort({ title: 1 }).pretty() +# desc +db.posts.find().sort({ title: -1 }).pretty() +``` + +### Count Rows + +``` +db.posts.find().count() +db.posts.find({ category: 'news' }).count() +``` + +### Limit Rows + +``` +db.posts.find().limit(2).pretty() +``` + +### Chaining + +``` +db.posts.find().limit(2).sort({ title: 1 }).pretty() +``` + +### Foreach + +``` +db.posts.find().forEach(function(doc) { + print("Blog Post: " + doc.title) +}) +``` + +### Find One Row/Document + +``` +db.posts.findOne({ category: 'News' }) +``` + +### Find Specific Fields + +``` +db.posts.find({ title: 'Post One' }, { + title: 1, + author: 1 +}) +``` + +### Update a Document + +``` +db.posts.update({ title: 'Post Two' }, +{ + title: 'Post Two', + body: 'New body for post 2', + date: Date() +}, +{ + upsert: true +}) + +``` + +The first argument to `update` specifies which document you are targeting to +update. This should be the `_id` field to keep it unique. + +### Update Specific Field + +``` +db.posts.update({ title: 'Post Two' }, +{ + $set: { + body: 'Body for post 2', + category: 'Technology' + } +}) +``` +If the field does not exist then it is added. + +### Add an element to an array +``` +db.test.update( + { _id : 133 }, + { $push : { <field1>: <value1>} } +) +``` + +field1 is an array and <value1> is the elemnet/document will be inserted into +that array. + +### Increment Field (\$inc) + +``` +db.posts.update({ title: 'Post Two' }, +{ + $inc: { + likes: 5 + } +}) +``` + +## Rename Field + +``` +db.posts.update({ title: 'Post Two' }, +{ + $rename: { + likes: 'views' + } +}) +``` + +## Delete Row + +``` +db.posts.remove({ title: 'Post Four' }) +``` + +## Sub-Documents + +``` +db.posts.update({ title: 'Post One' }, +{ + $set: { + comments: [ + { + body: 'Comment One', + user: 'Mary Williams', + date: Date() + }, + { + body: 'Comment Two', + user: 'Harry White', + date: Date() + } + ] + } +}) +``` + +## Find By Element in Array (\$elemMatch) + +``` +db.posts.find({ + comments: { + $elemMatch: { + user: 'Mary Williams' + } + } + } +) +``` + +## Add Index + +``` +db.posts.createIndex({ title: 'text' }) +``` + +## Text Search + +``` +db.posts.find({ + $text: { + $search: "\"Post O\"" + } +}) +``` + +## Greater & Less Than + +``` +db.posts.find({ views: { $gt: 2 } }) +db.posts.find({ views: { $gte: 7 } }) +db.posts.find({ views: { $lt: 7 } }) +db.posts.find({ views: { $lte: 7 } }) +```
A
misc/opengl.md
@@ -0,0 +1,58 @@
+--- +geometry: +- lmargin=0.9in +- rmargin=0.3in +- tmargin=0.3in +- bmargin=0.5in +- twoside +papersize: A4 +... + +## Point function + +``` +glBegin (GL_POINTS) + glVertex* (); +glEnd(); +``` + +- `glVertex()` function is used to specify coordinates of any point on OpenGL +- `*` represents the suffix required + - a number 2,3 or 4 specify the dimensionality + - two dimensional coordinates *(x,y)* is actually a 3d coordinate where z = + 0. So *(x,y)* = *(x,y,0)*. Moreover OpenGl represents vertices as four + dimensions. + - suffix code for indicating the data type is as follows: i (integer), s + (short), f (float) and d (double) + - If we use an array to indicate the coordinates of the vertex then we append + a `v` + +- **Examples:** + +``` + glBegin(GL_POINTS) + glVertex2i(50, 100); + lVertex2i(75, 150); + glVertex2i(100, 200); + glEnd(); + + int point1[] = {50, 100}; + int point2[] = {75, 150}; + int point3[] = {100, 200}; + + glBegin(GL_POINTS) + glVertex2iv(point1); + glVertex2iv(point2); + glVertex2iv(point3); + glEnd(); +``` + +## Line Functions + +Three line primitive constants: + +1. `GL_LINES` +2. `GL_LINE_STRIP` +3. `GL_LINE_LOOP` + +