Files
gt4carp/lepiter/98eic2k973nz738qf6nsxvl1o.bak
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

295 lines
7.4 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-17T19:34:23.127464+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:34:50.494585+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "Hs5lyj6ZDQCdzfQlDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "Generating code is, in this case, the inverse of parsing: we have a tree, and we want to generate code matching our specification."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:34:51.781408+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:36:01.841086+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "001CzD6ZDQCdz6J+Dqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "In the case of Carp, I built a specific, new AST that matches the semantics of Carp rather than just the syntax. The example below should make this a little clearer."
},
{
"__type" : "pharoSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:36:07.105942+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:36:14.725535+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "yC3J0D6ZDQCd0ZgmDqn2mw=="
},
"code" : "'Example' asCarpModule\r\taddExpression: (CarpStaticFunction\r\t\t\t named: 'example' asCarpSymbol\r\t\t\t withArguments: { \r\t\t\t\t\t 'x' asCarpSymbol.\r\t\t\t\t\t 'y' asCarpSymbol }\r\t\t\t andBody: (CarpCall function: '+' asCarpSymbol arguments: { \r\t\t\t\t\t\t\t 'x' asCarpSymbol.\r\t\t\t\t\t\t\t 'y' asCarpSymbol }));\r\taddExpression: (CarpDynamicVariable\r\t\t\t named: 'dyn-example' asCarpSymbol\r\t\t\t binding: 1 asCarpInteger);\r\ttoCarp"
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:36:24.187977+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:37:20.312486+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "bUdd0T6ZDQCd0+EWDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "The AST we use here knows about modules, calls, and bindings. The AST we parse into does not, because it doesnt have to. But once we wander forth into generating code, a new representation might be more appropriate."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:38:27.85143+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:38:27.85143+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "48Ms2T6ZDQCd14cbDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "This is an example of having multiple representation of the same code in an environment. Many compilers have multiple intermediate representations, gradually lowering the abstraction level between phases, until finally generating code."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:37:23.024062+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:39:27.969082+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "vYVC1T6ZDQCd1YgnDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "We do something similar: by increasing the abstraction level, our toolkit becomes more expressive, capturing our use case better."
},
{
"__type" : "textSnippet",
"children" : {
"__type" : "snippets",
"items" : [ ]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:39:55.39115+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:40:10.759445+02:00"
}
},
"uid" : {
"__type" : "uid",
"uidString" : "BCUP3j6ZDQCd2e0LDqn2mw=="
},
"paragraphStyle" : {
"__type" : "textStyle"
},
"string" : "In the next chapter, we will use this code generator in our newly created coder"
}
]
},
"createEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"createTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:34:19.88496+02:00"
}
},
"editEmail" : {
"__type" : "email",
"emailString" : "<unknown>"
},
"editTime" : {
"__type" : "time",
"time" : {
"__type" : "dateAndTime",
"dateAndTimeString" : "2022-04-17T19:34:19.88496+02:00"
}
},
"pageType" : {
"__type" : "namedPage",
"title" : "Generating Code"
},
"uid" : {
"__type" : "uuid",
"uuid" : "4c1d65ca-3e99-0d00-9dcc-eaf60ea9f69b"
}
}