示例#1
0
 public AstFloat(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.Float);
     CheckIsLeaf(node);
     value = double.Parse(ToString());
 }
示例#2
0
 public AstMetaDataLabel(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.MetaDataLabel);
     CheckIsLeaf(node);
     Trace.Assert(children.Count == 0);
 }
示例#3
0
 public AstMacroTypeVar(PegAstNode node)
     : base(node)
 {
     CheckChildCount(node, 1);
     msName = node.GetChild(0).ToString();
     CheckLabel(AstLabel.MacroTypeVar);
 }
示例#4
0
        public AstBin(PegAstNode node)
            : base(node)
        {
            CheckLabel(AstLabel.Bin);
            CheckIsLeaf(node);
            string s     = ToString();
            int    n     = 0;
            int    place = 1;

            for (int i = s.Length; i > 0; --i)
            {
                if (s[i - 1] == '1')
                {
                    n += place;
                }
                else
                {
                    if (s[i - 1] != '0')
                    {
                        throw new Exception("Invalid binary number");
                    }
                }
                place *= 2;
            }
            value = n;
        }
示例#5
0
 public AstHex(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.Hex);
     CheckIsLeaf(node);
     value = int.Parse(ToString(), NumberStyles.AllowHexSpecifier);
 }
示例#6
0
        public AstMacroStackVar(PegAstNode node)
            : base(node)
        {
            if (node.GetNumChildren() < 1)
            {
                throw new Exception("invalid macro stack variable");
            }

            if (node.GetNumChildren() > 2)
            {
                throw new Exception("invalid macro stack variable");
            }

            msName = node.GetChild(0).ToString();

            if (node.GetNumChildren() == 2)
            {
                AstFxnType typeNode = new AstFxnType(node.GetChild(1));
                mType = CatFxnType.Create(typeNode) as CatFxnType;
                if (mType == null)
                {
                    throw new Exception("expected function type " + typeNode.ToString());
                }
            }

            CheckLabel(AstLabel.MacroStackVar);
        }
示例#7
0
 public AstInt(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.Int);
     CheckIsLeaf(node);
     value = int.Parse(ToString());
 }
示例#8
0
        public AstLambda(PegAstNode node)
            : base(node)
        {
            CheckLabel(AstLabel.Lambda);
            CheckChildCount(node, 2);

            AstParam name = new AstParam(node.GetChild(0));

            mIdentifiers.Add(name.ToString());
            CatAstNode tmp = Create(node.GetChild(1));

            // lambda nodes either contain quotes or other lambda nodes
            if (!(tmp is AstQuote))
            {
                if (!(tmp is AstLambda))
                {
                    throw new Exception("expected lambda expression or quotation");
                }
                AstLambda lambda = tmp as AstLambda;
                mIdentifiers.AddRange(lambda.mIdentifiers);

                // Take ownership of the terms from the child lambda expression
                mTerms = lambda.mTerms;
            }
            else
            {
                AstQuote q = tmp as AstQuote;

                // Take ownership of the terms from the quote
                mTerms = q.mTerms;
            }
        }
示例#9
0
 public void CheckChildCount(PegAstNode node, int n)
 {
     if (node.GetNumChildren() != n)
     {
         throw new Exception("expected " + n.ToString() + " children, instead found " + node.GetNumChildren().ToString());
     }
 }
示例#10
0
 public AstMacro(PegAstNode node)
     : base(node)
 {
     CheckChildCount(node, 2);
     CheckLabel(AstLabel.MacroRule);
     mSrc  = new AstMacroPattern(node.GetChild(0));
     mDest = new AstMacroPattern(node.GetChild(1));
 }
示例#11
0
 public AstRoot(PegAstNode node)
     : base(node)
 {
     foreach (PegAstNode child in node.GetChildren())
     {
         Defs.Add(new AstDef(child));
     }
 }
示例#12
0
 public RubyScript(PegAstNode node)
     : base(node)
 {
     foreach (PegAstNode child in node.GetChildren())
     {
         RubyAstNode statement = RubyAstNode.Create(child);
         mStatements.Add(statement);
     }
 }
示例#13
0
 public AstFxnType(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.FxnType);
     CheckChildCount(node, 3);
     mCons         = new AstStack(node.GetChild(0));
     mbSideEffects = node.GetChild(1).ToString().Equals("~>");
     mProd         = new AstStack(node.GetChild(2));
 }
示例#14
0
        public AstString(PegAstNode node)
            : base(node)
        {
            CheckLabel(AstLabel.String);
            CheckIsLeaf(node);
            // strip quotes
            string s = ToString();

            value = s.Substring(1, s.Length - 2);
        }
示例#15
0
 public AstMetaData(PegAstNode node)
     : base(node)
 {
     foreach (PegAstNode child in node.GetChildren())
     {
         AstMetaData x = Create(child) as AstMetaData;
         if (x == null)
         {
             throw new Exception("Meta data-nodes can only have meta-data nodes as children");
         }
         children.Add(x);
     }
 }
示例#16
0
        public CatAstNode(PegAstNode node)
        {
            if (node.GetLabel() != null)
            {
                mLabel = (AstLabel)node.GetLabel();
            }
            else
            {
                mLabel = AstLabel.AstRoot;
            }

            msText = node.ToString();
        }
示例#17
0
        public RubyAstNode(PegAstNode node)
        {
            if (node.GetLabel() != null)
            {
                mLabel = (ASTNodeType)node.GetLabel();
            }
            else
            {
                mLabel = ASTNodeType.SELF;
            }

            mText = node.ToString();
        }
示例#18
0
 public AstMacroQuote(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.MacroQuote);
     foreach (PegAstNode child in node.GetChildren())
     {
         AstMacroTerm term = Create(child) as AstMacroTerm;
         if (term == null)
         {
             throw new Exception("internal grammar error: macro quotations can only contain macro terms");
         }
         mTerms.Add(term);
     }
 }
示例#19
0
 public AstStack(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.Stack);
     foreach (PegAstNode child in node.GetChildren())
     {
         CatAstNode tmp = Create(child);
         if (!(tmp is AstType))
         {
             throw new Exception("stack AST node should only have type AST nodes as children");
         }
         mTypes.Add(tmp as AstType);
     }
 }
示例#20
0
 public AstQuote(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.Quote);
     foreach (PegAstNode child in node.GetChildren())
     {
         CatAstNode tmp = CatAstNode.Create(child);
         if (!(tmp is AstExpr))
         {
             throw new Exception("invalid child node " + child.ToString() + ", expected an expression node");
         }
         mTerms.Add(tmp as AstExpr);
     }
 }
示例#21
0
 public AstMacroPattern(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.MacroPattern);
     foreach (PegAstNode child in node.GetChildren())
     {
         AstMacroTerm tmp = CatAstNode.Create(child) as AstMacroTerm;
         if (tmp == null)
         {
             throw new Exception("invalid grammar: only macro terms can be children of an ast macro mPattern");
         }
         mPattern.Add(tmp);
     }
 }
示例#22
0
        public AstChar(PegAstNode node)
            : base(node)
        {
            CheckLabel(AstLabel.Char);
            CheckIsLeaf(node);
            string s = ToString();

            s = s.Substring(1, s.Length - 2);
            switch (s)
            {
            case "\\t": value = '\t'; break;

            case "\\n": value = '\n'; break;

            case "\\'": value = '\''; break;

            case "\\\"": value = '\"'; break;

            case "\\r": value = '\r'; break;

            default: value = char.Parse(s); break;
            }
        }
示例#23
0
 public AstMacroName(PegAstNode node)
     : base(node)
 {
     CheckChildCount(node, 0);
     CheckLabel(AstLabel.MacroName);
 }
示例#24
0
 public AstMacroTerm(PegAstNode node)
     : base(node)
 {
 }
示例#25
0
 public AstMacroProperty(PegAstNode node)
     : base(node)
 {
 }
示例#26
0
 public AstType(PegAstNode node)
     : base(node)
 {
 }
示例#27
0
 public AstMetaDataContent(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.MetaDataContent);
 }
示例#28
0
 public AstSimpleType(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.TypeName);
     CheckChildCount(node, 0);
 }
示例#29
0
 public AstMetaDataBlock(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.MetaDataBlock);
 }
示例#30
0
 public AstStackVar(PegAstNode node)
     : base(node)
 {
     CheckLabel(AstLabel.StackVar);
     CheckChildCount(node, 0);
 }