{"id":20180383,"url":"https://github.com/ppcamp/compiler-class","last_synced_at":"2025-05-07T03:30:30.042Z","repository":{"id":102857161,"uuid":"306922384","full_name":"ppcamp/compiler-class","owner":"ppcamp","description":"Diretório para a linguagem MINI","archived":true,"fork":false,"pushed_at":"2020-10-29T13:35:30.000Z","size":320,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-03T05:43:41.260Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/ppcamp.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,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-10-24T16:15:54.000Z","updated_at":"2024-12-29T22:26:39.000Z","dependencies_parsed_at":"2023-03-11T05:30:17.922Z","dependency_job_id":null,"html_url":"https://github.com/ppcamp/compiler-class","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/ppcamp%2Fcompiler-class","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppcamp%2Fcompiler-class/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppcamp%2Fcompiler-class/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppcamp%2Fcompiler-class/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ppcamp","download_url":"https://codeload.github.com/ppcamp/compiler-class/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252806321,"owners_count":21807188,"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-11-14T02:30:28.383Z","updated_at":"2025-05-07T03:30:30.020Z","avatar_url":"https://github.com/ppcamp.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Compila^Iterpreta := :hammer_and_pick: Mini\n\nversão: 0.1\n\n_Projeto configurado em VScode._\n\n_Muitas informações estão contidas nos comentários, dá uma conferida lá_: [#Link](#Comentários)\n\n## Gramática da Linguagem Mini (a ser desenvolvida):\n\n\u003cpre\u003e\nprogram ::= program identifier body\nbody ::= [declare decl-list] begin stmt-list end\ndecl-list ::= decl {\";\" decl}\ndecl ::= type ident-list\nident-list ::= identifier {\",\" identifier}\ntype ::= integer\nstmt-list ::= stmt {\";\" stmt}\nstmt ::= assign-stmt | if-stmt | while-stmt\n| read-stmt | write-stmt\nassign-stmt ::= identifier \":=\" simple_expr\nif-stmt ::= if condition then stmt-list end\n| if condition then stmt-list else stmt-list end\ncondition ::= expression\nwhile-stmt ::= do stmt-list stmt-suffix\nstmt-suffix ::= while condition\nread-stmt ::= read \"(\" identifier \")\"\nwrite-stmt ::= write \"(\" writable \")\"\nwritable ::= simple-expr | literal\nexpression ::= simple-expr | simple-expr relop simple-expr\nsimple-expr ::= term | simple-expr addop term\n | \"(\" simple-expr \")\" ? simple-expr \":\" simple-expr\nterm ::= factor-a | term mulop factor-a\nfator-a ::= factor | not factor | \"-\" factor\nfactor ::= identifier | constant | \"(\" expression \")\"\nrelop ::= \"=\" | \"\u003e\" | \"\u003e=\" | \"\u003c\" | \"\u003c=\" | \"\u003c\u003e\"\naddop ::= \"+\" | \"-\" | or\nmulop ::= \"*\" | \"/\" | mod | and\nshiftop ::= \"\u003c\u003c\" | \"\u003e\u003e\" | \"\u003c\u003c\u003c\" | \"\u003e\u003e\u003e\"\nconstant ::= digit {digit}\nliteral ::= \" “\" {caractere} \"”\"\nidentifier ::= letter {letter | digit}\nletter ::= \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" | \"H\" | \"I\" | \"J\"\n| \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" | \"Q\" | \"R\" | \"S\" | \"T\"\n| \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" | \"Z\" | \"a\" | \"b\" | \"c\" | \"d\"\n| \"e\" | \"f\" | \"g\" | \"h\" | \"i\" | \"j\" | \"k\" | \"l\" | \"m\" | \"n\"\n| \"o\" | \"p\" | \"q\" | \"r\" | \"s\" | \"t\" | \"u\" | \"v\" | \"w\" | \"x\"\n| \"y\" | \"z\"\ndigit ::= \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\"\ncaractere ::= um dos 256 caracteres do conjunto ASCII, exceto \"\n\u003c/pre\u003e\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n**Outras características de Mini**\n\n-   As palavras-chave de Mini são reservadas.\n\n-   Toda variável deve ser declarada antes do seu uso.\n\n-   A semântica dos demais comandos e expressões é a tradicional do Pascal.\n\n-   Entrada e saída de Mini estão limitadas ao teclado e à tela de seu computador.\n\n-   Comentários de uma linha em Mini começam com %\n\n\u003cbr/\u003e\n\n**# Testes:**\n\n\u003cpre\u003e\nTeste 1:\nprogram teste1\ndeclare\n integer a, b, c;\n integer result;\nbegin\n read (a);\n read (c);\n b := 10;\n result := (a * c)/(b + 5 % 345 -3) ;\n write(result)\nend\n\nTeste 2:\nprogram teste2\ndeclarando\n integer a;\n integer b;\n integer c;\nbegin\n read (a);\n b := a * a;\n c := b + a/2 * (3 + 5);\n write(c)\nend;\n\nTeste 3:\nprogram teste3\ndeclare\n integer id, qtd, cont, soma;\nbegin\n qtd := 5;\n cont := 5;\n soma := 0;\n do\n write(“Idade: ”);\n read (id);\n soma := soma # id;\n cont := cont – 1;\n while(cont \u003e 0);\n write(“Media: ”);\n write (soma / qtd);\nend\n\nTeste 4:\nprogram teste4\ndeclare\n integer i, j, k, _var1;\nbegin\n i := 4 * (5-3) * -50 / 10;\n j := i * 10;\n k := i* j / k;\n k := -4 + 3 $;\n write(i);\n write(j);\n write(k);\nend\n\nTeste 5:\nprogram teste5\n% programa com if\ndeclare\n integer j, k;\n begin\n read(j);\n read(k);\n if (k \u003c\u003e 0) then\n result := j/k\n else\n result := 0\n end\nend\n\nTeste 6:\nprogram teste6\ndeclare\n integer a, b, c, maior;\nbegin\n read(a);\n read(b);\n read(c);\n % identifica o maior\n if ( a\u003eb and a\u003ec ) then\n maior := a\n else\n if (b\u003ec) then\n maior := b\n else\n maior := c\n end\n end;\n write(maior);\nend\n\nTeste 7:\nprogram teste6\ndeclare\n integer a, b, c, maior;\nbegin\n read(a);\n read(b);\n read(c);\n % identifica o maior\n maior:= (a\u003eb and a\u003ec)?a:(b\u003ec)?b:c;\n write(maior);\nend\n\u003c/pre\u003e\n\n---\n\n\u003cbr/\u003e\u003cbr/\u003e\n\n## Comentários:\n\n\u003e @ppcamp\n\u003e\n\u003e O código padrão de exemplo é o codigo.mini, caso seja necessário, pode adicionar outros com outro nome e editar o nome padrão na main.\n\n\u003e @ppcamp\n\u003e\n\u003e Como precisamos que o código rode no replt, devemos compilar ele para uma versão mais antiga [(clique aqui)](https://stackoverflow.com/questions/47457105/class-has-been-compiled-by-a-more-recent-version-of-the-java-environment) para ver essas versões.\n\u003e ```bash\n\u003e # Para compilar/executar o Projeto\n\u003e \u003e\u003e cd src\n\u003e \u003e\u003e jflex Mini.jflex # Gera a classe léxica\n\u003e \u003e\u003e cd ..\n\u003e \u003e\u003e javac -target 11 -source 11 MiniLexicalAnalyzer.java -d bin\n\u003e \u003e\u003e java -classpath bin MiniLexicalAnalyzer\n\u003e ```\n\n\u003e @ppcamp\n\u003e\n\u003e ```bash\n\u003e # Para compilar o Jflex\n\u003e \u003e\u003e jflex Mini.jflex\n\u003e \u003e\u003e javac LexicalAnalyzer.java\n\u003e \u003e\u003e java LexicalAnalyzer code_samples/\n\u003e ```\n\n\u003e @ppcamp\n\u003e\n\u003e [Pascal ref](http://www.pascal-central.com/ppl/chapter3.html)\n\n\u003e @ppcamp\n\u003e\n\u003e [Jflex tutorial](https://www.youtube.com/watch?v=IV1Rwq7ERR4\u0026ab_channel=MiftaSintaha \"Vídeo\")\n\u003e\n\u003e [Jflex tuto 2](https://johnidm.gitbooks.io/compiladores-para-humanos/content/part2/building-the-first-lexical-analyzer-with-JFlex.html)\n\n\u003e @ppcamp\n\u003e\n\u003e Links e configurações:\n\u003e\n\u003e -   [Markdown](https://guides.github.com/features/mastering-markdown/)\n\u003e\n\u003e -   [Jflex](https://www.youtube.com/watch?v=WLHn5JzLx6I\u0026ab_channel=D.KAl \"Como instalar\")\n\u003e\n\u003e -   [Chocolatey (apt para windows)](https://chocolatey.org/install)\n\u003e\n\u003e -   Java (no choco): digite `choco install openjdk` no powershell como adm.\n\n\u003e @ppcamp\n\u003e\n\u003e **Instale as extensões recomendadas:** `@recommended`. Modificações sempre em stack.\n\n```\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppcamp%2Fcompiler-class","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fppcamp%2Fcompiler-class","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppcamp%2Fcompiler-class/lists"}