コード例 #1
0
ファイル: Parser.cs プロジェクト: takuto-h/rhea
 private IExpr ParseSymbolLiteral()
 {
     LookAhead();
     if (mHeadToken != TokenType.Identifier)
     {
         throw new RheaException(
             Expected("Identifier"), mLexer.GetSourceInfo()
         );
     }
     IExpr expr = new ExprConst(
         ValueSymbol.Intern((string)mLexer.Value)
     );
     LookAhead();
     return expr;
 }
コード例 #2
0
ファイル: Parser.cs プロジェクト: takuto-h/rhea
 private IExpr ParseInt()
 {
     IExpr expr = new ExprConst(new ValueInt((int)mLexer.Value));
     LookAhead();
     return expr;
 }
コード例 #3
0
ファイル: Parser.cs プロジェクト: takuto-h/rhea
 private IExpr ParseString()
 {
     IExpr expr = new ExprConst(new ValueString((string)mLexer.Value));
     LookAhead();
     return expr;
 }
コード例 #4
0
ファイル: Parser.cs プロジェクト: takuto-h/rhea
 private IExpr ParseAtom()
 {
     IExpr expr;
     switch (mHeadToken)
     {
     case TokenType.Int:
         expr = ParseInt();
         break;
     case TokenType.String:
         expr = ParseString();
         break;
     case TokenType.Identifier:
         expr = ParseVariableReference();
         break;
     case TokenType.Colon:
         expr = ParseSymbolLiteral();
         break;
     case TokenType.Hat:
         expr = ParseLambdaExpression();
         if (mHeadToken == TokenType.End)
         {
             LookAhead();
         }
         break;
     case TokenType.LeftParen:
         expr = ParseParenthesizedExpression();
         break;
     case TokenType.True:
         expr = new ExprConst(ValueTrue.Instance);
         LookAhead();
         break;
     case TokenType.False:
         expr = new ExprConst(ValueFalse.Instance);
         LookAhead();
         break;
     case TokenType.Nil:
         expr = new ExprConst(ValueNil.Instance);
         LookAhead();
         break;
     default:
         throw new RheaException(Unexpected(), mLexer.GetSourceInfo());
     }
     return expr;
 }