{"action":"created","issue":{"url":"https://api.github.com/repos/Yggdrasil88/FJPCompiller/issues/1","labels_url":"https://api.github.com/repos/Yggdrasil88/FJPCompiller/issues/1/labels{/name}","comments_url":"https://api.github.com/repos/Yggdrasil88/FJPCompiller/issues/1/comments","events_url":"https://api.github.com/repos/Yggdrasil88/FJPCompiller/issues/1/events","html_url":"https://github.com/Yggdrasil88/FJPCompiller/issues/1","id":117253949,"number":1,"title":"Aktualni stav prekladace","user":{"login":"jstrolen","id":5656532,"avatar_url":"https://avatars.githubusercontent.com/u/5656532?v=3","gravatar_id":"","url":"https://api.github.com/users/jstrolen","html_url":"https://github.com/jstrolen","followers_url":"https://api.github.com/users/jstrolen/followers","following_url":"https://api.github.com/users/jstrolen/following{/other_user}","gists_url":"https://api.github.com/users/jstrolen/gists{/gist_id}","starred_url":"https://api.github.com/users/jstrolen/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jstrolen/subscriptions","organizations_url":"https://api.github.com/users/jstrolen/orgs","repos_url":"https://api.github.com/users/jstrolen/repos","events_url":"https://api.github.com/users/jstrolen/events{/privacy}","received_events_url":"https://api.github.com/users/jstrolen/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":null,"milestone":null,"comments":27,"created_at":"2015-11-17T00:46:50Z","updated_at":"2016-01-06T08:49:11Z","closed_at":null,"body":"@Yggdrasil88 @johnny-wolf \r\nTakze zase ja\r\nPrectete si http://kifri.fri.uniza.sk/~bene/vyuka/kompilatory/prednasky-prezentace/Predn-01-text.pdf\r\nJe to sice z nejaky Zilinsky univerzity, ale jsou tam pekne popsany zakladni soucasti analyzatoru, vychazel jsem z toho.\r\n\r\n1. Scanner - lexikalni analyzator: Projde text a vytvori z nej tokeny. Token obsahuje ID tokenu(jeho druh) a lexem (puvodni text zadany uzivatelem), v tom dokumentu je to vysvetleny. Vstupem je tedy String (text programu), vystupem List<Token>. Tohle by uz melo fungovat.\r\n\r\n2. Parser - Syntakticky analyzator: Prochazi tokeny a podle gramatiky tvory syntakticky strom. Mirne jsem poupravil gramatiku (program nekonci teckou, ale vsechny bloky konci strednikem; podminene prirazeni zacina \"?\"; prirazeni ma pred cislem rovnitko navic - napr a = b = c = = 5; ...; viz gramatika nize), ke vsem zmenam jsem mel duvod (mame tu gramatiku slozitejsi nez je klasicka pl/0). I tohle by uz melo z vetsiny fungovat, zitra(dneska) to jeste poradne otestuju. To muzete zkusit i vy. Stahnete si odtud: https://code.google.com/p/structure-graphic/downloads/list jarko a pridejte si ho do projektu jako externi jar knihovnu. Umi to pekne ten vygenerovany strom vykreslit. \r\n\r\nPokud tu knihovnu mate, muzete to primo z mainu spoustet, text programu je v promenne \"text\". Do konzole to vypise tokeny(lexem a id tokenu - vystup scanneru) a zobrazi okynko se stromem (vystup parseru). Pokud se zada chybny program, budto bude hlasit chybu nebo se zacykli (na to jeste kouknu). Ted uz tedy chybi jen ten strom projit a tvorit z nej instrukce (mozna by bylo snazsi namisto tvorby instrukci rovnou spoustet kod?? == delat interpret, to asi taky muzem??). \r\n\r\nBTW napiste jestli chcete ztopit ty OSka\r\n\r\nGramatika:\r\n```\r\nprogram -> blok\r\n\r\nblok   \t -> [ \"const\" identifikátor \"=\" {identifikátor \"=\"} ( číslo | \"-\" číslo ) {\",\" identifikátor \"=\" {identifikátor \"=\"} ( číslo | \"-\" číslo ) } \";\"]\r\n            [ \"var\" identifikátor { \",\" identifikátor } \";\"] \r\n            { \"procedure\" identifikátor \"(\" [identifikátor [{\",\" identifikátor}] \")\" blok  } \r\n            [ příkaz ] \r\n            \"return\" [vyraz] \";\" . \r\n\r\npříkaz   -> identifikátor \"=\" {identifikátor \"=\"} vyraz \";\" | \r\n            \"call\" identifikátor \"(\" [vyraz {\",\" vyraz}] \") ;\" | \r\n            \"begin\" příkaz { příkaz } \"end\" | \r\n            \"if\" podmínka \"then\" příkaz | \r\n            \"if\" podmínka \"then\" příkaz \"else\" příkaz | \r\n            \"while\" podmínka \"do\" příkaz | \r\n            \"do\" příkaz \"while\" podmínka \";\" | \r\n            \"switch\" výraz \"case\" ( číslo | \"-\" číslo ) \":\" příkaz { \", case\" ( číslo | \"-\" číslo ) \":\" příkaz } . \r\n\r\npodmínka -> výraz (\"==\" | \"<>\" | \"<\" | \">\" | \"<=\" | \">=\" | \"AND\" | \"OR\") výraz | \r\n            \"!(\" podmínka \")\" . \r\n\r\nvýraz    -> term {(\"+\" | \"-\" ) term } | \r\n            \"?\" podmínka \"?\" výraz \":\" výraz . \r\n\r\nterm     -> faktor { (\"*\" | \"/\" ) faktor } . \r\n\r\nfaktor   -> identifikátor | číslo | \"-\" číslo | \r\n            \"call\" identifikátor \"(\" [vyraz {\",\" vyraz}] \")\" | \r\n            \"(\" výraz \")\" . \r\n\r\nUpdate 5. 1. 2016\r\n```\r\n"},"comment":{"url":"https://api.github.com/repos/Yggdrasil88/FJPCompiller/issues/comments/169269041","html_url":"https://github.com/Yggdrasil88/FJPCompiller/issues/1#issuecomment-169269041","issue_url":"https://api.github.com/repos/Yggdrasil88/FJPCompiller/issues/1","id":169269041,"user":{"login":"Yggdrasil88","id":8156803,"avatar_url":"https://avatars.githubusercontent.com/u/8156803?v=3","gravatar_id":"","url":"https://api.github.com/users/Yggdrasil88","html_url":"https://github.com/Yggdrasil88","followers_url":"https://api.github.com/users/Yggdrasil88/followers","following_url":"https://api.github.com/users/Yggdrasil88/following{/other_user}","gists_url":"https://api.github.com/users/Yggdrasil88/gists{/gist_id}","starred_url":"https://api.github.com/users/Yggdrasil88/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Yggdrasil88/subscriptions","organizations_url":"https://api.github.com/users/Yggdrasil88/orgs","repos_url":"https://api.github.com/users/Yggdrasil88/repos","events_url":"https://api.github.com/users/Yggdrasil88/events{/privacy}","received_events_url":"https://api.github.com/users/Yggdrasil88/received_events","type":"User","site_admin":false},"created_at":"2016-01-06T08:49:11Z","updated_at":"2016-01-06T08:49:11Z","body":"@jstrolen Ja to tam delal jen aby se nereklo ze nemame vstup z konzole. To si uz udelal, takze neni duvod to tam znovu dodavat.\r\n\r\nTa sznchroniyace o kterych mluvis jsou konflikty. Ty nastanou kdyz dva delaji na stejnem souboru na stejnzch radkach, pak se musi vzbrat jakou cast kodu si nechat - vyresit konflikt.\r\n\r\nIf/else... co jsem byl u SocialBakers tak tam nam rikali ze tam ty zavorky chteji, jinak jsme byli trestany :smile: (svacina sefovi).\r\n\r\nKomentare pisu strucne, koho zajima jak se to dela, at si precte kod. :smiley: \r\n\r\n@johnny-wolf Uz dela na dokumentaci, jeste jsem nevidel uplne nejnovejsi verzi se zmenama co si tu napsal."}}