コード例 #1
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_V(Context& ctx)
{
    if (ctx.Token() == TKLiteralChar)
    {
        //V => LiteralChar RangeOpt
        ctx.Match(TKLiteralChar);
        ctx.Action_PrintChar();
        Parse_RangeOpt(ctx);
    }
    else if (ctx.Token() == TKIdentifier)
    {
        //V => Identifier
        ctx.Match(TKIdentifier);
        ctx.Action_PrintName();
    }
    else if (ctx.Token() == TKKeywordAny)
    {
        //V => KeywordAny
        ctx.Match(TKKeywordAny);
        ctx.Action_PrintAny();
    }
    else if (ctx.Token() == TKStringLiteral)
    {
        //V => StringLiteral
        ctx.Match(TKStringLiteral);
        ctx.Action_PrintString();
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #2
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_RangeOpt(Context& ctx)
{
    if (ctx.Token() == TKRangeSeparator)
    {
        //RangeOpt => RangeSeparator LiteralChar
        ctx.Match(TKRangeSeparator);
        ctx.Match(TKLiteralChar);
        ctx.Action_PrintRange();
    }
    else if (ctx.Token() == TKKeywordAny ||
             ctx.Token() == TKPlusCharacter ||
             ctx.Token() == TKLiteralChar ||
             ctx.Token() == TKIdentifier ||
             ctx.Token() == TKSemicolonCharacter ||
             ctx.Token() == TKLeftParenthesisCharacter ||
             ctx.Token() == TKQuestionMarkCharacter ||
             ctx.Token() == TKAsteriskCharacter ||
             ctx.Token() == TKVerticalLineCharacter ||
             ctx.Token() == TKRightParenthesisCharacter ||
             ctx.Token() == TKStringLiteral)
    {
        //RangeOpt => Epsilon
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #3
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_SyntaxExpressionItem(Context& ctx)
{
    if (ctx.Token() == TKIdentifier)
    {
        //SyntaxExpressionItem => Identifier
        ctx.Match(TKIdentifier);
        ctx.Action_PrintName();
    }
    else if (ctx.Token() == TKLiteralChar)
    {
        //SyntaxExpressionItem => LiteralChar
        ctx.Match(TKLiteralChar);
        ctx.Action_PrintChar();
    }
    else if (ctx.Token() == TKStringLiteral)
    {
        //SyntaxExpressionItem => StringLiteral
        ctx.Match(TKStringLiteral);
        ctx.Action_PrintString();
    }
    else if (ctx.Token() == TKLeftCurlyBracketCharacter)
    {
        //SyntaxExpressionItem => SyntaxExpressionAction
        Parse_SyntaxExpressionAction(ctx);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #4
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_Main(Context& ctx)
{
    if (ctx.Token() == TKKeywordModule)
    {
        //Main => ModuleBody
        Parse_ModuleBody(ctx);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #5
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_OrF(Context& ctx)
{
    if (ctx.Token() == TKVerticalLineCharacter)
    {
        //OrF => VerticalLineCharacter F
        ctx.Match(TKVerticalLineCharacter);
        Parse_F(ctx);
        ctx.Action_PrintOr();
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #6
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_SyntaxExpressionAction(Context& ctx)
{
    if (ctx.Token() == TKLeftCurlyBracketCharacter)
    {
        //SyntaxExpressionAction => LeftCurlyBracketCharacter Identifier RightCurlyBracketCharacter
        ctx.Match(TKLeftCurlyBracketCharacter);
        ctx.Match(TKIdentifier);
        ctx.Action_PrintAction();
        ctx.Match(TKRightCurlyBracketCharacter);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #7
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_InterleaveDeclaration(Context& ctx)
{
    if (ctx.Token() == TKKeywordInterleave)
    {
        //InterleaveDeclaration => KeywordInterleave Identifier EqualsCharacter TokenExpression SemicolonCharacter
        ctx.Match(TKKeywordInterleave);
        ctx.Match(TKIdentifier);
        ctx.Match(TKEqualsCharacter);
        Parse_TokenExpression(ctx);
        ctx.Match(TKSemicolonCharacter);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #8
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_F(Context& ctx)
{
    if (ctx.Token() == TKKeywordAny ||
            ctx.Token() == TKLiteralChar ||
            ctx.Token() == TKIdentifier ||
            ctx.Token() == TKLeftParenthesisCharacter ||
            ctx.Token() == TKStringLiteral)
    {
        //F => P OptOperator
        Parse_P(ctx);
        Parse_OptOperator(ctx);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #9
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_LanguageBody(Context& ctx)
{
    if (ctx.Token() == TKKeywordLanguage)
    {
        //LanguageBody => KeywordLanguage Identifier LeftCurlyBracketCharacter Declarations RightCurlyBracketCharacter
        ctx.Match(TKKeywordLanguage);
        ctx.Match(TKIdentifier);
        ctx.Action_LanguageName();
        ctx.Match(TKLeftCurlyBracketCharacter);
        Parse_Declarations(ctx);
        ctx.Match(TKRightCurlyBracketCharacter);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #10
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_T(Context& ctx)
{
    if (ctx.Token() == TKKeywordAny ||
            ctx.Token() == TKLiteralChar ||
            ctx.Token() == TKIdentifier ||
            ctx.Token() == TKLeftParenthesisCharacter ||
            ctx.Token() == TKStringLiteral)
    {
        //T => F ZeroOrMoreOrF
        Parse_F(ctx);
        Parse_ZeroOrMoreOrF(ctx);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #11
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_SyntaxExpression(Context& ctx)
{
    if (ctx.Token() == TKKeywordEmpty ||
            ctx.Token() == TKLiteralChar ||
            ctx.Token() == TKIdentifier ||
            ctx.Token() == TKLeftCurlyBracketCharacter ||
            ctx.Token() == TKStringLiteral)
    {
        //SyntaxExpression => SyntaxExpressionSingle SyntaxExpressionMoreSingle
        Parse_SyntaxExpressionSingle(ctx);
        Parse_SyntaxExpressionMoreSingle(ctx);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #12
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_SyntaxDeclaration(Context& ctx)
{
    if (ctx.Token() == TKKeywordSyntax)
    {
        //SyntaxDeclaration => KeywordSyntax Identifier EqualsCharacter SyntaxExpression SemicolonCharacter
        ctx.Match(TKKeywordSyntax);
        ctx.Match(TKIdentifier);
        ctx.Action_SyntaxName();
        ctx.Match(TKEqualsCharacter);
        Parse_SyntaxExpression(ctx);
        ctx.Match(TKSemicolonCharacter);
        ctx.Action_TokenEnd();
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #13
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_Declarations(Context& ctx)
{
    if (ctx.Token() == TKKeywordInterleave ||
            ctx.Token() == TKKeywordToken ||
            ctx.Token() == TKKeywordSyntax)
    {
        //Declarations => Declaration Declarations
        Parse_Declaration(ctx);
        Parse_Declarations(ctx);
    }
    else if (ctx.Token() == TKRightCurlyBracketCharacter)
    {
        //Declarations => Epsilon
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #14
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_SyntaxExpressionMoreSingle(Context& ctx)
{
    if (ctx.Token() == TKVerticalLineCharacter)
    {
        //SyntaxExpressionMoreSingle => VerticalLineCharacter SyntaxExpressionSingle SyntaxExpressionMoreSingle
        ctx.Match(TKVerticalLineCharacter);
        ctx.Action_CloseProduction();
        Parse_SyntaxExpressionSingle(ctx);
        ctx.Action_CloseProduction();
        Parse_SyntaxExpressionMoreSingle(ctx);
    }
    else if (ctx.Token() == TKSemicolonCharacter)
    {
        //SyntaxExpressionMoreSingle => Epsilon
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #15
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_SyntaxExpressionSingleFollow(Context& ctx)
{
    if (ctx.Token() == TKLiteralChar ||
            ctx.Token() == TKIdentifier ||
            ctx.Token() == TKLeftCurlyBracketCharacter ||
            ctx.Token() == TKStringLiteral)
    {
        //SyntaxExpressionSingleFollow => SyntaxExpressionItem SyntaxExpressionSingleFollow
        Parse_SyntaxExpressionItem(ctx);
        Parse_SyntaxExpressionSingleFollow(ctx);
    }
    else if (ctx.Token() == TKSemicolonCharacter ||
             ctx.Token() == TKVerticalLineCharacter)
    {
        //SyntaxExpressionSingleFollow => Epsilon
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #16
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_P(Context& ctx)
{
    if (ctx.Token() == TKKeywordAny ||
            ctx.Token() == TKLiteralChar ||
            ctx.Token() == TKIdentifier ||
            ctx.Token() == TKStringLiteral)
    {
        //P => V
        Parse_V(ctx);
    }
    else if (ctx.Token() == TKLeftParenthesisCharacter)
    {
        //P => LeftParenthesisCharacter TokenExpression RightParenthesisCharacter
        ctx.Match(TKLeftParenthesisCharacter);
        Parse_TokenExpression(ctx);
        ctx.Match(TKRightParenthesisCharacter);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #17
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_SyntaxExpressionSingle(Context& ctx)
{
    if (ctx.Token() == TKLiteralChar ||
            ctx.Token() == TKIdentifier ||
            ctx.Token() == TKLeftCurlyBracketCharacter ||
            ctx.Token() == TKStringLiteral)
    {
        //SyntaxExpressionSingle => SyntaxExpressionItem SyntaxExpressionSingleFollow
        Parse_SyntaxExpressionItem(ctx);
        Parse_SyntaxExpressionSingleFollow(ctx);
    }
    else if (ctx.Token() == TKKeywordEmpty)
    {
        //SyntaxExpressionSingle => KeywordEmpty
        ctx.Match(TKKeywordEmpty);
        ctx.Action_PrintEmptyProduction();
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #18
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_Declaration(Context& ctx)
{
    if (ctx.Token() == TKKeywordToken)
    {
        //Declaration => TokenDeclaration
        Parse_TokenDeclaration(ctx);
    }
    else if (ctx.Token() == TKKeywordSyntax)
    {
        //Declaration => SyntaxDeclaration
        Parse_SyntaxDeclaration(ctx);
    }
    else if (ctx.Token() == TKKeywordInterleave)
    {
        //Declaration => InterleaveDeclaration
        Parse_InterleaveDeclaration(ctx);
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #19
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_ZeroOrMoreT(Context& ctx)
{
    if (ctx.Token() == TKKeywordAny ||
            ctx.Token() == TKLiteralChar ||
            ctx.Token() == TKIdentifier ||
            ctx.Token() == TKLeftParenthesisCharacter ||
            ctx.Token() == TKStringLiteral)
    {
        //ZeroOrMoreT => T ZeroOrMoreT
        Parse_T(ctx);
        ctx.Action_PrintAnd();
        Parse_ZeroOrMoreT(ctx);
    }
    else if (ctx.Token() == TKSemicolonCharacter ||
             ctx.Token() == TKRightParenthesisCharacter)
    {
        //ZeroOrMoreT => Epsilon
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #20
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_ZeroOrMoreOrF(Context& ctx)
{
    if (ctx.Token() == TKVerticalLineCharacter)
    {
        //ZeroOrMoreOrF => OrF ZeroOrMoreOrF
        Parse_OrF(ctx);
        Parse_ZeroOrMoreOrF(ctx);
    }
    else if (ctx.Token() == TKKeywordAny ||
             ctx.Token() == TKLiteralChar ||
             ctx.Token() == TKIdentifier ||
             ctx.Token() == TKSemicolonCharacter ||
             ctx.Token() == TKLeftParenthesisCharacter ||
             ctx.Token() == TKRightParenthesisCharacter ||
             ctx.Token() == TKStringLiteral)
    {
        //ZeroOrMoreOrF => Epsilon
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}
コード例 #21
0
ファイル: Sample1Parser.cpp プロジェクト: thradams/tklgen
void Parse_OptOperator(Context& ctx)
{
    if (ctx.Token() == TKQuestionMarkCharacter)
    {
        //OptOperator => QuestionMarkCharacter
        ctx.Match(TKQuestionMarkCharacter);
        ctx.Action_PrintOptional();
    }
    else if (ctx.Token() == TKAsteriskCharacter)
    {
        //OptOperator => AsteriskCharacter
        ctx.Match(TKAsteriskCharacter);
        ctx.Action_PrintZeroOrMore();
    }
    else if (ctx.Token() == TKPlusCharacter)
    {
        //OptOperator => PlusCharacter
        ctx.Match(TKPlusCharacter);
        ctx.Action_PrintOneOrMore();
    }
    else if (ctx.Token() == TKKeywordAny ||
             ctx.Token() == TKLiteralChar ||
             ctx.Token() == TKIdentifier ||
             ctx.Token() == TKSemicolonCharacter ||
             ctx.Token() == TKLeftParenthesisCharacter ||
             ctx.Token() == TKVerticalLineCharacter ||
             ctx.Token() == TKRightParenthesisCharacter ||
             ctx.Token() == TKStringLiteral)
    {
        //OptOperator => Epsilon
    }
    else
    {
        throw ParserException(ctx.GetLine(), ctx.GetCol(), ErrorCodeUnexpectedToken);
    }
}