java - 在 Java 中将 double(基本类型)转换为枚举类型

标签 java enums token tokenize

我正在尝试将表示函数(例如:f(x) = 2.5x + 10)的字符串转换为标记的ArrayList。这就是我的 token :

public enum Tokens
{
    add,
    sub,
    mul,
    div,
    pow,
    exp,
    sin,
    cos,
    tan,
    sec,
    csc,
    cot,
    log,
    x,
    sta,
    end;
}

我希望能够做的基本上是将 double 型转换为“ token ”类型,同时保留 double 型的值,以便可以以相同的方式表示常量以供以后处理,但我不这样做知道如何实现这一目标。

最佳答案

正如您所发现的,您的 Tokens 枚举不能真正用于实际 token ,因为无法制作不同版本的 Tokens.x (我猜 Tokens.x 是用来表示公式中的数字...)以保存不同的数值。

您需要的是一个Token类——一个“真正的”类——它可以保存(至少)一个 token 类型和一个值:

public class Token {
    private TokenType type;
    private Object value;
    public Token(TokenType type) { 
        this.type = type; 
        this.value = null;
    }
    public Token(TokenType type, Object value) { 
        this.type = type;
        this.value = value;
    }
    // getters and setters for type and value omitted below
    // ...
}

TokenType 将是一个枚举; value 属性是一个 Object,因此它可以保存不同 token 类型可能需要的任何类型的值对象。

现在,在决定如何使用 typevalue 属性来表示您的 token 时,有几种方法可供选择。

一种方法是将当前的 Tokens 枚举重命名为 TokenType 并使用其值作为您的类型。大多数 token 类型(例如 TokenType.cscTokenType.add)根本不需要任何值,因为 type 会告诉您所有信息需要知道。但数字标记需要知道其关联的数值,因此它们的 typeTokenType.x,并且 value 将保存该数值作为 DoubleIntegerBigDecimal 或其他。

但是,您可能会发现使用代表更广泛语法类别的标记类型更方便,例如“二元运算符”、“一元运算符”、“数字”、“公式结尾”:

public enum TokenType {BINOP, UNOP, NUMBER, END};

BINOP 和 UNOP token 将使用 value 属性来指示它们代表的特定运算符。枚举非常适合此目的:

public enum BinOps {ADD, SUB, MUL, ... };
public enum UnOps {SIN, COS, TAN, ... };  

NUMBER 将在 value 属性中携带其数值(同样,如 DoubleIntegerBigDecimal , 管他呢)。 END token 不需要任何

关于java - 在 Java 中将 double(基本类型)转换为枚举类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44192556/

相关文章:

c - 结构中 ‘:’ 标记之前出现错误 : expected ‘,’ , ‘;’、 ‘}’、 ‘__attribute__’ 或 ‘=’

oauth-2.0 - Auth0 JWT 访问 token

java - 具有缩小概念的三元运算符

在枚举类型的多维数组上使用 memset() 的正确方法

java - HSQLDB 服务器模式用户名/密码

c++ - 模板匹配两个(看似)不相关的类型

groovy - 在 Groovy 脚本中导入内部枚举

Github远程: Invalid username or password.致命:身份验证失败

java - 使用 JOOQ 查询生成器中的函数 json 对象、json 数组

java - 制作Android应用程序(随机颜色)