private Token Symbol() { int startPosition = GetCurrentPositionInInput(); StringBuilder sbuf = new StringBuilder(); // StringBuffer en Java lo hemos modernizado a StringBuilder while (PropositionSymbol.IsPropositionSymbolIdentifierPart(LookAhead(1))) { sbuf.Append(LookAhead(1)); Consume(); } string symbol = sbuf.ToString(); if (PropositionSymbol.IsAlwaysTrueSymbol(symbol)) { return(new Token(LogicTokenTypes.TRUE, PropositionSymbol.TRUE_SYMBOL, startPosition)); } else if (PropositionSymbol.IsAlwaysFalseSymbol(symbol)) { return(new Token(LogicTokenTypes.FALSE, PropositionSymbol.FALSE_SYMBOL, startPosition)); } else if (PropositionSymbol.IsPropositionSymbol(symbol)) { return(new Token(LogicTokenTypes.SYMBOL, sbuf.ToString(), startPosition)); } throw new LexerException("Lexing error on symbol " + symbol + " at position " + GetCurrentPositionInInput(), GetCurrentPositionInInput()); }
public void Test_isPropositionSymbolDoesNotContainConnectiveChars() { // '~', '&', '|', '=', '<', '>' Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("~")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("&")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("|")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("=")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("<")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol(">")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A~")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A&")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A|")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A=")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A<")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A>")); }
public void Test_isPropositionSymbol() { Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("True")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("False")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("A")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("A1")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("A_1")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("a")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("a1")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("A_1")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("_")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("_1")); Assert.IsTrue(PropositionSymbol.IsPropositionSymbol("_1_2")); // Las comas no se permiten (sólo caracteres que puedan estar en identificadores legales de Java... ahora C#) Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A1,2")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol(" A")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A ")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("A B")); // En Java sí se permiten identificadores con el símbolo del dólar... pero en C# no Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("$")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("$1")); Assert.IsFalse(PropositionSymbol.IsPropositionSymbol("$1_1")); }