public bool containsLiteral(SwitchCaseExpression sce) { if (sce is DefaultExpression) { return(false); } CaseExpression caseExp = (CaseExpression)sce; switch (caseExp.literal.value.type) { case Token.TokenValue.STRING: if (stringCases == null) { return(false); } return(stringCases.Contains(caseExp.literal.value.stringValue)); case Token.TokenValue.INT: if (intCases == null) { return(false); } return(intCases.Contains(caseExp.literal.value.intValue)); } return(true); }
public void addCase(SwitchCaseExpression ce) { if (cases == null) { cases = new List <SwitchCaseExpression>(); } cases.Add(ce); if (ce is DefaultExpression) { hasDefaultCase = true; return; } if (ce is CaseExpression) { SwitchCaseExpression tmp = ce; while (tmp != null) { if (tmp is DefaultExpression) { hasDefaultCase = true; return; } else { CaseExpression caseExp = (CaseExpression)tmp; switch (caseExp.literal.value.type) { case Token.TokenValue.STRING: if (stringCases == null) { stringCases = new List <string>(); } stringCases.Add(caseExp.literal.value.stringValue); break; case Token.TokenValue.INT: if (intCases == null) { intCases = new List <int>(); } intCases.Add(caseExp.literal.value.intValue); break; } tmp = caseExp.next; } } } }
public SwitchCaseExpression parseCase() { CaseExpression caseExp; DefaultExpression defaultExp; if (currentTokenEquals(Token.TokenValue.CASE)) { caseExp = new CaseExpression(); nextToken(); caseExp.literal = parseLiteralExpression(); nextTokenIfEquals(Token.TokenValue.TWOPOINTS); //case 'a': break; if (currentTokenEquals(Token.TokenValue.BREAK)) { caseExp.body = null; nextToken(); nextTokenIfEquals(Token.TokenValue.SEMICOLON); } //case 'a': //case 'b': ... else if (currentTokenEquals(Token.TokenValue.CASE) || currentTokenEquals(Token.TokenValue.DEFAULT)) { caseExp.body = null; caseExp.next = parseCase(); } //case 'a': // e // break; else { caseExp.body = parseExpression(); caseExp.next = null; nextTokenIfEquals(Token.TokenValue.BREAK); nextTokenIfEquals(Token.TokenValue.SEMICOLON); } return caseExp; } else if (currentTokenEquals(Token.TokenValue.DEFAULT)) { defaultExp = new DefaultExpression(); nextToken(); nextTokenIfEquals(Token.TokenValue.TWOPOINTS); //default: break; if (currentTokenEquals(Token.TokenValue.BREAK)) { defaultExp.body = null; nextToken(); nextTokenIfEquals(Token.TokenValue.SEMICOLON); } //default: // e // break; else { defaultExp.body = parseExpression(); nextTokenIfEquals(Token.TokenValue.BREAK); nextTokenIfEquals(Token.TokenValue.SEMICOLON); } return defaultExp; } throw new SyntaxError(lineNumber, colNumber, Token.TokenValue.CASE); }