private void buildFileMenu() {

		openItem = new JMenuItem("Abrir...");
		openItem.setMnemonic(KeyEvent.VK_O);
		openItem.addActionListener(new OpenListener());

		saveItem = new JMenuItem("Salvar");
		saveItem.setMnemonic(KeyEvent.VK_S);
		saveItem.addActionListener(new SaveListener());

		saveAsItem = new JMenuItem("Salvar Como...");
		saveAsItem.setMnemonic(KeyEvent.VK_A);
		saveAsItem.addActionListener(new SaveListener());

		fileMenu = new JMenu("Arquivo");
		fileMenu.setMnemonic(KeyEvent.VK_F);

		fileMenu.add(openItem);
		fileMenu.addSeparator();
		fileMenu.add(saveItem);
		fileMenu.add(saveAsItem);
		
		lexicoMenu = new JMenu("Léxico");
		lexicoMenu.setMnemonic(KeyEvent.VK_L);
		lexicoMenu.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(MouseEvent ev) {
				String codigo = editorText.getText();
				Lexico analisadorLexico = new Lexico(codigo);
				Token currentToken;
				List<Token> tokens = new LinkedList<Token>();
				try {
					//Adiciona cada token analisado à lista de tokens
					while((currentToken = analisadorLexico.nextToken()) != null)
						tokens.add(currentToken);
					
					//Mostra os tokens reconhecidos em uma janela separada
					JanelaAnaliseLexica.showTokens(tokens);
				} catch (LexicalError e) {
					//Faz o cursor ir para a posição do erro
					editorText.setCaretPosition(e.getPosition());
					
					//Adiciona um token falso para exibir o erro léxico
					//na tabela de tokens
					tokens.add(new Token(-1, e.getMessage(), e.getPosition()));
					
					//Mostra os tokens reconhecidos e o erro em uma janela separada
					JanelaAnaliseLexica.showTokens(tokens);
				}
			}
		});
		
		sintaticoMenu = new JMenu("Sintático");
		sintaticoMenu.setMnemonic(KeyEvent.VK_I);
		sintaticoMenu.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(MouseEvent ev) {
				String codigo = editorText.getText();
				Lexico analisadorLexico = new Lexico(codigo);
				Sintatico analisadorSintatico = new Sintatico();
				try {
					//Realiza a análise sintática
					analisadorSintatico.parse(analisadorLexico, null);
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							"Não possui erros sintáticos!", "Análise Sintática", 
							JOptionPane.INFORMATION_MESSAGE);
				} catch (SyntaticError e) {
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							e.getMessage(), "Erro Sintático", 
							JOptionPane.ERROR_MESSAGE);
					editorText.setCaretPosition(e.getPosition());
				} catch (LexicalError e) {
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							e.getMessage(), "Erro Léxico", 
							JOptionPane.ERROR_MESSAGE);
					editorText.setCaretPosition(e.getPosition());
				} catch (SemanticError e) {
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							e.getMessage(), "Erro Semântico", 
							JOptionPane.ERROR_MESSAGE);
					editorText.setCaretPosition(e.getPosition());
				}
			}
		});
		
		semanticoMenu = new JMenu("Semântico");
		semanticoMenu.setMnemonic(KeyEvent.VK_I);
		semanticoMenu.addMouseListener(new MouseListener(){
			@Override
			public void mouseReleased(MouseEvent e) {
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(MouseEvent ev) {
				String codigo = editorText.getText();
				Lexico analisadorLexico = new Lexico(codigo);
				Sintatico analisadorSintatico = new Sintatico();
				Semantico analisadorSemantico = new Semantico();
				try {
					analisadorSintatico.parse(analisadorLexico, analisadorSemantico);
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							"Não possui erros Semânticos!", "Análise Semântica", 
							JOptionPane.INFORMATION_MESSAGE);
				} catch (SyntaticError e) {
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							e.getMessage(), "Erro Sintático", 
							JOptionPane.ERROR_MESSAGE);
					editorText.setCaretPosition(e.getPosition());
				} catch (LexicalError e) {
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							e.getMessage(), "Erro Léxico", 
							JOptionPane.ERROR_MESSAGE);
					editorText.setCaretPosition(e.getPosition());
				} catch (SemanticError e) {
					JOptionPane.showMessageDialog(JanelaEditor.this, 
							e.getMessage(), "Erro Semântico", 
							JOptionPane.ERROR_MESSAGE);
					editorText.setCaretPosition(e.getPosition());
				}
			}
		});
		
		sobreMenu = new JMenu("Sobre");
		sobreMenu.setMnemonic(KeyEvent.VK_I);
		sobreMenu.addMouseListener(new MouseListener() {
			
			@Override
			public void mouseReleased(MouseEvent e) {
			}
			
			@Override
			public void mousePressed(MouseEvent e) {
			}
			
			@Override
			public void mouseExited(MouseEvent e) {
			}
			
			@Override
			public void mouseEntered(MouseEvent e) {
			}
			
			@Override
			public void mouseClicked(MouseEvent ev) {
				JOptionPane.showMessageDialog(JanelaEditor.this, 
						"Compilador - LSI-14/2" + "\nAnalisador Léxico, Sintático e Semântico\n"
						+ "-----------" + "\n2ª versão do compilador desenvolvido para a discipina"
						+ "\nINE5622 - Introdução à Compiladores"
						+ "\ndo curso de Sistemas de Informação" + "\nda Universidade Federal de Santa Catarina"
						+ "\n\nSegundo semestre do ano de 2014\n" 
						+ "\nProfessores:" + "\nOlinto José Varela Furtado" + "\nRicardo Azambuja Silveira"
						+ "\n-----------" 
						+ "\nAutores:"
						+ "\nAndré Victória Matias" + "\nGabriel Soares Costa", "Sobre", 
						JOptionPane.INFORMATION_MESSAGE);
			}
		});
		
	}