Para entender como funciona a usabilidade da linguagem da Morgana consulte o passo a passo a seguir. Esta linguagem foi desenvolvida na disciplina de compiladores. A linguagem está completa, feita a construção da linguagem léxica, sintática e semântica.
Baixe a pasta win_flex_bison-2.5.24 no Drive para instalar duas ferrementas usadas:
- Flex
- Bison
Para conferir corretamente se as extensões flex e bison foram reconhecidas como variaveis de ambiente, basta abrir o cmd:
Obs: o caminho inserido no PATH da variavel de ambiente pode ser: C:\win_flex_bison-2.5.24
> flex --version
flex 2.6.4
> bison --version
bison (GNU Bison) 3.7.4
Written by Robert Corbett and Richard Stallman.
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Inicio
@@ ...
/* ... */
Fim do programa
@@ para comentar uma linha, adicione dois arrobas na frente da linha
/* ... */
- int: aceita um número inteiro
int num = 7
- float: aceita um número real
float a = 10.0
- string: aceita uma letra minusculo ou maiusculo
var1 = "m"
- string: aceita uma string minusculo ou maiusculo
nome = "morgana"
- com um caractere
float a
- mais de um caractere
float soma
- o nome da variavel inicia com letra, seguinte de um número ou um '_'
float area1
- sequência de declarações do tipo inteiro
int num = 8, num2 = 10, num3 = 20
- sequência de declarações do tipo real
float a = 10.0, b = 10.5, c = 30.5, area = a * b * c
- sequência de declarações do tipo texto
string nome = "morgana", nome2 = "marcos"
- declarações do tipo vetor para variavel inteira, float e string
int vetIn[10]
float vetFn[10]
string vetS[5]
a = 5
b = 5
c = 10
area = a * b * c
escreva("Olá Mundo!")
escreva("O valor de a: ", a, "\n")
escreva("O valor de b: ", b, "\n")
escreva("Soma de a + b", a + b, "\n")
escreva("O vet3[0] = ", vet3[0], "\n")
escreva("O vet3[1] = ", vet3[1], "\n")
escreva("O vet3[2] = ", vet3[2], "\n")
float altura
escreva("Digite sua altura: ")
leia(altura)
escreva("") @@ escrevendo vazio na tela
escreva("") /* ... */
/* escreva("")
escreva("")
*/
escreva("Soma: ")
escreva(5.0 + 10.0)
escreva("Subtração: ")
escreva(5.0 - 10.0)
escreva("Multiplicação: ")
escreva(5.0 * 10.0)
escreva("Divisão: ")
escreva(5.0 / 10.0)
escreva("Exponenciação: ")
escreva(5.0 ^ 10.0)
escreva("Radiciação: ")
escreva(raiz(4))
escreva("Módulo:")
escreva(|-10|)
IF (n==2) {
escreva(primeiroTermo," ", segundoTermo, "\n")
}
IF (n==2) {
escreva(primeiroTermo," ", segundoTermo, "\n")
} ELSE {
escreva(primeiroTermo," ", segundoTermo, " ")
}
int a, b
leitura(a)
leitura(b)
IF(a > b){
WHILE(a*a>b){
a--
escreva("A", "\n")
}
}ELSE{
escreva("B")
}
int num = 5
num > 0 ? num++ : num-- ;
escreva("ternario:", num, "\n")
int x
FOR (x = 1; x <= 10; x++) {
escreva(x, "\n")
}
int vetIn[10]
int i
FOR (i = 0; i < 10; i++) {
leitura(vetIn[i])
}
FOR (i = 0; i < 10; i++) {
IF (vetIn[i] <= 0) {
vetIn[i] = 1
}
}
FOR (i = 0; i < 10; i++) {
escreva("X [", i, "] = ", vetIn[i])
}
int vet1[2]
int k = 1, l = 2
string vet4[5]
string nome = "morgana", nome2 = "morg", nome3 = "morgan"
vet4[1] = nome
vet4[2] = nome2
vet4[3] = nome3
vet1[0] = k
vet1[1] = l
escreva("O k = ", k, "O l = ", l) @@ int
escreva("\n", vet4[1], vet4[2], vet4[3]) @@ string
escreva(vet1[0]) @@ int
escreva(vet1[1]) @@ int
void function teste() {
escreva("=========================")
int m = 3, n = 5, soma = m + n
escreva("A soma de m e n: ", soma)
}
teste() @@ chamada da funcao acima
- 1°: Parênteses
- 2°: Exponenciação
- 3°: Multiplicação e divisão tem mesmo grau de precedência
- 4°: Soma e subtração tem mesmo grau de precedência
- 5º: Expressões lógicas
escreva(((a / b) + (a * b) - 1))
Exemplo URI Online Judge - Substituição em Vetor I abaixo:
- Faça um programa que leia um vetor X[10]. Substitua a seguir, todos os valores nulos e negativos do vetor X por 1. Em seguida mostre o vetor X.
- A entrada contém 10 valores inteiros, podendo ser positivos ou negativos.
- Para cada posição do vetor, escreva "X[i] = x", onde i é a posição do vetor e x é o valor armazenado naquela posição.
Inicio
int vetIn[10], i
void function vector(){
escreva("=======================================","\n", "| Substituicao em Vetor I - URI - 1172|", "\n")
escreva("=======================================","\n")
}
vector() @@ chamada da funcao
escreva("Determine os elementos que compoe cada posicao do vetor",":","\n")
FOR (i = 0; i < 10; i++) {
leitura(vetIn[i])
}
FOR (i = 0; i < 10; i++) {
IF (vetIn[i] <= 0) {
vetIn[i] = 1
}
}
FOR (i = 0; i < 10; i++) {
escreva("X [", i, "] = ", vetIn[i])
}
Fim do programa
Fim do programa
Exemplo URI Online Judge - Fibonacci Fácil abaixo:
- A seguinte sequência de números 0 1 1 2 3 5 8 13 21... é conhecida como série de Fibonacci. Nessa sequência, cada número, depois dos 2 primeiros, é igual à soma dos 2 anteriores. Escreva um algoritmo que leia um inteiro N (N < 46) e mostre os N primeiros números dessa série.
- O arquivo de entrada contém um valor inteiro N (0 < N < 46).
- Os valores devem ser mostrados na mesma linha, separados por um espaço em branco. Não deve haver espaço após o último valor.
Inicio
Inicio
void function fib(){
escreva("===============================","\n", "| Fibonnaci Facil - URI - 1151|", "\n")
escreva("===============================","\n")
}
fib() @@ chamada da funcao para mostrar o titulo da questao
int n, i = 3, primeiroTermo = 0, segundoTermo = 1, proximoTermo
escreva("Escreva um valor inteiro para N:", "\n")
leitura(n) /* Numero inteiro */
IF (n==0) {
escreva("Fib(0) = ", n, "\n")
}
IF (n==1) {
escreva("Fib(1) = ", primeiroTermo, "\n")
} ELSE {
IF (n==2) {
escreva(primeiroTermo," ", segundoTermo, "\n")
}ELSE {
escreva(primeiroTermo," ", segundoTermo, " ")
} WHILE (i<=n){
proximoTermo = primeiroTermo + segundoTermo
primeiroTermo = segundoTermo
segundoTermo = proximoTermo
IF (i==n) {
escreva(proximoTermo, "\n")
} ELSE {
escreva(proximoTermo, " ")
}
i++
}
}
Fim do programa