Использование Xml Linq:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication53
{
class Program
{
const string FILENAME = @"c:\temp\test.xml";
static void Main(string[] args)
{
XDocument doc = XDocument.Load(FILENAME);
foreach (XElement g_1 in doc.Descendants("G_1"))
{
string leader = "";
foreach (XElement element in g_1.Elements())
{
string output = string.Format("{0}{1}:{2}", leader, element.Name.LocalName, (string)element);
Console.WriteLine(output);
if (leader.Length == 0) leader = " ";
}
}
Console.ReadLine();
}
}
}
Скобки в выражении довольно распространены. Сначала я отошлю вас к части 5 документации PLY , в которой приведен пример разбора вложенных выражений. Да, рекурсия - это ответ.
Есть несколько фраз, которые используются для обозначения «наименьшего элемента выражения». Вы можете увидеть «atom» или «term» (сокращение от «Terminal») или «primary-expression».
При работе с подвыражениями в скобках обычно используется именно такой подход. Напишите правило грамматики, которое объединяет различные низкоуровневые вещи (например, литеральные числа и имена переменных) и добавьте под-выражение в этой точке.
В этом примере, из документов PLY, expression
является вещью самого высокого уровня и поддерживает сложение и вычитание. Следующий уровень - term
, который поддерживает умножение и деление. Самым низким уровнем является factor
, который не поддерживает никаких операций, но объединяет NUMBER
и подвыражения в скобках. Фактором может быть 7
, но также может быть (7 + 2 * 3)
.
expression : expression + term
| expression - term
| term
term : term * factor
| term / factor
| factor
factor : NUMBER
| ( expression )