{"id":13513555,"url":"https://github.com/natalie-lang/natalie_parser","last_synced_at":"2025-03-31T02:32:34.970Z","repository":{"id":37764331,"uuid":"469751932","full_name":"natalie-lang/natalie_parser","owner":"natalie-lang","description":"NatalieParser is a zero-dependency, from-scratch, hand-written recursive descent parser for the Ruby Programming Language.","archived":true,"fork":false,"pushed_at":"2023-10-08T19:38:02.000Z","size":1036,"stargazers_count":64,"open_issues_count":0,"forks_count":8,"subscribers_count":5,"default_branch":"master","last_synced_at":"2024-10-12T05:43:23.778Z","etag":null,"topics":["parser","ruby"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/natalie-lang.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2022-03-14T13:45:33.000Z","updated_at":"2024-04-17T13:17:14.000Z","dependencies_parsed_at":"2023-02-01T01:32:02.388Z","dependency_job_id":"3ceddaf0-1a2d-4c03-95d0-2bd186525e66","html_url":"https://github.com/natalie-lang/natalie_parser","commit_stats":{"total_commits":385,"total_committers":6,"mean_commits":64.16666666666667,"dds":0.1298701298701299,"last_synced_commit":"f34ce856775fc4820c2569adc0b16f4ec16546d8"},"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natalie-lang%2Fnatalie_parser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natalie-lang%2Fnatalie_parser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natalie-lang%2Fnatalie_parser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/natalie-lang%2Fnatalie_parser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/natalie-lang","download_url":"https://codeload.github.com/natalie-lang/natalie_parser/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":222615145,"owners_count":17012022,"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":["parser","ruby"],"created_at":"2024-08-01T05:00:31.124Z","updated_at":"2024-11-01T17:30:29.121Z","avatar_url":"https://github.com/natalie-lang.png","language":"C++","funding_links":[],"categories":["C++"],"sub_categories":[],"readme":"# Natalie Parser\n\n**NOT MAINTAINED:** This parser has been archived in favor of [Prism](https://github.com/ruby/prism).\nNatalie [now uses Prism instead](https://github.com/natalie-lang/natalie/pull/1213).\n\n[![Gem Version](https://badge.fury.io/rb/natalie_parser.svg)](https://badge.fury.io/rb/natalie_parser)\n[![github build status](https://github.com/natalie-lang/natalie_parser/actions/workflows/build.yml/badge.svg)](https://github.com/natalie-lang/natalie_parser/actions?query=workflow%3ABuild+branch%3Amaster)\n[![MIT License](https://img.shields.io/badge/license-MIT-blue)](https://github.com/natalie-lang/natalie_parser/blob/master/LICENSE)\n\nThis is a parser for the Ruby programming language, written in C++.\nIt was extracted from the [Natalie](https://github.com/natalie-lang/natalie) project.\n\nYou can use this library directly from a C/C++ project, or you can\nbuild it as a Ruby gem and use it from Ruby itself.\n\nWe are currently targeting Ruby 3.0 syntax, but that will probably\nchange over time, depending on what things we want to support and\nwhat kind of help we get from the community.\n\nNOTE: This project is still very new and there are certainly bugs.\nSee the list below for things we already know about, but expect there\nare more we don't know about yet. **We don't recommend you use this in\nproduction applications.**\n\n## To Do\n\n- [x] Parse the [Natalie](https://github.com/natalie-lang/natalie) compiler and standard library\n- [x] Pass (mostly) the [RubyParser](https://github.com/seattlerb/ruby_parser) test suite\n- [ ] Support different source encodings\n- [ ] Support more of the Ruby 3.0 syntax\n  - [x] \"Endless\" method definition (`def foo = bar`)\n  - [x] Argument forwarding (`...`)\n  - [x] Numbered block parameters (`_1`, `_2`, etc.)\n  - [x] Rational and Complex literals (`1r` and `2i`)\n  - [ ] Non-ASCII identifiers\n  - [ ] Pattern matching\n\n## Development\n\nYou'll need:\n\n- gcc or clang\n- ruby-dev (dev headers)\n- ccache (optional)\n- compiledb (optional)\n\n```sh\nrake\nruby -I lib:ext -r natalie_parser -e \"p NatalieParser.parse('1 + 2')\"\n# =\u003e s(:block, s(:call, s(:lit, 1), :+, s(:lit, 2)))\n```\n\n### Running Tests\n\n```sh\nrake test\n```\n\n## Copyright \u0026 License\n\nNatalie is copyright 2022, Tim Morgan and contributors. Natalie is licensed\nunder the MIT License; see the `LICENSE` file in this directory for the full text.\n\n### Note about Outside Sources\n\nThe file `test/test_ruby_parser.rb` is copyright Ryan Davis and is licensed MIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatalie-lang%2Fnatalie_parser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnatalie-lang%2Fnatalie_parser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnatalie-lang%2Fnatalie_parser/lists"}