Multiple changes:

- Add the book and a few first pages
- Add the code generator
This commit is contained in:
2022-04-17 19:48:45 +02:00
parent 0469c6dbdf
commit 199758d97d
47 changed files with 5143 additions and 41 deletions

View File

@@ -0,0 +1,520 @@
{
"__schema" : "4.1",
"__type" : "page",
"children" : {
"__type" : "snippets",
"items" : [
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:04:52.926306+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:05:09.50221+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "GJFVij2ZDQCcDd1tDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "In this section, we will go through the process of building a parser “from scratch” together."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:05:12.833745+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:06:10.030858+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "xbeQiz2ZDQCcD88QDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "In practice, SmaCC comes with so many amenities already that “from scratch” means “from an already made bed” more than anything else. You will see what I mean as we go through this together."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:06:13.583081+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:09:39.026231+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "J3E/jz2ZDQCcETMJDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "The code for this section largely resides inside {{gtClass:CarpParser}} and the subclasses of {{gtClass:CarpExpressionNode}}. You can take a look at them below."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:07:30.484217+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:08:55.160826+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "lon3kT2ZDQCcE768Dqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "{{gtExample:CarpExpressionNode class >> #itself | noCode=true | previewExpanded=true | previewShow=#gtSubclassesFor:}}"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:09:13.686592+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:09:55.020248+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "jDDBmT2ZDQCcGKn5Dqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "If this seems like a dizzying amount of classes to write, dont worry—theyre autogenerated. The only class we will have to touch is the parser, and the rest will follow."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:09:58.500922+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:11:32.016153+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "cEqknD2ZDQCcGminDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "If you want to have a non-Carp-centric explanation of how to work with parsers in SmaCC, the Glamorous Toolkit book has a section on that as well, {{gtPage:Playing with Parsers in SmaCC - Show|db=2j9m7db2i4oz116bexd7wbdxo}}. It doesnt cover all of the ground we will, but it should give you enough of an introduction to feel less lost."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:11:36.888183+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:11:46.504487+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "xvVdoj2ZDQCcpQCVDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "## Step I: Generating a parse tree"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:11:48.803566+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:11:49.328916+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "9FI7oz2ZDQCcp4WzDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "TODO"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:11:51.714664+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:12:08.856107+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "twRZoz2ZDQCcqex7Dqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "## Step II: Generating an AST"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:12:10.773142+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:12:47.439878+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "pVmLpD2ZDQCcq9tADqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "TODO"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:18:53.161795+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:19:02.231751+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "RbB6vD2ZDQCctg5pDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "## Step III: Playing with your AST"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:19:03.612588+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:20:04.139943+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "NDAnvT2ZDQCcuJ7fDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "While this step isnt strictly necessary, I encourage you to take this moment to take a break, relax, and play a little with your new toy."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:20:10.650719+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:21:45.318245+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "i+YTwT2ZDQCcupQKDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "Over in the bonus section, there is a chapter on [[Visualizing code using our AST]]. Its just a suggestion, but maybe there are some questions youve been asking yourself about your code bases lately that you can now finally answer using the AST? If you do, be sure to tell me about it!"
}
]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:04:50.114519+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T18:04:50.114519+02:00"
}
},
"pageType" : {
"__type" : "namedPage",
"title" : "Building a parser from scratch"
},
"uid" : {
"__type" : "uuid",
"uuid" : "8beb548a-3d99-0d00-9c0c-1aaf0ea9f69b"
}
}