{"action":"created","issue":{"url":"https://api.github.com/repos/scalameta/scalameta/issues/62","repository_url":"https://api.github.com/repos/scalameta/scalameta","labels_url":"https://api.github.com/repos/scalameta/scalameta/issues/62/labels{/name}","comments_url":"https://api.github.com/repos/scalameta/scalameta/issues/62/comments","events_url":"https://api.github.com/repos/scalameta/scalameta/issues/62/events","html_url":"https://github.com/scalameta/scalameta/issues/62","id":49962140,"number":62,"title":"Alternative parser technology","user":{"login":"MasseGuillaume","id":921490,"avatar_url":"https://avatars.githubusercontent.com/u/921490?v=3","gravatar_id":"","url":"https://api.github.com/users/MasseGuillaume","html_url":"https://github.com/MasseGuillaume","followers_url":"https://api.github.com/users/MasseGuillaume/followers","following_url":"https://api.github.com/users/MasseGuillaume/following{/other_user}","gists_url":"https://api.github.com/users/MasseGuillaume/gists{/gist_id}","starred_url":"https://api.github.com/users/MasseGuillaume/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MasseGuillaume/subscriptions","organizations_url":"https://api.github.com/users/MasseGuillaume/orgs","repos_url":"https://api.github.com/users/MasseGuillaume/repos","events_url":"https://api.github.com/users/MasseGuillaume/events{/privacy}","received_events_url":"https://api.github.com/users/MasseGuillaume/received_events","type":"User","site_admin":false},"labels":[{"url":"https://api.github.com/repos/scalameta/scalameta/labels/Contributor%20alert","name":"Contributor alert","color":"fbca04"}],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":26,"created_at":"2014-11-25T00:34:25Z","updated_at":"2016-05-06T15:28:42Z","closed_at":null,"body":"Hum the parser code is quite impressively long why it's not using something like parboiled2 ?\r\n\r\nhttps://github.com/sirthias/parboiled2"},"comment":{"url":"https://api.github.com/repos/scalameta/scalameta/issues/comments/217474025","html_url":"https://github.com/scalameta/scalameta/issues/62#issuecomment-217474025","issue_url":"https://api.github.com/repos/scalameta/scalameta/issues/62","id":217474025,"user":{"login":"xeno-by","id":609152,"avatar_url":"https://avatars.githubusercontent.com/u/609152?v=3","gravatar_id":"","url":"https://api.github.com/users/xeno-by","html_url":"https://github.com/xeno-by","followers_url":"https://api.github.com/users/xeno-by/followers","following_url":"https://api.github.com/users/xeno-by/following{/other_user}","gists_url":"https://api.github.com/users/xeno-by/gists{/gist_id}","starred_url":"https://api.github.com/users/xeno-by/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/xeno-by/subscriptions","organizations_url":"https://api.github.com/users/xeno-by/orgs","repos_url":"https://api.github.com/users/xeno-by/repos","events_url":"https://api.github.com/users/xeno-by/events{/privacy}","received_events_url":"https://api.github.com/users/xeno-by/received_events","type":"User","site_admin":false},"created_at":"2016-05-06T15:28:42Z","updated_at":"2016-05-06T15:28:42Z","body":"Starting from 0.1.0-RC5, scala.meta's infrastructure no longer requires Tree.tokens to be assigned for every parsed AST. Now the only thing that the parser is expected to do is to assign Tree.origin, which is equivalent to providing a position, i.e. a start-point-end range. Our tokenizer is then able to calculate tokens on its own based on the provided position.\r\n\r\nI hope that this will remove unnecessary barriers to providing an alternative parser for scala.meta trees.\r\n\r\nThe only additional complication that I can think of at the moment is the necessity to support the Quasiquote dialect of Scala, i.e. being able to accept stuff like `..$xs` or `foo(...$argss)` and to transform it  to a scala.meta AST enriched by nodes representing ellipses and unquotes.\r\n\r\n/cc @lihaoyi "}}