Estou criando um editor de texto, e gostaria que ele reconhece a linguagem Java. Ex:
Se eu escrever public class em um editor de texto comum, o texto fica preto.
Mas se o editor de texto puder reconhecer a linguagem Java, a palavra public class fica com uma cor diferente, que pode ser definida por mim.
Alguém poderia me ajudar???
Acredito que antes de tudo você deve fazer um levantamento de todas as palavras chaves/reservadas da linguagem. Feito isso avalie como será validado tudo que for digitado e análise uma maneira de verificar se o que foi digitado faz ou não parte das palavras que você estabeleceu como reservadas.
Em que linguagem você está desenvolvendo este editor?
Estou usando o Java mesmo. Esse editor é um app que eu quero fazer pra android.
Estude um pouco de syntax highlight… Isso te ajudará a entender como funciona isso.
Pode me indicar algum post ou artigo referente ao que você disse?
“Reconhecesse”, é isso?
Procurando por “syntax highlighting java”, achei isto:
http://fifesoft.com/rsyntaxtextarea/
Veja se você não pode se inspirar nesse componente (não sei qual é o seu problema, se isso é um trabalho de escola, ou se você pode usar algo pronto).
[quote=uchiha itachi-san]Estou criando um editor de texto, e gostaria que ele reconhece a linguagem Java. Ex:
Se eu escrever public class em um editor de texto comum, o texto fica preto.
Mas se o editor de texto puder reconhecer a linguagem Java, a palavra public class fica com uma cor diferente, que pode ser definida por mim.
Alguém poderia me ajudar???[/quote]
Bom, eu nunca escrevi um editor com syntax highlight antes, mas eu aposto 1 coca-cola que você vai precisar, no mínimo aplicar alguma teoria de construção de compiladores. Se você quer destacar apenas as palavras reservadas por exemplo, eu imagino que expressões regulares serão mais do que suficientes. Mas se você precisar ir além, é possível que você precise trabalhar também com linguagens livres de contexto, etc. Acho que uma lida rápida sobre o assunto pode te ajudar muito.
O Terminal IDE tem syntax highlight e é opensource. Você poderia estudar o código dele pra ter uma noção também.
http://code.google.com/p/terminal-ide/
[EDIT] Agora que lembrei, ele usa o vim para edição dos fontes. Mas mesmo assim vale a pena você dar uma olhada nele porque pode até usá-lo como base para o seu app.
Outro editor animal é o AIDE. Ele não é opensource, mas você pode buscar algumas (boas) ideias dando uma olhada nele também.
Para syntax highlighting funcionar eficientemente, não recomendaria expressões regulares, mas um analisador léxico (que pode ser escrito à mão mesmo, não é difícil escrever um para Java).
Uma coisa que você tem de tomar cuidado é que
public class Teste
é mostrado de forma diferente de
/* public class Teste */
e também
"public class Teste"
Ou seja, não basta só localizar as palavras. Você precisa saber um pouco da sintaxe da linguagem para mostrar corretamente as cores.
[quote=entanglement]Para syntax highlighting funcionar eficientemente, não recomendaria expressões regulares, mas um analisador léxico (que pode ser escrito à mão mesmo, não é difícil escrever um para Java).
Uma coisa que você tem de tomar cuidado é que
public class Teste
é mostrado de forma diferente de
/* public class Teste */
e também
"public class Teste"
Ou seja, não basta só localizar as palavras. Você precisa saber um pouco da sintaxe da linguagem para mostrar corretamente as cores. [/quote]
Ué, e por um analisador léxico não é um reconhecedor de expressões regulares não ?
Você pode escrever uma gramática para um analisador léxico que não possa ser representada de maneira trivial por expressões regulares.
OK, muitos geradores de analisadores léxicos (como o lex, ou então flex) permitem definir os tokens da gramática usando exatamente expressões regulares para a definição.
Mas um analisador léxico não é sempre um “analisador de expressões regulares”; dependendo da gramática isso não é possível.
Uma forma trivial de você não conseguir definir um analisador léxico só com expressões regulares é quando a gramática é muito dependente de contexto. Por exemplo, é possível escrever um analisador léxico que interprete a mesma palavra como um identificador ou uma palavra reservada dependendo da análise sintática (contexto) da linguagem. E isso não é uma coisa que seja possível com expressões regulares puras.
Obrigado pela ajuda de todos. Se conseguir a solução eu posto aki.
[quote=Ataxexe]O Terminal IDE tem syntax highlight e é opensource. Você poderia estudar o código dele pra ter uma noção também.
http://code.google.com/p/terminal-ide/
[EDIT] Agora que lembrei, ele usa o vim para edição dos fontes. Mas mesmo assim vale a pena você dar uma olhada nele porque pode até usá-lo como base para o seu app.
Outro editor animal é o AIDE. Ele não é opensource, mas você pode buscar algumas (boas) ideias dando uma olhada nele também.[/quote]
Hoje de madrugada eu havia baixado esse apk, mas não sabia que era opensource. Vou baixar e estudar ele, valeu!!