【问题标题】:Java Lexical AnalyzerJava 词法分析器
【发布时间】:2014-04-21 15:52:00
【问题描述】:

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

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

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

        }
    }
}

【问题讨论】:

  • 这个问题相当广泛。你可以再详细一点吗?您特别遇到什么问题?
  • 不是一个好的问题类型?你想让我们做你的家……我是说项目?
  • 请不要将 Java 中的字符串与 == 进行比较!它并不总是有效,请记住这一点!其次,更高级的看一下 Antlr 项目:antlr.org
  • @Zarathustra 有chars 而不是Strings
  • @MaxVasileusky 你是对的,我的错。

标签: java lexical-analysis


【解决方案1】:

Character 方法 Character.isLetterCharacter.isDigit 可能会在这里为您提供帮助。

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

自动拆分在这里没有用。例如,如果您将输入字符串按空格分割,12+34 将是单个标记。所以你应该定义一些规则,例如,读取数字,有数字时等等。这导致了有限自动机(或状态机)的想法。

【讨论】:

  • 是的,先生。你说的对。但是如果我对输入的字符串进行标记,这样我就可以读取单词而不仅仅是字母了。
  • @Joseph 我在你的代码中看到了import java.util.StringTokenizer; :) 我以前没用过,但是这个类似乎对你有帮助。看看它的用法示例。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-31
相关资源
最近更新 更多