Java 具有整数文本的解析器

Java 具有整数文本的解析器,java,parsing,integer,lexical,Java,Parsing,Integer,Lexical,我正在寻找一种简单有效的方法,在java的词法分析器中实现一组数字。例如,我的输入代码如下: "6+9" , static char INTVALUE = ('0') ; 输出必须有点像这样: Number : 6 Sign : + Number: 9 我所面临的问题是,除了按如下方式实施外,我无法识别该数字: "6+9" , static char INTVALUE = ('0') ; 这意味着我必须手动输入从

我正在寻找一种简单有效的方法,在java的词法分析器中实现一组数字。例如,我的输入代码如下:

"6+9" ,      
static char INTVALUE = ('0') ;    
输出必须有点像这样:

   Number : 6   
   Sign : +   
   Number: 9  
我所面临的问题是,除了按如下方式实施外,我无法识别该数字:

"6+9" ,      
static char INTVALUE = ('0') ;    
这意味着我必须手动输入从0到9的每个数字,我不知道这样的方法是否允许在我的输入中包含一个数字,比如85

顺便说一下,这是家庭作业
谢谢

为什么不使用正则表达式呢。这听起来最适合你正在尝试做的事情

这很容易学。请看本章中的字符类(\d)和四元数(+?)

要检查整数并将其加倍,请执行以下操作

aStr.matches("-?\\d+(\\.\\d+)?");
仅对于整数:

aStr.matches("-?\\d+");

对于最简单的语法,您确实可以使用正则表达式:

import java.util.regex.*;
// ...
String expression = "(10+9)*2";
Pattern pattern = Pattern.compile("\\s*(\\d+|\\D)\\s*");
Matcher matcher = pattern.matcher(expression);
while (matcher.find()) {
    String token = matcher.group(1);
    System.out.printf("%s: '%s'%n", 
        token.matches("\\d+") ? "Number" : "Symbol", 
        token);
}

在编译器构造课程中,您可能需要构造一个,然后通过实现如下算法将其转换为最小DFA。在现实生活中,你通常会使用或之类的工具。

你也可以做一些简单的事情,比如:

public List<Token> lex(String s) {
    List<Token> result = new ArrayList<Token>();

    int pos = 0;
    int len = s.length();
    while (pos < len) {
        switch (s.charAt(pos)) {
        case '0':
        case '1':
        case '2':
        case '3':
        case '4':
        case '5':
        case '6':
        case '7':
        case '8':
        case '9':
            {
                int end = pos;
                do {
                    ++end;
                } while (end < len && s.charAt(end) >= '0' && s.charAt(end) <= '9');

                result.add(new Number(s.substring(pos, end)));
                pos = end;
                break;
            }
        case '+':
            {
                result.add(new Operator("+"));
                ++pos;
                break;
            }
        // ...
        }
    }

    return result;
}
公共列表lex(字符串s){
列表结果=新建ArrayList();
int pos=0;
int len=s.length();
while(pos}while(end=“0”和&s.charAt(end)你想检查一个<代码> char 是否是一个数字?如果是你的家庭作业,你被要求从中学习一些东西,如果你抄袭别人的代码,你就不会学习。做你自己的一件事,做你自己实际上已经完成的任务,我只是在寻找更有效的方法来解析一个数字,我的问题是我不能。se是一个大于9的数字。上一次我能够在EBNF中使用令牌实现整数文本的赋值,我只想在java中实现同样的操作。@我喜欢这个想法,八月需要我创建另一个类tho,这将使我不得不检查所有时间,如果解析的字符实际上是一个数字或符号。对于ASCII/Unicode(不是任何奇怪的字符集)如果字符
=0