簡體   English   中英

Java 初學者詞法分析器

[英]beginner lexical analyzer in java

我正在寫一個詞法分析器。 我知道這非常簡單。 它運行但每當輸入輸入時,程序將其視為無效字符(即使它們應該是有效的)。 我做錯了什么?

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

public class LAnalyze{

    public static int i;

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        String s;


        System.out.println("Input something to lexically analyze:  ");
        s = input.next( );
        int j = 1;

        if( s.charAt(i)!='a'||s.charAt(i)!='b'||s.charAt(i)!='c'||s.charAt(i)!='d'||s.charAt(i)!='e'||s.charAt(i)!='f'||
            s.charAt(i)!='g'||s.charAt(i)!='h'||s.charAt(i)!='i'||s.charAt(i)!='j'||s.charAt(i)!='k'||s.charAt(i)!='l'||
            s.charAt(i)!='m'||s.charAt(i)!='n'||s.charAt(i)!='o'||s.charAt(i)!='p'||s.charAt(i)!='q'||s.charAt(i)!='r'||
            s.charAt(i)!='s'||s.charAt(i)!='t'||s.charAt(i)!='u'||s.charAt(i)!='v'||s.charAt(i)!='w'||s.charAt(i)!='x'||
            s.charAt(i)!='y'||s.charAt(i)!='z'||s.charAt(i)!='A'||s.charAt(i)!='B'||s.charAt(i)!='C'||s.charAt(i)!='D'||
            s.charAt(i)!='E'||s.charAt(i)!='F'||s.charAt(i)!='G'||s.charAt(i)!='H'||s.charAt(i)!='I'||s.charAt(i)!='J'||
            s.charAt(i)!='K'||s.charAt(i)!='L'||s.charAt(i)!='M'||s.charAt(i)!='N'||s.charAt(i)!='O'||s.charAt(i)!='P'||
            s.charAt(i)!='Q'||s.charAt(i)!='R'||s.charAt(i)!='S'||s.charAt(i)!='T'||s.charAt(i)!='U'||s.charAt(i)!='V'||
            s.charAt(i)!='W'||s.charAt(i)!='X'||s.charAt(i)!='Y'||s.charAt(i)!='Z'||s.charAt(i)!='0'||s.charAt(i)!='1'||
            s.charAt(i)!='2'||s.charAt(i)!='3'||s.charAt(i)!='4'||s.charAt(i)!='5'||s.charAt(i)!='6'||s.charAt(i)!='7'||
            s.charAt(i)!='8'||s.charAt(i)!='9'||s.charAt(i)!='-'||s.charAt(i)!='_'||s.charAt(i)!=' ') {

            for (int i = 0; i < s.length(); i++) {  
                System.out.println("Token " + j + " = " + (s.charAt(i)));
                j++;
            }
        }
        else {
            System.out.println("Invalid character(s) entered.. Program terminated!\n");
            System.exit(0);
        }

    }
}

似乎不可能獲得您所說的從這段代碼中獲得的結果。 你的 if 語句是錯誤的。 就目前而言,它永遠是正確的。 一個字符總是不等於某個字符或不等於另一個字符。 所有的 != 都應該是 ==。 我還會在報告它的 else 部分打印出壞字符:

System.out.println("bad character " + s.charAt(i) +
     " decimal value: " + (int) s.charAt(i));

Scanner 自己進行詞法分析,也就是說,它返回標記,而不是整個字符串。 我認為您應該使用 Console 並獲取輸入的所有內容:

Console console = System.console();
s = console.readLine("Input something to lexically analyze:  "); 
import java.util.*; public class Main { static int i; public static void main(String[] args) { Scanner input = new Scanner(System.in); String s = ""; while (true) { System.out.println("Input something to lexically analyze: "); s = input.nextLine(); analize(s); } } public static void analize(String s) { String t = "-1234567890_ abcdefjhijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ"; char[] tt = t.toCharArray(); char[] cc = s.toCharArray(); int z = 1, i = 0, j = 0; for (i = 0; i < cc.length; i++) { for (j = 0; j < tt.length; j++) { if (cc[i] == tt[j]) { System.out.println("Token " + z + " = '" + cc[i] + "'"); z++; break; } } if (j > tt.length - 1) { System.out.println("Invalid character " + (i + 1) + " ('" + cc[i] + "') entered..."); } } } }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM