コード例 #1
0
ファイル: CatParser.cs プロジェクト: catb0t/cat-language
        public static List<CatAstNode> Parse(string s)
        {
            Peg.Parser parser = new Peg.Parser(s);

            try
            {
                bool bResult = parser.Parse(CatGrammar.CatProgram());
                if (!bResult)
                    throw new Exception("failed to parse input");
            }
            catch (Exception e)
            {
                Output.WriteLine("Parsing error occured with message: " + e.Message);
                Output.WriteLine(parser.ParserPosition);
                throw e;
            }

            AstProgram tmp = new AstProgram(parser.GetAst());
            return tmp.mStatements;
        }
コード例 #2
0
        public static List <CatAstNode> Parse(string s)
        {
            Peg.Parser parser = new Peg.Parser(s);

            try {
                bool bResult = parser.Parse(CatGrammar.CatProgram());
                if (!bResult)
                {
                    throw new Exception("failed to parse input");
                }
            } catch (Exception e) {
                Output.WriteLine("Parsing error occured with message: " + e.Message);
                Output.WriteLine(parser.ParserPosition);
                throw e;
            }

            AstProgram tmp = new AstProgram(parser.GetAst());

            return(tmp.mStatements);
        }
コード例 #3
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     int pos = p.GetPos();
     if (mRule.Match(p))
     {
         p.SetPos(pos);
         return false;
     }
     Trace.Assert(p.GetPos() == pos);
     return true;
 }
コード例 #4
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     return p.AtEnd();
 }
コード例 #5
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     if (!mRule.Match(p))
         return false;
     while (mRule.Match(p))
     { }
     return true;
 }
コード例 #6
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     while (mRule.Match(p))
     { }
     return true;
 }
コード例 #7
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     if (p.AtEnd()) return false;
     if (p.GetChar() >= mFirst && p.GetChar() <= mLast)
     {
         p.GotoNext();
         return true;
     }
     return false;
 }
コード例 #8
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     if (!p.AtEnd())
     {
         p.GotoNext();
         return true;
     }
     return false;
 }
コード例 #9
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     // TODO: make a more descriptive error message.
     if (!mRule.Match(p))
         throw new Exception(msMsg);
     return true;
 }
コード例 #10
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     return mDeleg().Match(p);
 }
コード例 #11
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     p.CreateNode(mLabel);
     bool result = mRule.Match(p);
     if (result)
     {
         p.CompleteNode();
     }
     else
     {
         p.AbandonNode();
     }
     return result;
 }
コード例 #12
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public abstract bool Match(Parser p);
コード例 #13
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public void Complete(Parser p)
 {
     mnCount = p.GetPos() - mnBegin;
 }
コード例 #14
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public PegAstNode Add(Parser p, Object label)
 {
     PegAstNode ret = new PegAstNode(p.GetPos(), msText, this, label);
     mChildren.Add(ret);
     return ret;
 }
コード例 #15
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     if (p.AtEnd()) return false;
     if (p.GetChar() == mData)
     {
         p.GotoNext();
         return true;
     }
     return false;
 }
コード例 #16
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     if (p.AtEnd()) return false;
     int pos = p.GetPos();
     foreach (char c in mData)
     {
         if (p.GetChar() != c)
         {
             p.SetPos(pos);
             return false;
         }
         p.GotoNext();
     }
     return true;
 }
コード例 #17
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     int iter = p.GetPos();
     foreach (Rule r in mRules)
     {
         if (!r.Match(p))
         {
             p.SetPos(iter);
             return false;
         }
     }
     return true;
 }
コード例 #18
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     if (p.AtEnd())
         return false;
     foreach (char c in mData)
     {
         if (c == p.GetChar())
         {
             p.GotoNext();
             return true;
         }
     }
     return false;
 }
コード例 #19
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     foreach (Rule r in mRules)
     {
         if (r.Match(p))
             return true;
     }
     return false;
 }
コード例 #20
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     int pos = p.GetPos();
     while (!mTerm.Match(p))
     {
         if (!mElem.Match(p))
         {
             p.SetPos(pos);
             return false;
         }
     }
     return true;
 }
コード例 #21
0
ファイル: PegParser.cs プロジェクト: catb0t/cat-language
 public override bool Match(Parser p)
 {
     mRule.Match(p);
     return true;
 }