{ "__schema" : "4.1", "__type" : "page", "children" : { "__type" : "snippets", "items" : [ { "__type" : "textSnippet", "children" : { "__type" : "snippets", "items" : [ ] }, "createEmail" : { "__type" : "email", "emailString" : "" }, "createTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:43:49.615762+02:00" } }, "editEmail" : { "__type" : "email", "emailString" : "" }, "editTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:50:20.524028+02:00" } }, "uid" : { "__type" : "uid", "uidString" : "sISlwzyZDQCZunK6Dqn2mw==" }, "paragraphStyle" : { "__type" : "textStyle" }, "string" : "We’re going to start the process of integrating our language by making GT understand its syntax. To do that, we are going to write a parser." }, { "__type" : "textSnippet", "children" : { "__type" : "snippets", "items" : [ ] }, "createEmail" : { "__type" : "email", "emailString" : "" }, "createTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:50:22.703511+02:00" } }, "editEmail" : { "__type" : "email", "emailString" : "" }, "editTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:52:10.981298+02:00" } }, "uid" : { "__type" : "uid", "uidString" : "mZWIVj2ZDQCZ5a/iDqn2mw==" }, "paragraphStyle" : { "__type" : "textStyle" }, "string" : "The prospect of riting a parser manually most likely elicits two responses from you: “this is going to be fun” or “what a nightmare”. Usually I fall into the first category, but depending on the complexity of the language’s grammar, I might also feel a little bit of the second option." }, { "__type" : "textSnippet", "children" : { "__type" : "snippets", "items" : [ ] }, "createEmail" : { "__type" : "email", "emailString" : "" }, "createTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:52:13.23472+02:00" } }, "editEmail" : { "__type" : "email", "emailString" : "" }, "editTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:57:02.826968+02:00" } }, "uid" : { "__type" : "uid", "uidString" : "gxItXT2ZDQCZ5wrNDqn2mw==" }, "paragraphStyle" : { "__type" : "textStyle" }, "string" : "Luckily, we don’t have to bother with any of the manual labor required in writing a parser by hand. We have [SmaCC](http://www.refactoryworkers.com/SmaCC.html), a powerful version of the YACC trope of parser generators. With it, we can generate a parser for our language with relative ease, whether we have a grammar at hand or not." }, { "__type" : "textSnippet", "children" : { "__type" : "snippets", "items" : [ ] }, "createEmail" : { "__type" : "email", "emailString" : "" }, "createTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:57:08.353695+02:00" } }, "editEmail" : { "__type" : "email", "emailString" : "" }, "editTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:58:06.623815+02:00" } }, "uid" : { "__type" : "uid", "uidString" : "fDmIbj2ZDQCZ6ou1Dqn2mw==" }, "paragraphStyle" : { "__type" : "textStyle" }, "string" : "You might also want to take a look at the section {{gtPage:How to parse sources in different languages|db=2j9m7db2i4oz116bexd7wbdxo}} in the Glamorous Toolkit book to get an overview. Maybe the language you want to add is already there!" } ] }, "createEmail" : { "__type" : "email", "emailString" : "" }, "createTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:09:16.687265+02:00" } }, "editEmail" : { "__type" : "email", "emailString" : "" }, "editTime" : { "__type" : "time", "time" : { "__type" : "dateAndTime", "dateAndTimeString" : "2022-04-17T17:09:16.687265+02:00" } }, "pageType" : { "__type" : "namedPage", "title" : "Building a parser" }, "uid" : { "__type" : "uuid", "uuid" : "56dba4c3-3c99-0d00-99b9-64b00ea9f69b" } }