{"id":16594869,"url":"https://github.com/symind/stone-lang","last_synced_at":"2025-10-29T12:30:33.007Z","repository":{"id":96505013,"uuid":"354271212","full_name":"SyMind/stone-lang","owner":"SyMind","description":"TypeScript 实现《两周自制脚本语言》书中的 stone 语言。","archived":false,"fork":false,"pushed_at":"2021-04-20T00:01:17.000Z","size":218,"stargazers_count":11,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-08-01T22:54:49.605Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/SyMind.png","metadata":{"files":{"readme":"README.md","changelog":null,"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,"roadmap":null,"authors":null}},"created_at":"2021-04-03T11:13:36.000Z","updated_at":"2024-05-11T12:25:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"77dc63e7-9248-444d-8879-3b9146c398d5","html_url":"https://github.com/SyMind/stone-lang","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/SyMind%2Fstone-lang","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SyMind%2Fstone-lang/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SyMind%2Fstone-lang/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SyMind%2Fstone-lang/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SyMind","download_url":"https://codeload.github.com/SyMind/stone-lang/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219857791,"owners_count":16556055,"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":[],"created_at":"2024-10-11T23:47:45.846Z","updated_at":"2025-10-29T12:30:27.641Z","avatar_url":"https://github.com/SyMind.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# stone-lang\n\nTypeScript 实现《两周自制脚本语言》书中的 stone 语言。\n\n## stone 语言的语法定义\n\n### BNF 中用到的元字符\n| - | - |\n| - | - |\n| { pat } | 模式 pat 至少重复 0 次 |\n| [ pat ] | 与重复出现 0 次或 1 次的模式 pat 匹配 |\n| pat1 \\| pat2 | 与 pat1 或 pat2 匹配 |\n| () | 将括号内视为一个完整的模式 |\n\n### Basic Parser\n\n```\nprimary   : \"(\" expr \")\" | NUMBER | IDENTIFIER | STRING\nfactor    : \"-\" primary | primary\nexpr      : factor { OP factor }\nblock     : \"{\" [ statement ] {(\";\" | EOL) [ statement ]} \"}\"\nsimple    : expr\nstatement : \"if\" expr block [ \"else\" block ]\n          | \"while\" expr block\n          | simple\nprogram   : [ statement ] (\";\" | EOL)\n```\n\n### Func Parser\n\n```\nparam       : IDENTIFIER\nparams      : param { \",\" param }\nparam_list  : \"(\" [ params ] \")\"\ndef         : \"def\" IDENTIFIER param_list block\nargs        : expr { \",\" expr }\npostfix     : \"(\" [ args ] \")\"\nprimary     : ( \"(\" expr \")\" | NUMBER | IDENTIFIER | STRING ) { postfix }\nsimple      : expr [ args ]\nporgram     : [ def | statement ] (\";\" | EOL)\n```\n\n### Closure Parser\n\n```\nprimary     : \" func \" param_list block\n            | 原本的 primary 定义\n```\n\n### Class Parser\n\n```\nmember      : def | simple\nclass_body  : \"{\" [ memeber ] { ( \";\" | EOL ) } \"}\"\ndefclass    : \"class\" IDENTIFIER [ \"extends\" IDENTIFIER ] class_body\npostfix     : \".\" IDENTIFIER | \"(\" [ args ] \")\"\nprogram     : [ defclass | def | statement ] ( \";\" | EOL )\n```\n\n## License\n\n[MIT](https://github.com/SyMind/stone/blob/main/LICENSE)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymind%2Fstone-lang","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsymind%2Fstone-lang","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymind%2Fstone-lang/lists"}