295 lines
7.4 KiB
Plaintext
295 lines
7.4 KiB
Plaintext
{
|
||
"__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 doesn’t 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"
|
||
}
|
||
} |