diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/NumberLiteral.java b/AlgebraicDataflowArchitectureModel/src/code/ast/NumberLiteral.java index ac75f20..a437c0a 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/NumberLiteral.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/NumberLiteral.java @@ -47,9 +47,7 @@ throw new IllegalArgumentException("Token value must not be empty."); } - // TODO: 0 check - - if (NumberUtil.isBinaryNumber(tokenValue) || NumberUtil.isOctalNumber(tokenValue) || NumberUtil.isHexNumber(tokenValue)) { + if (NumberUtil.isDecimalNumber(tokenValue) || NumberUtil.isBinaryNumber(tokenValue) || NumberUtil.isOctalNumber(tokenValue) || NumberUtil.isHexNumber(tokenValue)) { this.tokenValue = tokenValue; } else { throw new IllegalArgumentException("Invalid number literal: " + tokenValue); diff --git a/AlgebraicDataflowArchitectureModel/src/code/ast/NumberUtil.java b/AlgebraicDataflowArchitectureModel/src/code/ast/NumberUtil.java index 0daea7d..4137a35 100644 --- a/AlgebraicDataflowArchitectureModel/src/code/ast/NumberUtil.java +++ b/AlgebraicDataflowArchitectureModel/src/code/ast/NumberUtil.java @@ -145,6 +145,25 @@ return true; } + public static boolean isDecimalNumber(String token) { + if (token == null || token.isBlank()) { + return false; + } + + // Multiples dots are not allowed + String[] tokens = token.split("\\.", -1); + if (tokens.length > 2) { + return false; + } + + Lexer integerPart = new Lexer(tokens[0].toLowerCase()); + Lexer fractionalPart = new Lexer(tokens[1].toLowerCase()); + + // TODO: Implement validation logic + + return true; + } + /** * Determines whether the given string is a valid hexadecimal number. * A valid hexadecimal number starts with "0x" or "0X", followed by a