Sunteți pe pagina 1din 2

Programare Orientata pe Obiecte L A B O R A T O R 2a Operatii cu siruri de caractere 1.

Sa se defineasca o clasa "WordTok" pentru extragerea cuvintelor formate numai din litere dintr-un text, fara a utiliza un obiect StringTokenizer. Un cuvant se termina la primul caracter diferit de litera. Caracterele care nu sunt litere sunt ignorate. Constructor: WordTok (String text); Metode publice: boolean hasMoreTokens(); // daca mai sunt cuvinte String nextToken(); // urmatorul cuvant Exemplu: Sir dat: unu = ( doi+trei+23 ) Cuvinte: unu,doi,trei Pentru a verifica daca un caracter c este litera se poate folosi metoda statica Character.isLetter(c). 2. Sa se defineasca o clasa "Parser" pentru extragerea elementelor lexicale dintr-un text sursa si indicarea tipului elementului extras. Tipuri recunoscute: 1=cuvant format numai din litere, 2= numar (intreg) format numai din cifre, 3= caracter special. Spatiile albe se ignora, deci nu sunt transmise de metoda "next". Nu se vor folosi clasele StreamTokenizer sau StringTokenizer. Exemplu: Sir initial: (x+10)/3*y Rezultate: "("=3, "x"=1, "+"=3, "10"=2, ")"=3, "/"=3,"3"=2,"*"=3,"y"=1 Constructor: Parser (String text); Metode publice: boolean hasNext(), String next(), int getType() Se pot folosi metode statice din clasa "Character": isDigit(char c), isLetter(char c), isLetterOrDigit(char c) Sa se verifice metodele clasei pe diferite expresii aritmetice. 3. Sa se defineasca o clasa "Parser", cu o variabila "StringTokenizer", pentr u un analizor lexical de instructiuni de atribuire. Constructor cu argument sirul analizat (String). Atomii lexicali sunt: nume simbolic (tipul 1),numere (tipul 2), operatori aritmetici binari si de atribuire (tipul 3). Constructor: Parser (String expr); // expr = instructiune analizata Metode publice: boolean hasNext(); // daca mai exista atomi String next (); // urmatorul atom int type(); // tip atom: 1=nume, 2=numar, 3=operator Intre atomii lexicali pot exista sau nu spatii albe. Indicatie: Se vor considera ca delimitatori cei 5 operatori: +,-,*,/,= si se va folosi constructorul cu 3 argumente din "StringTokenizer". Secventa pentru verificare: Parser p = new Parser (" beta =(5.23 + alfa*4.2 - 0.3333 ");

while ( p.hasNext()) System.out.println(p.next()+" : "+p.type()); Pentru a verifica daca un sir reprezinta un numar corect se poate utiliza functia urmatoare: private boolean isNumber (String s) { boolean r=true; try { Double.parseDouble(s); } catch (NumberFormatException e) { r=false; } return r; }

S-ar putea să vă placă și