penganalisis leksikal

hai teman-teman, saya pemula di Java :) jadi yang saya lakukan adalah saya mencoba membuat penganalisis leksikal menggunakan Java tetapi saya terjebak saat mencoba membaca karakter berikutnya dalam string. Saya mencoba menggunakan fungsi pencarian untuk memeriksa tetapi saya tidak tahu caranya menggunakannya di bagian utama. ini kodenya

 import java.util.*;
 import java.util.Scanner;

 public class LAnalyze{

public static int i;

public static void main(String[] args) {

    String s = "(3+4)*5";
    System.out.println("s = " + s);

    char[] chars = s.toCharArray();

    for (char i = 0; i < 8; i++) {
        if (i == 0) {
            i = s.charAt(0);
            lookup();

        }
    }
}

public int lookup() {

    switch (i) {
    case '(':
        System.out.println("Next Token = " + "'" + i + "'"
                + " Next lexeme = 25");
        break;
    case ')':
        System.out.println("Next Token = " + "'" + i + "'"
                + " Next lexeme = 26");
        break;
    case '+':
        System.out.println("Next Token = " + "'" + i + "'"
                + " Next lexeme = 21");
        break;
    case '-':
        System.out.println("Next Token = " + "'" + i + "'"
                + " Next lexeme = 22");
        break;
    case '*':
        System.out.println("Next Token = " + "'" + i + "'"
                + " Next lexeme = 23");
        break;
    case '/':
        System.out.println("Next Token = " + "'" + i + "'"
                + " Next lexeme = 24");
    default:
        System.out.println("Next Token = " + "'" + i + "'"
                + " Next lexeme = 20");
    }
    return 0;
}
 }



   /* the output is suppose to be something like this:

    Next Token = "(" Next lexeme = 25
    Next Token = "3" Next lexeme = 20
    Next Token = "+" Next lexeme = 21
    .
    .
    .
    Next Token = ")" Next lexeme = 26
     */

person Lu Yas    schedule 08.05.2012    source sumber


Jawaban (2)


Anda dapat melakukannya dengan kode berikut.

public static void main(String[] args) {

        String s = "(3+4)*5";
        System.out.println("s = " + s);

        char[] chars = s.toCharArray();

        for (int i = 0; i < chars.length ; i++) {
            //System.out.println("s = " + s);
            lookup(chars[i]);
        }
    }

    public static int lookup(int i) {

        switch (i) {
        case '(':
            System.out.println("Next Token = " + "'" + (char)i + "'"
                    + " Next lexeme = 25");
            break;
        case ')':
            System.out.println("Next Token = " + "'" + (char)i + "'"
                    + " Next lexeme = 26");
            break;
        case '+':
            System.out.println("Next Token = " + "'" + (char)i + "'"
                    + " Next lexeme = 21");
            break;
        case '-':
            System.out.println("Next Token = " + "'" + (char)i + "'"
                    + " Next lexeme = 22");
            break;
        case '*':
            System.out.println("Next Token = " + "'" + (char)i + "'"
                    + " Next lexeme = 23");
            break;
        case '/':
            System.out.println("Next Token = " + "'" + (char)i + "'"
                    + " Next lexeme = 24");
        default:
            System.out.println("Next Token = " + "'" + (char)i + "'"
                    + " Next lexeme = 20");
        }
        return 0;
    }

KELUARAN

s = (3+4)*5
Next Token = '(' Next lexeme = 25
Next Token = '3' Next lexeme = 20
Next Token = '+' Next lexeme = 21
Next Token = '4' Next lexeme = 20
Next Token = ')' Next lexeme = 26
Next Token = '*' Next lexeme = 23
Next Token = '5' Next lexeme = 20

Semoga ini bisa membantu Anda.

person Bhavik Ambani    schedule 08.05.2012
comment
Ya, terima kasih banyak! inilah tepatnya yang saya coba lakukan sepanjang waktu :) - person Lu Yas; 08.05.2012

Saya kira Anda perlu mengubah loop untuk benar-benar maju ke sel-sel array (saat ini Anda terus-menerus mengintip elemen pertama pada indeks ke-0):

public static void main(String[] args) {

    String s = "(3+4)*5";
    System.out.println("s = " + s);

    for (int i = 0; i < s.length(); i++) {
        char ch = s.charAt(i);
        lookup(ch);
    }
}

public static void lookup(char ch) {

    switch (ch) {
        case '(':
            // ...
    }
}
person Victor Sorokin    schedule 08.05.2012