public void runCompiler(LpdFile lpdFile) { try { lexicon.lexicalAnalyser(lpdFile); } catch (LexiconException ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); flag++; } try { List <string> output = syntactic.syntacticAnalyser(lexicon, semantic); lpdFile.createAssemblyFile(output); } catch (LexiconException ex) { MessageBox.Show(ex.Message, "Erro Léxico", MessageBoxButtons.OK, MessageBoxIcon.Error); flag++; } catch (SyntacticException ex) { MessageBox.Show(ex.Message, "Erro Sintático", MessageBoxButtons.OK, MessageBoxIcon.Error); flag++; } catch (SemanticException ex) { MessageBox.Show(ex.Message, "Erro Semantico", MessageBoxButtons.OK, MessageBoxIcon.Error); flag++; } }
public Token trataPontuacao(LpdFile lpdFile) { Token token = new Token(); if (character == ';') { token.simbolo = "sponto_virgula"; } else if (character == ',') { token.simbolo = "svirgula"; } else if (character == '(') { token.simbolo = "sabre_parenteses"; } else if (character == ')') { token.simbolo = "sfecha_parenteses"; } else if (character == '.') { token.simbolo = "sponto"; } token.lexema = character.ToString(); token.line = lpdFile.currentLine + 1; character = lpdFile.getCharacter(); return(token); }
private void abrirToolStripMenuItem_Click(object sender, EventArgs e) { //dataGridView1.Rows.Clear(); lpdFile = new LpdFile(); int i = 1; string s; //define as propriedades do controle //OpenFileDialog this.openFileDialog1.Multiselect = true; this.openFileDialog1.Title = "Selecionar Arquivo"; openFileDialog1.InitialDirectory = @"C:\Dados\"; //filtra para exibir somente arquivos textos openFileDialog1.Filter = "Images (*.TXT)|*.TXT|" + "All files (*.*)|*.*"; openFileDialog1.CheckFileExists = true; openFileDialog1.CheckPathExists = true; openFileDialog1.FilterIndex = 1; openFileDialog1.RestoreDirectory = true; openFileDialog1.ReadOnlyChecked = true; openFileDialog1.ShowReadOnly = true; DialogResult dr = this.openFileDialog1.ShowDialog(); if (dr == System.Windows.Forms.DialogResult.OK) { try { lpdFile.name = openFileDialog1.FileName; FileStream fs = new FileStream(openFileDialog1.FileName, FileMode.Open, FileAccess.Read); StreamReader m_streamReader = new StreamReader(fs); // Lê o arquivo usando a classe StreamReader m_streamReader.BaseStream.Seek(0, SeekOrigin.Begin); // Lê cada linha do stream e faz o parse até a última linha this.richTextBox1.Text = ""; string strLine = m_streamReader.ReadLine(); while (strLine != null) { /*s = Convert.ToString(i); * if(i < 10)*/ this.richTextBox1.Text += strLine + "\n"; /* else * this.richTextBox1.Text += s+" "+ strLine + "\n";*/ strLine = m_streamReader.ReadLine(); i++; } // Fecha o stream m_streamReader.Close(); } catch (Exception ex) { MessageBox.Show("Erro : " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } } AddLineNumbers(); richTextBox2.Text = ""; }
public Token trataOperadorRelacional(LpdFile lpdFile) { Token token = new Token(); string operador = String.Copy(Char.ToString(character)); character = lpdFile.getCharacter(); if (character == '=') { operador = operador + character; character = lpdFile.getCharacter(); } token.lexema = operador; token.line = lpdFile.currentLine + 1; switch (operador) { case "<": token.simbolo = "smenor"; break; case ">": token.simbolo = "smaior"; break; case "=": token.simbolo = "sig"; break; case "!=": token.simbolo = "sdif"; break; case "<=": token.simbolo = "smenorig"; break; case ">=": token.simbolo = "smaiorig"; break; default: //throw new LexiconException(lpdFile.currentLine + 1); token.simbolo = "serro"; token.line = lpdFile.currentLine + 1; break; } return(token); }
public Token getToken(LpdFile lpdFile) { if (Char.IsNumber(character) == true) { return(trataDigito(lpdFile)); } else { if (Char.IsLetter(character) == true) { return(trataIdPalavraReservada(lpdFile)); } else { if (character == ':') { return(trataAtribuicao(lpdFile)); } else { if (character == '+' || character == '-' || character == '*') { return(trataOperadorAritmetico(lpdFile)); } else { if (character == '<' || character == '>' || character == '=' || character == '!') { return(trataOperadorRelacional(lpdFile)); } else { if (character == ';' || character == '(' || character == ')' || character == '.' || character == ',') { return(trataPontuacao(lpdFile)); } else { //throw new LexiconException(lpdFile.currentLine+1); Token tokenError = new Token(); tokenError.simbolo = "serro"; tokenError.line = lpdFile.currentLine + 1; return(tokenError); } } } } } } }
// Trata X public Token trataDigito(LpdFile lpdFile) { Token token = new Token(); string num; num = String.Copy(Char.ToString(character)); character = lpdFile.getCharacter(); while (Char.IsNumber(character)) { num = num + character; character = lpdFile.getCharacter(); } token.simbolo = "snumero"; token.lexema = num; token.line = lpdFile.currentLine + 1; return(token); }
public Token trataOperadorAritmetico(LpdFile lpdFile) { Token token = new Token(); if (character == '+') { token.simbolo = "smais"; } else if (character == '-') { token.simbolo = "smenos"; } else if (character == '*') { token.simbolo = "smult"; } token.lexema = character.ToString(); token.line = lpdFile.currentLine + 1; character = lpdFile.getCharacter(); return(token); }
public Token trataAtribuicao(LpdFile lpdFile) { Token token = new Token(); string atribuicao; atribuicao = String.Copy(Char.ToString(character)); character = lpdFile.getCharacter(); if (character == '=') { atribuicao = atribuicao + character; token.simbolo = "satribuicao"; character = lpdFile.getCharacter(); } else { token.simbolo = "sdoispontos"; } token.lexema = atribuicao; token.line = lpdFile.currentLine + 1; return(token); }
private void compilarToolStripMenuItem_Click(object sender, EventArgs e) { //dataGridView1.Rows.Clear(); richTextBox2.Text = ""; int index = 0; lpdFile = new LpdFile(); if (openFileDialog1.FileName != "") { lpdFile.name = openFileDialog1.FileName; } if (lpdFile.name == null) { //MessageBox.Show("Você precisa abrir um arquivo primeiro!\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); FileStream fs = new FileStream("temporary.txt", FileMode.Create, FileAccess.Write); StreamWriter m_streamWriter = new StreamWriter(fs); m_streamWriter.Flush(); // Escreve para o arquivo usando a classe StreamWriter m_streamWriter.BaseStream.Seek(0, SeekOrigin.Begin); // escreve no controle richtextbox m_streamWriter.Write(this.richTextBox1.Text); // fecha o arquivo m_streamWriter.Flush(); m_streamWriter.Close(); lpdFile.name = "temporary.txt"; } lpdFile.readFile(lpdFile.name); if (lpdFile.content.Count() == 0) { MessageBox.Show("Você precisa abrir um arquivo primeiro!\n", "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); } else { compiler = new Compiler(); compiler.runCompiler(lpdFile); if (compiler.returnError() != 0) { //int n = dataGridView1.Rows.Add(); //dataGridView1.Rows[n].Cells[0].Value = compiler.syntactic.line; //dataGridView1.Rows[n].Cells[1].Value = compiler.syntactic.message; richTextBox2.Text = "Linha " + compiler.syntactic.line + ":" + " " + compiler.syntactic.message; index = (compiler.syntactic.line - 1); try { richTextBox1.Select(richTextBox1.GetFirstCharIndexFromLine(index), richTextBox1.Lines[index].Length); richTextBox1.SelectionColor = Color.Red; } catch (Exception) { } } else { richTextBox2.Text = "Compilado com sucesso!"; } } }
public Token trataIdPalavraReservada(LpdFile lpdFile) { Token token = new Token(); string id; id = String.Copy(Char.ToString(character)); int line = lpdFile.currentLine; character = lpdFile.getCharacter(); while (Char.IsLetter(character) || Char.IsNumber(character) || character == '_') { if (line == lpdFile.currentLine) { id = id + character; character = lpdFile.getCharacter(); } else { break; } } token.lexema = id; token.line = lpdFile.currentLine + 1; switch (id) { case "programa": token.simbolo = "sprograma"; break; case "se": token.simbolo = "sse"; break; case "entao": token.simbolo = "sentao"; break; case "senao": token.simbolo = "ssenao"; break; case "enquanto": token.simbolo = "senquanto"; break; case "faca": token.simbolo = "sfaca"; break; case "inicio": token.simbolo = "sinicio"; break; case "fim": token.simbolo = "sfim"; break; case "escreva": token.simbolo = "sescreva"; break; case "leia": token.simbolo = "sleia"; break; case "var": token.simbolo = "svar"; break; case "inteiro": token.simbolo = "sinteiro"; break; case "booleano": token.simbolo = "sbooleano"; break; case "verdadeiro": token.simbolo = "sverdadeiro"; break; case "falso": token.simbolo = "sfalso"; break; case "procedimento": token.simbolo = "sprocedimento"; break; case "funcao": token.simbolo = "sfuncao"; break; case "div": token.simbolo = "sdiv"; break; case "e": token.simbolo = "se"; break; case "ou": token.simbolo = "sou"; break; case "nao": token.simbolo = "snao"; break; default: token.simbolo = "sidentificador"; break; } return(token); }
public void lexicalAnalyser(LpdFile lpdfile) { character = lpdfile.getCharacter(); int length = lpdfile.content.Length; Token token; while (!lpdfile.isEndOfFile()) { while ((character == '{' || character == '/' || character == ' ' || character == '\t') && !lpdfile.isEndOfFile()) { if (character == '{') { int beginCommentLine = lpdfile.currentLine; while (character != '}' && !lpdfile.isEndOfFile()) { character = lpdfile.getCharacter(); } if (character != '}') //throw new LexiconException(beginCommentLine + 1); { Token tokenError = new Token(); tokenError.simbolo = "serro_comentario"; tokenError.line = beginCommentLine + 1; listTokens.Add(tokenError); return; } character = lpdfile.getCharacter(); } if (character == '/') { character = lpdfile.getCharacter(); if (character == '*') { int starFlag = 0, beginCommentLine = lpdfile.currentLine; while ((character != '/' || starFlag != 1) && !lpdfile.isEndOfFile()) { character = lpdfile.getCharacter(); if (character == '*') { starFlag = 1; if (!lpdfile.isEndOfFile()) { character = lpdfile.getCharacter(); } if (character != '/') { starFlag = 0; } } } if (character != '/') //throw new LexiconException(beginCommentLine + 1); { Token tokenError = new Token(); tokenError.simbolo = "serro_comentario"; tokenError.line = beginCommentLine + 1; listTokens.Add(tokenError); return; } character = lpdfile.getCharacter(); } else { //throw new LexiconException(lpdfile.currentLine + 1); Token tokenError = new Token(); tokenError.simbolo = "serro"; tokenError.line = lpdfile.currentLine + 1; listTokens.Add(tokenError); return; } } while ((character == ' ' || character == '\t') && !lpdfile.isEndOfFile()) { character = lpdfile.getCharacter(); } } if (!lpdfile.isEndOfFile()) { try { token = getToken(lpdfile); listTokens.Add(token); if (token.simbolo == "serro") { return; } } catch (LexiconException ex) { MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); break; } } } }