diff --git a/src/main/java/de/neemann/digital/analyse/parser/Parser.java b/src/main/java/de/neemann/digital/analyse/parser/Parser.java index f735aff56..b2c225f4e 100644 --- a/src/main/java/de/neemann/digital/analyse/parser/Parser.java +++ b/src/main/java/de/neemann/digital/analyse/parser/Parser.java @@ -1,9 +1,6 @@ package de.neemann.digital.analyse.parser; -import de.neemann.digital.analyse.expression.Expression; -import de.neemann.digital.analyse.expression.Not; -import de.neemann.digital.analyse.expression.Operation; -import de.neemann.digital.analyse.expression.Variable; +import de.neemann.digital.analyse.expression.*; import de.neemann.digital.lang.Lang; import java.io.IOException; @@ -82,6 +79,10 @@ public class Parser { return exp; case IDENT: return new Variable(tokenizer.getIdent()); + case ONE: + return Constant.ONE; + case ZERO: + return Constant.ZERO; default: throw new ParseException(Lang.get("err_parserUnexpectedToken_N", tokenizer.toString())); } diff --git a/src/main/java/de/neemann/digital/analyse/parser/Tokenizer.java b/src/main/java/de/neemann/digital/analyse/parser/Tokenizer.java index c07eff250..3e79c41fe 100644 --- a/src/main/java/de/neemann/digital/analyse/parser/Tokenizer.java +++ b/src/main/java/de/neemann/digital/analyse/parser/Tokenizer.java @@ -11,7 +11,7 @@ import java.io.Reader; public class Tokenizer { - enum Token {UNKNOWN, IDENT, AND, OR, NOT, OPEN, CLOSE, EOF} + enum Token {UNKNOWN, IDENT, AND, OR, NOT, OPEN, CLOSE, ONE, ZERO, EOF} private final Reader in; private Token token; @@ -64,6 +64,12 @@ public class Tokenizer { case -1: token = Token.EOF; break; + case '0': + token = Token.ZERO; + break; + case '1': + token = Token.ONE; + break; case '(': token = Token.OPEN; break; diff --git a/src/test/java/de/neemann/digital/analyse/parser/ParserTest.java b/src/test/java/de/neemann/digital/analyse/parser/ParserTest.java index 8090af171..6d68acd3c 100644 --- a/src/test/java/de/neemann/digital/analyse/parser/ParserTest.java +++ b/src/test/java/de/neemann/digital/analyse/parser/ParserTest.java @@ -1,9 +1,6 @@ package de.neemann.digital.analyse.parser; -import de.neemann.digital.analyse.expression.Expression; -import de.neemann.digital.analyse.expression.Not; -import de.neemann.digital.analyse.expression.Operation; -import de.neemann.digital.analyse.expression.Variable; +import de.neemann.digital.analyse.expression.*; import de.neemann.digital.analyse.quinemc.QuineMcCluskey; import junit.framework.TestCase; @@ -20,6 +17,11 @@ public class ParserTest extends TestCase { assertEquals(new Variable("A^1"), new Parser("A^1").parse()); } + public void testConst() throws Exception { + assertEquals(Constant.ZERO, new Parser("0").parse()); + assertEquals(Constant.ONE, new Parser("1").parse()); + } + public void testParseOr() throws Exception { assertTrue(new Parser("a+b").parse() instanceof Operation.Or); assertTrue(new Parser("a∨b").parse() instanceof Operation.Or);