{"id":20428530,"url":"https://github.com/picalines/stateviz","last_synced_at":"2026-04-11T07:04:39.318Z","repository":{"id":196684503,"uuid":"623212045","full_name":"Picalines/stateviz","owner":"Picalines","description":"Приложение для визуализации и отладки конечного автомата","archived":false,"fork":false,"pushed_at":"2023-09-26T17:23:05.000Z","size":439,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-01-15T16:22:14.589Z","etag":null,"topics":["custom-language","electron-app","gradle","java","lombok-gradle","spring-boot","state-machine","sveltejs","typescript","vizualization"],"latest_commit_sha":null,"homepage":"","language":"Java","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/Picalines.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}},"created_at":"2023-04-03T23:26:23.000Z","updated_at":"2023-05-19T11:55:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"93477320-ec17-4263-bbfe-bef72fc06460","html_url":"https://github.com/Picalines/stateviz","commit_stats":null,"previous_names":["picalines/stateviz"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fstateviz","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fstateviz/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fstateviz/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Picalines%2Fstateviz/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Picalines","download_url":"https://codeload.github.com/Picalines/stateviz/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241970090,"owners_count":20050612,"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":["custom-language","electron-app","gradle","java","lombok-gradle","spring-boot","state-machine","sveltejs","typescript","vizualization"],"created_at":"2024-11-15T07:27:28.565Z","updated_at":"2026-04-11T07:04:34.284Z","avatar_url":"https://github.com/Picalines.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# stateviz\n\nПриложение для визуализации и отладки конечного автомата.\n\nАвтомат задаётся программой на собственном языке statelang, по которой приложение строит дерево состояний. При отсутствии ошибок компиляции программу можно запустить, чтобы пошагово отследить изменение значений.\n\n## Список технологий\n\n * Компилятор языка написан на Java, коммуникация с фронтендом осуществляется с помощью Spring\n * Фронтенд реализован на [Svelte](https://svelte.dev/)\n   * [Monaco Editor](https://microsoft.github.io/monaco-editor/) для редактора кода\n   * [vis.js](https://visjs.org/) для визуализации дерева автомата\n\n## Справка по языку statelang\n\nДля примера рассмотрим программу, которая увеличивает счётчик, пока не достигнет заданного значения.\n\nУ такого автомата будет два состояния: `COUNTING` и `STOPPED`. Они определяются с помощью блока `state` на верхнем уровне программы:\n\n```\nstate {\n  COUNTING, # первое состояние считается начальным\n  STOPPED\n}\n```\n\nДалее нам нужно объявить переменную счётчика и константу остановки:\n\n```\nlet count := 0;\nconst stop := 10;\n```\n\nЗамечания:\n * язык строго типизирован, но указывать типы вручную не нужно\n * нет разграничения на int и float, все числа дробные\n * оператор присваивания - `:=`, а сравнения - `=`\n\nЗатем объявим действия автомата в состоянии `COUNTING`:\n\n```\nwhen COUNTING {\n  assert count \u003c stop;   # проверяем корректность состояния\n  count := count + 1;    # увеличиваем счётчик\n  if count = stop {\n    state := STOPPED;    # переходим в STOPPED, если достигнуто значение stop\n  }\n}\n```\n\nЗамечания:\n * `assert` завершит программу с ошибкой, если его условие не равно истине\n * присваивание в `state` - переход в другое состояние\n   * программа выходит из блока при переходе по аналогии с `return` в обычных языках\n   * код после перехода будет помечен как недостижимый\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpicalines%2Fstateviz","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpicalines%2Fstateviz","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpicalines%2Fstateviz/lists"}