Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java词法分析器_Java_Lexical Analysis - Fatal编程技术网

Java词法分析器

Java词法分析器,java,lexical-analysis,Java,Lexical Analysis,我正在创建一个词法分析器。在我的代码中,我可以输出符号,但当涉及到字母和数字时,我无法设计我的代码 请在我的项目中帮助我。。谢谢 package lab7; import java.util.Scanner; import java.util.StringTokenizer; public class Lab7 { public static void main(String[] args) { String word; char[] word

我正在创建一个词法分析器。在我的代码中,我可以输出符号,但当涉及到字母和数字时,我无法设计我的代码

请在我的项目中帮助我。。谢谢

package lab7;

import java.util.Scanner;
import java.util.StringTokenizer;

public class Lab7 {
public static void main(String[] args) {
                String word;
        char[] wordArray;

        Scanner sc = new Scanner(System.in);

        wordArray = word.toCharArray();

        for(int x = 0; x < wordArray.length; x++) {

            if(wordArray[x] == '+') {
                System.out.print("ADD ");
            }
            else if(wordArray[x] == '-') {
                System.out.print("SUBTRACT ");
            }
            else if(wordArray[x] == '*') {
                System.out.print("MULTIPLY ");
            }
            else if(wordArray[x] == '/') {
                System.out.print("DIVIDE ");
            }
            else if(wordArray[x] == '(') {
                System.out.print("MATH ");
            }
            else if(wordArray[x] == ')') {
                System.out.print("MATH ");
            }
            else if(wordArray[x] == '=') {
                System.out.print("ASSIGN ");
            }

        }
    }
}
lab7包装;
导入java.util.Scanner;
导入java.util.StringTokenizer;
公共类Lab7{
公共静态void main(字符串[]args){
字符串字;
char[]字数组;
扫描仪sc=新的扫描仪(System.in);
wordArray=word.toCharArray();
对于(int x=0;x
Character
方法
Character.isLetter
Character.isDigit
可能会对您有所帮助

但是,您不能通过逐个字母扫描字符串来编写真正的词法分析器。词法分析器生成多字符标记,通常作为状态机实现,状态机由正则表达式定义


自动拆分在这里没有用处。例如,如果将输入字符串按空格拆分,
12+34
将是单个标记。因此,您应该定义一些规则,例如,当有数字时读取数字,等等。。这就引出了​​有限自动机(或状态机)。

这个问题相当广泛。你能说得更具体些吗?你有什么特别的问题?不是一个好问题?你想让我们做你的家。。。我的意思是项目?请不要将Java中的字符串与==进行比较!它并不总是有效的,记住这一点!其次,更高级的是看一看Antlr项目:@Zarathustra有
char
s不是
String
s@MaxVasileusky你是对的,我的错。是的,先生。你是对的。但是如果我对输入的字符串进行标记,这样我不仅可以读取字母,还可以读取单词。@Joseph我见过
import java.util.StringTokenizer在您的代码中:)我以前没有使用过它,但是这个类似乎对您有帮助。看看它的用法示例。