当前位置:编程学习 > C#/ASP.NET >>

求教,下面格式的序列怎么解析

求教,现在有这样一种格式的序列,需要解析成string。比如:1times(0 100,1 50,20times(1 100,0 50,300times(1 20,0 50,50times(1 20,0 60)))),1times表示后续的string重复1次。0 100,1 50,表示:100个0,后面接着50个1。

急,求大侠帮忙 --------------------编程问答-------------------- 似乎编译原理的课程设计会有这样的题目吧
问题就是一个括号匹配 --------------------编程问答-------------------- 知道规则了,就自己一步步根据规则解析 --------------------编程问答-------------------- 对,大概方向就是括号匹配。
引用 1 楼 truecoffeefox 的回复:
似乎编译原理的课程设计会有这样的题目吧
问题就是一个括号匹配
--------------------编程问答-------------------- 大师,能不能在代码上给些指导啊,比如具体用什么方法
引用 2 楼 bdmh 的回复:
知道规则了,就自己一步步根据规则解析
--------------------编程问答-------------------- 没人帮忙 --------------------编程问答-------------------- 用栈分析,先处理最内层的,最后处理最外层的 --------------------编程问答-------------------- 没有看出规则。 --------------------编程问答-------------------- 小弟头一次来CSDN,是不是要送积分啊? --------------------编程问答-------------------- 你好,能有空写下代码吗?谢谢啊
引用 6 楼 xuexiaodong2009 的回复:
用栈分析,先处理最内层的,最后处理最外层的
--------------------编程问答--------------------
            string str = "1times(0 100,1 50,20times(1 100,0 50,300times(1 20,0 50,50times(1 20,0 60))))";
            Regex reg = new Regex(@"([^()]+)(?:(?:(?<Open>\()([^()]*))*((?<-Open>\))[^()]*)*)*(?(Open)(?!))");
            foreach (Match m in reg.Matches(str))
            {
                Response.Write(m.Groups[1].Value+" ");
                foreach (Capture c in m.Groups[2].Captures)
                    Response.Write(c.Value+"<br/>");
            }
/*
1times 0 100,1 50,20times
1 100,0 50,300times
1 20,0 50,50times
1 20,0 60
*/
--------------------编程问答-------------------- 继续求啊,帮忙 --------------------编程问答-------------------- 这个东西,核心应该是括号匹配。就用一个Stack来模拟,从内往外构造这个串。

数据结构或者编译原理里,你能找到相应的内容。 --------------------编程问答--------------------
引用 12 楼 abbey 的回复:
这个东西,核心应该是括号匹配。就用一个Stack来模拟,从内往外构造这个串。

数据结构或者编译原理里,你能找到相应的内容。
+ --------------------编程问答-------------------- 继续请教:把文件完整格式贴来了
TRANSITION_LIST("INT_P")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1004400.0;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 1;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 48;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 49;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 38;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
}
} --------------------编程问答-------------------- TRANSITION_LIST("INT_P")
{
NODE
{
REPEAT = 1;
LEVEL 0 FOR 1004400.0;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 1;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 48;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 49;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
NODE
{
REPEAT = 38;
LEVEL 1 FOR 12000.0;
LEVEL 0 FOR 99600.0;
}
}
} --------------------编程问答-------------------- 这里面还涉及到平级的并列的循环,不知道怎么处理了啊
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,