เครื่องวิเคราะห์คำศัพท์

สวัสดี ฉันเป็นมือใหม่ใน Java :) ดังนั้นสิ่งที่ฉันทำคือฉันกำลังพยายามสร้างตัววิเคราะห์คำศัพท์โดยใช้ Java แต่ฉันติดอยู่กับการพยายามอ่านอักขระถัดไปในสตริง ฉันพยายามใช้ฟังก์ชันการค้นหาเพื่อตรวจสอบ แต่ฉันไม่รู้วิธี ใช้มันเป็นหลัก นี่คือรหัส

 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 แหล่งที่มา


คำตอบ (2)


คุณสามารถทำได้โดยใช้รหัสต่อไปนี้

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;
    }

เอาต์พุต

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

หวังว่านี่จะช่วยคุณได้

person Bhavik Ambani    schedule 08.05.2012
comment
ใช่แล้ว ขอบคุณมาก! นี่คือสิ่งที่ฉันพยายามทำมาตลอด :) - person Lu Yas; 08.05.2012

ฉันเดาว่าคุณต้องเปลี่ยนการวนซ้ำเพื่อเลื่อนไปเหนือเซลล์ของอาเรย์ (ปัจจุบันคุณดูองค์ประกอบแรกที่ดัชนี 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