added constants zero and one to tokenizer and parser

This commit is contained in:
hneemann 2016-07-03 17:31:13 +02:00
parent a77ab80fa5
commit 9abddfdf97
3 changed files with 18 additions and 9 deletions

View File

@ -1,9 +1,6 @@
package de.neemann.digital.analyse.parser; package de.neemann.digital.analyse.parser;
import de.neemann.digital.analyse.expression.Expression; import de.neemann.digital.analyse.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.lang.Lang; import de.neemann.digital.lang.Lang;
import java.io.IOException; import java.io.IOException;
@ -82,6 +79,10 @@ public class Parser {
return exp; return exp;
case IDENT: case IDENT:
return new Variable(tokenizer.getIdent()); return new Variable(tokenizer.getIdent());
case ONE:
return Constant.ONE;
case ZERO:
return Constant.ZERO;
default: default:
throw new ParseException(Lang.get("err_parserUnexpectedToken_N", tokenizer.toString())); throw new ParseException(Lang.get("err_parserUnexpectedToken_N", tokenizer.toString()));
} }

View File

@ -11,7 +11,7 @@ import java.io.Reader;
public class Tokenizer { 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 final Reader in;
private Token token; private Token token;
@ -64,6 +64,12 @@ public class Tokenizer {
case -1: case -1:
token = Token.EOF; token = Token.EOF;
break; break;
case '0':
token = Token.ZERO;
break;
case '1':
token = Token.ONE;
break;
case '(': case '(':
token = Token.OPEN; token = Token.OPEN;
break; break;

View File

@ -1,9 +1,6 @@
package de.neemann.digital.analyse.parser; package de.neemann.digital.analyse.parser;
import de.neemann.digital.analyse.expression.Expression; import de.neemann.digital.analyse.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.quinemc.QuineMcCluskey; import de.neemann.digital.analyse.quinemc.QuineMcCluskey;
import junit.framework.TestCase; import junit.framework.TestCase;
@ -20,6 +17,11 @@ public class ParserTest extends TestCase {
assertEquals(new Variable("A^1"), new Parser("A^1").parse()); 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 { public void testParseOr() throws Exception {
assertTrue(new Parser("a+b").parse() instanceof Operation.Or); assertTrue(new Parser("a+b").parse() instanceof Operation.Or);
assertTrue(new Parser("ab").parse() instanceof Operation.Or); assertTrue(new Parser("ab").parse() instanceof Operation.Or);