{"id":16702501,"url":"https://github.com/dkandalov/parser-combinator-koans","last_synced_at":"2025-06-19T19:38:46.574Z","repository":{"id":66534448,"uuid":"274375899","full_name":"dkandalov/parser-combinator-koans","owner":"dkandalov","description":"Koans to build parser combinator in Kotlin from scratch","archived":false,"fork":false,"pushed_at":"2020-08-27T15:07:34.000Z","size":144,"stargazers_count":6,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"koans","last_synced_at":"2025-03-24T06:11:33.647Z","etag":null,"topics":["kotlin","parser-combinator"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dkandalov.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-06-23T10:23:17.000Z","updated_at":"2023-01-16T00:09:35.000Z","dependencies_parsed_at":"2023-05-18T22:46:35.182Z","dependency_job_id":null,"html_url":"https://github.com/dkandalov/parser-combinator-koans","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkandalov%2Fparser-combinator-koans","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkandalov%2Fparser-combinator-koans/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkandalov%2Fparser-combinator-koans/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dkandalov%2Fparser-combinator-koans/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dkandalov","download_url":"https://codeload.github.com/dkandalov/parser-combinator-koans/tar.gz/refs/heads/koans","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248161262,"owners_count":21057554,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["kotlin","parser-combinator"],"created_at":"2024-10-12T19:05:03.338Z","updated_at":"2025-04-10T04:56:53.663Z","avatar_url":"https://github.com/dkandalov.png","language":"Kotlin","readme":"Hi!\n\nThis is a bunch of koans which can guide you through the process of creating parser combinator in Kotlin from scratch.\n\nThis is by no means a course on parsers but more of a very quick intro into the subject. \nTo start with, ask yourself the following questions (this is not a quiz, so not being sure about the answer is perfectly fine):\n - What is a grammar? Context-free grammar?\n - What is a parser? Parser combinator?\n - What is left recursion?\n - What is the difference between parse tree and abstract syntax tree?\n - How would you write an interpreter to evaluate expressions like \"(1 + 2) * 3 - 4\"?\n\n\n### How to use these koans?\n - compile the project using Gradle `compileTestKotlin` task or IDE\n - take a look at `src/test/parserkoans/1 - Basic parsers/0 - Parser API.kt` to get familiar with core classes\n - open `src/test/parserkoans/1 - Basic parsers/1 - String parser.kt`\n    - run the tests to see them fail with `NotImplementedError`\n    - make the first test pass by implementing `TODO()`\n    - make the second test pass by adding more functionality\n    - repeat until all tests in the step are passing\n - repeat the above for the next steps\n\n\n### See also\n - [Parser combinator koans as a Stepik course](https://github.com/dkandalov/Parser_Combinator_Koans)\n - [Parser4k](https://github.com/fork-handles/forkhandles/tree/trunk/parser4k) - recursive descent parser combinator library for Kotlin with support for left recursion\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkandalov%2Fparser-combinator-koans","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdkandalov%2Fparser-combinator-koans","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdkandalov%2Fparser-combinator-koans/lists"}