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 },
|
{ "break", TokenBreak, NULL },
|
||||||
{ "case", TokenCase, NULL },
|
{ "case", TokenCase, NULL },
|
||||||
{ "char", TokenCharType, NULL },
|
{ "char", TokenCharType, NULL },
|
||||||
|
{ "continue", TokenContinue, NULL },
|
||||||
{ "default", TokenDefault, NULL },
|
{ "default", TokenDefault, NULL },
|
||||||
{ "do", TokenDo, NULL },
|
{ "do", TokenDo, NULL },
|
||||||
{ "double", TokenDoubleType, NULL },
|
{ "double", TokenDoubleType, NULL },
|
||||||
|
|
48
parse.c
48
parse.c
|
@ -576,8 +576,14 @@ int ParseStatement(struct ParseState *Parser, int RunIt)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case TokenIf:
|
case TokenIf:
|
||||||
|
if (!LexGetToken(Parser, NULL, TRUE) != TokenOpenBracket)
|
||||||
|
ProgramFail(Parser, "'(' expected");
|
||||||
|
|
||||||
Condition = ParseIntExpression(Parser, RunIt);
|
Condition = ParseIntExpression(Parser, RunIt);
|
||||||
|
|
||||||
|
if (!LexGetToken(Parser, NULL, TRUE) != TokenCloseBracket)
|
||||||
|
ProgramFail(Parser, "')' expected");
|
||||||
|
|
||||||
if (!ParseStatement(Parser, RunIt && Condition))
|
if (!ParseStatement(Parser, RunIt && Condition))
|
||||||
ProgramFail(Parser, "statement expected");
|
ProgramFail(Parser, "statement expected");
|
||||||
|
|
||||||
|
@ -665,11 +671,47 @@ int ParseStatement(struct ParseState *Parser, int RunIt)
|
||||||
}
|
}
|
||||||
|
|
||||||
case TokenSwitch:
|
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 TokenCase:
|
||||||
case TokenBreak:
|
if (!LexGetToken(Parser, &CValue, TRUE) != TokenIdentifier)
|
||||||
case TokenReturn:
|
ProgramFail(Parser, "case label expected");
|
||||||
|
|
||||||
|
if (!LexGetToken(Parser, NULL, TRUE) != TokenColon)
|
||||||
|
ProgramFail(Parser, "':' expected");
|
||||||
|
// XXX - implement case
|
||||||
|
break;
|
||||||
|
|
||||||
case TokenDefault:
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
2
picoc.h
2
picoc.h
|
@ -58,7 +58,7 @@ enum LexToken
|
||||||
TokenIncrement, TokenDecrement,
|
TokenIncrement, TokenDecrement,
|
||||||
TokenIntType, TokenCharType, TokenFloatType, TokenDoubleType, TokenVoidType, TokenEnumType,
|
TokenIntType, TokenCharType, TokenFloatType, TokenDoubleType, TokenVoidType, TokenEnumType,
|
||||||
TokenLongType, TokenSignedType, TokenShortType, TokenStructType, TokenUnionType, TokenUnsignedType, TokenTypedef,
|
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
|
TokenHashDefine, TokenHashInclude
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
int Count;
|
int Count;
|
||||||
int Array[10];
|
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++)
|
for (Count = 0; Count < 10; Count++)
|
||||||
|
|
Loading…
Reference in a new issue