{"id":20180394,"url":"https://github.com/ppcamp/java-lexical-analyser","last_synced_at":"2025-05-07T03:30:30.232Z","repository":{"id":114434554,"uuid":"442859577","full_name":"ppcamp/java-lexical-analyser","owner":"ppcamp","description":"A Java lexical analyser developed to Compiler class","archived":true,"fork":false,"pushed_at":"2021-12-29T18:35:20.000Z","size":278,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T05:43:44.160Z","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":"2021-12-29T18:34:28.000Z","updated_at":"2025-01-13T22:39:59.000Z","dependencies_parsed_at":"2023-03-15T12:31:02.133Z","dependency_job_id":null,"html_url":"https://github.com/ppcamp/java-lexical-analyser","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%2Fjava-lexical-analyser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppcamp%2Fjava-lexical-analyser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppcamp%2Fjava-lexical-analyser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppcamp%2Fjava-lexical-analyser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ppcamp","download_url":"https://codeload.github.com/ppcamp/java-lexical-analyser/tar.gz/refs/heads/main","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:37.986Z","updated_at":"2025-05-07T03:30:30.201Z","avatar_url":"https://github.com/ppcamp.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Compila^Iterpreta := :hammer_and_pick: Mini\r\n\r\nversão: 0.1\r\n\r\n_Projeto configurado em VScode._\r\n\r\n_Muitas informações estão contidas nos comentários, dá uma conferida lá_: [#Link](#Comentários)\r\n\r\n## Gramática da Linguagem Mini (a ser desenvolvida):\r\n\r\n\u003cpre\u003e\r\nprogram ::= program identifier body\r\nbody ::= [declare decl-list] begin stmt-list end\r\ndecl-list ::= decl {\";\" decl}\r\ndecl ::= type ident-list\r\nident-list ::= identifier {\",\" identifier}\r\ntype ::= integer\r\nstmt-list ::= stmt {\";\" stmt}\r\nstmt ::= assign-stmt | if-stmt | while-stmt\r\n| read-stmt | write-stmt\r\nassign-stmt ::= identifier \":=\" simple_expr\r\nif-stmt ::= if condition then stmt-list end\r\n| if condition then stmt-list else stmt-list end\r\ncondition ::= expression\r\nwhile-stmt ::= do stmt-list stmt-suffix\r\nstmt-suffix ::= while condition\r\nread-stmt ::= read \"(\" identifier \")\"\r\nwrite-stmt ::= write \"(\" writable \")\"\r\nwritable ::= simple-expr | literal\r\nexpression ::= simple-expr | simple-expr relop simple-expr\r\nsimple-expr ::= term | simple-expr addop term\r\n | \"(\" simple-expr \")\" ? simple-expr \":\" simple-expr\r\nterm ::= factor-a | term mulop factor-a\r\nfator-a ::= factor | not factor | \"-\" factor\r\nfactor ::= identifier | constant | \"(\" expression \")\"\r\nrelop ::= \"=\" | \"\u003e\" | \"\u003e=\" | \"\u003c\" | \"\u003c=\" | \"\u003c\u003e\"\r\naddop ::= \"+\" | \"-\" | or\r\nmulop ::= \"*\" | \"/\" | mod | and\r\nshiftop ::= \"\u003c\u003c\" | \"\u003e\u003e\" | \"\u003c\u003c\u003c\" | \"\u003e\u003e\u003e\"\r\nconstant ::= digit {digit}\r\nliteral ::= \" “\" {caractere} \"”\"\r\nidentifier ::= letter {letter | digit}\r\nletter ::= \"A\" | \"B\" | \"C\" | \"D\" | \"E\" | \"F\" | \"G\" | \"H\" | \"I\" | \"J\"\r\n| \"K\" | \"L\" | \"M\" | \"N\" | \"O\" | \"P\" | \"Q\" | \"R\" | \"S\" | \"T\"\r\n| \"U\" | \"V\" | \"W\" | \"X\" | \"Y\" | \"Z\" | \"a\" | \"b\" | \"c\" | \"d\"\r\n| \"e\" | \"f\" | \"g\" | \"h\" | \"i\" | \"j\" | \"k\" | \"l\" | \"m\" | \"n\"\r\n| \"o\" | \"p\" | \"q\" | \"r\" | \"s\" | \"t\" | \"u\" | \"v\" | \"w\" | \"x\"\r\n| \"y\" | \"z\"\r\ndigit ::= \"0\" | \"1\" | \"2\" | \"3\" | \"4\" | \"5\" | \"6\" | \"7\" | \"8\" | \"9\"\r\ncaractere ::= um dos 256 caracteres do conjunto ASCII, exceto \"\r\n\u003c/pre\u003e\r\n\r\n\u003cbr/\u003e\u003cbr/\u003e\r\n\r\n**Outras características de Mini**\r\n\r\n-   As palavras-chave de Mini são reservadas.\r\n\r\n-   Toda variável deve ser declarada antes do seu uso.\r\n\r\n-   A semântica dos demais comandos e expressões é a tradicional do Pascal.\r\n\r\n-   Entrada e saída de Mini estão limitadas ao teclado e à tela de seu computador.\r\n\r\n-   Comentários de uma linha em Mini começam com %\r\n\r\n\u003cbr/\u003e\r\n\r\n**# Testes:**\r\n\r\n\u003cpre\u003e\r\nTeste 1:\r\nprogram teste1\r\ndeclare\r\n integer a, b, c;\r\n integer result;\r\nbegin\r\n read (a);\r\n read (c);\r\n b := 10;\r\n result := (a * c)/(b + 5 % 345 -3) ;\r\n write(result)\r\nend\r\n\r\nTeste 2:\r\nprogram teste2\r\ndeclarando\r\n integer a;\r\n integer b;\r\n integer c;\r\nbegin\r\n read (a);\r\n b := a * a;\r\n c := b + a/2 * (3 + 5);\r\n write(c)\r\nend;\r\n\r\nTeste 3:\r\nprogram teste3\r\ndeclare\r\n integer id, qtd, cont, soma;\r\nbegin\r\n qtd := 5;\r\n cont := 5;\r\n soma := 0;\r\n do\r\n write(“Idade: ”);\r\n read (id);\r\n soma := soma # id;\r\n cont := cont – 1;\r\n while(cont \u003e 0);\r\n write(“Media: ”);\r\n write (soma / qtd);\r\nend\r\n\r\nTeste 4:\r\nprogram teste4\r\ndeclare\r\n integer i, j, k, _var1;\r\nbegin\r\n i := 4 * (5-3) * -50 / 10;\r\n j := i * 10;\r\n k := i* j / k;\r\n k := -4 + 3 $;\r\n write(i);\r\n write(j);\r\n write(k);\r\nend\r\n\r\nTeste 5:\r\nprogram teste5\r\n% programa com if\r\ndeclare\r\n integer j, k;\r\n begin\r\n read(j);\r\n read(k);\r\n if (k \u003c\u003e 0) then\r\n result := j/k\r\n else\r\n result := 0\r\n end\r\nend\r\n\r\nTeste 6:\r\nprogram teste6\r\ndeclare\r\n integer a, b, c, maior;\r\nbegin\r\n read(a);\r\n read(b);\r\n read(c);\r\n % identifica o maior\r\n if ( a\u003eb and a\u003ec ) then\r\n maior := a\r\n else\r\n if (b\u003ec) then\r\n maior := b\r\n else\r\n maior := c\r\n end\r\n end;\r\n write(maior);\r\nend\r\n\r\nTeste 7:\r\nprogram teste6\r\ndeclare\r\n integer a, b, c, maior;\r\nbegin\r\n read(a);\r\n read(b);\r\n read(c);\r\n % identifica o maior\r\n maior:= (a\u003eb and a\u003ec)?a:(b\u003ec)?b:c;\r\n write(maior);\r\nend\r\n\u003c/pre\u003e\r\n\r\n---\r\n\r\n\u003cbr/\u003e\u003cbr/\u003e\r\n\r\n## Comentários:\r\n\r\n\u003e @ppcamp\r\n\u003e\r\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.\r\n\r\n\u003e @ppcamp\r\n\u003e\r\n\u003e ```bash\r\n\u003e # Para compilar/executar o Projeto\r\n\u003e \u003e\u003e cd src\r\n\u003e \u003e\u003e jflex Mini.jflex # Gera a classe léxica\r\n\u003e \u003e\u003e cd ..\r\n\u003e \u003e\u003e javac MiniLexicalAnalyzer.java -d bin\r\n\u003e \u003e\u003e cd bin\r\n\u003e \u003e\u003e java MiniLexicalAnalyzer\r\n\u003e ```\r\n\r\n\u003e @ppcamp\r\n\u003e\r\n\u003e ```bash\r\n\u003e # Para compilar o Jflex\r\n\u003e \u003e\u003e jflex Mini.jflex\r\n\u003e \u003e\u003e javac LexicalAnalyzer.java\r\n\u003e \u003e\u003e java LexicalAnalyzer code_samples/\r\n\u003e ```\r\n\r\n\u003e @ppcamp\r\n\u003e\r\n\u003e [Pascal ref](http://www.pascal-central.com/ppl/chapter3.html)\r\n\r\n\u003e @ppcamp\r\n\u003e\r\n\u003e [Jflex tutorial](https://www.youtube.com/watch?v=IV1Rwq7ERR4\u0026ab_channel=MiftaSintaha \"Vídeo\")\r\n\u003e\r\n\u003e [Jflex tuto 2](https://johnidm.gitbooks.io/compiladores-para-humanos/content/part2/building-the-first-lexical-analyzer-with-JFlex.html)\r\n\r\n\u003e @ppcamp\r\n\u003e\r\n\u003e Links e configurações:\r\n\u003e\r\n\u003e -   [Markdown](https://guides.github.com/features/mastering-markdown/)\r\n\u003e\r\n\u003e -   [Jflex](https://www.youtube.com/watch?v=WLHn5JzLx6I\u0026ab_channel=D.KAl \"Como instalar\")\r\n\u003e\r\n\u003e -   [Chocolatey (apt para windows)](https://chocolatey.org/install)\r\n\u003e\r\n\u003e -   Java (no choco): digite `choco install openjdk` no powershell como adm.\r\n\r\n\u003e @ppcamp\r\n\u003e\r\n\u003e **Instale as extensões recomendadas:** `@recommended`. Modificações sempre em stack.\r\n\r\n```\r\n\r\n```\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppcamp%2Fjava-lexical-analyser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fppcamp%2Fjava-lexical-analyser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppcamp%2Fjava-lexical-analyser/lists"}