Syntax of "switch" is now handled. Not semantics though.
git-svn-id: http://picoc.googlecode.com/svn/trunk@81 21eae674-98b7-11dd-bd71-f92a316d2d60
This commit is contained in:
parent
2e545deb6a
commit
d94b70212b
1
lex.c
1
lex.c
|
@ -32,6 +32,7 @@ static struct ReservedWord ReservedWords[] =
|
|||
{ "break", TokenBreak, NULL },
|
||||
{ "case", TokenCase, NULL },
|
||||
{ "char", TokenCharType, NULL },
|
||||
{ "continue", TokenContinue, NULL },
|
||||
{ "default", TokenDefault, NULL },
|
||||
{ "do", TokenDo, NULL },
|
||||
{ "double", TokenDoubleType, NULL },
|
||||
|
|
48
parse.c
48
parse.c
|
@ -576,8 +576,14 @@ int ParseStatement(struct ParseState *Parser, int RunIt)
|
|||
break;
|
||||
|
||||
case TokenIf:
|
||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenOpenBracket)
|
||||
ProgramFail(Parser, "'(' expected");
|
||||
|
||||
Condition = ParseIntExpression(Parser, RunIt);
|
||||
|
||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenCloseBracket)
|
||||
ProgramFail(Parser, "')' expected");
|
||||
|
||||
if (!ParseStatement(Parser, RunIt && Condition))
|
||||
ProgramFail(Parser, "statement expected");
|
||||
|
||||
|
@ -665,11 +671,47 @@ int ParseStatement(struct ParseState *Parser, int RunIt)
|
|||
}
|
||||
|
||||
case TokenSwitch:
|
||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenOpenBracket)
|
||||
ProgramFail(Parser, "'(' expected");
|
||||
|
||||
Condition = ParseIntExpression(Parser, RunIt);
|
||||
|
||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenCloseBracket)
|
||||
ProgramFail(Parser, "')' expected");
|
||||
|
||||
if (!LexGetToken(Parser, NULL, FALSE) != TokenLeftBrace)
|
||||
ProgramFail(Parser, "'{' expected");
|
||||
|
||||
if (!ParseStatement(Parser, RunIt && Condition))
|
||||
ProgramFail(Parser, "statement expected");
|
||||
// XXX - implement switch
|
||||
break;
|
||||
|
||||
case TokenCase:
|
||||
case TokenBreak:
|
||||
case TokenReturn:
|
||||
if (!LexGetToken(Parser, &CValue, TRUE) != TokenIdentifier)
|
||||
ProgramFail(Parser, "case label expected");
|
||||
|
||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenColon)
|
||||
ProgramFail(Parser, "':' expected");
|
||||
// XXX - implement case
|
||||
break;
|
||||
|
||||
case TokenDefault:
|
||||
ProgramFail(Parser, "not implemented yet");
|
||||
if (!LexGetToken(Parser, NULL, TRUE) != TokenColon)
|
||||
ProgramFail(Parser, "':' expected");
|
||||
// XXX - implement default
|
||||
break;
|
||||
|
||||
case TokenBreak:
|
||||
// XXX - implement break
|
||||
break;
|
||||
|
||||
case TokenContinue:
|
||||
// XXX - implement continue
|
||||
break;
|
||||
|
||||
case TokenReturn:
|
||||
// XXX - implement return
|
||||
break;
|
||||
|
||||
default:
|
||||
|
|
2
picoc.h
2
picoc.h
|
@ -58,7 +58,7 @@ enum LexToken
|
|||
TokenIncrement, TokenDecrement,
|
||||
TokenIntType, TokenCharType, TokenFloatType, TokenDoubleType, TokenVoidType, TokenEnumType,
|
||||
TokenLongType, TokenSignedType, TokenShortType, TokenStructType, TokenUnionType, TokenUnsignedType, TokenTypedef,
|
||||
TokenDo, TokenElse, TokenFor, TokenIf, TokenWhile, TokenBreak, TokenSwitch, TokenCase, TokenDefault, TokenReturn,
|
||||
TokenContinue, TokenDo, TokenElse, TokenFor, TokenIf, TokenWhile, TokenBreak, TokenSwitch, TokenCase, TokenDefault, TokenReturn,
|
||||
TokenHashDefine, TokenHashInclude
|
||||
};
|
||||
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
int Count;
|
||||
int Array[10];
|
||||
|
||||
for (Count = 0; Count < 10; Count++)
|
||||
for (Count = 1; Count <= 10; Count++)
|
||||
{
|
||||
Array[Count] = Count * Count;
|
||||
Array[Count-1] = Count * Count;
|
||||
}
|
||||
|
||||
for (Count = 0; Count < 10; Count++)
|
||||
|
|
Loading…
Reference in a new issue