Files
gt4carp/lepiter/98eic2i3mg2eo2ztuqewzxrbf.lepiter
Veit Heller 199758d97d Multiple changes:
- Add the book and a few first pages
- Add the code generator
2022-04-17 19:48:45 +02:00

520 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{
"__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"
}
}