는 --
이 주석 행으로 처리됩니다와 선이 시작파서 (lex/yacc)를 만드는 방법은 무엇입니까? 나는 다음과 같은 파일을 갖고있어
--TestFile
Start ASDF123
Name "John"
Address "#6,US"
end ASDF123
을 구문 분석 할 필요가있다. 파일은 '시작'을 시작하여 end
으로 끝납니다. Start
다음의 문자열은 UserID
이고 name
및 address
은 큰 따옴표 안에 들어갑니다.
파일을 구문 분석하고 구문 분석 된 데이터를 xml 파일에 기록해야합니다.
이렇게 얻어진 파일
<ASDF123>
<Name Value="John" />
<Address Value="#6,US" />
</ASDF123>
이제 상기 파일을 파싱하는 패턴 매칭 (Regular Expressions
)를 사용하는 것 같은 것이다. 여기 내 샘플 코드입니다.
/// <summary>
/// To Store the row data from the file
/// </summary>
List<String> MyList = new List<String>();
String strName = "";
String strAddress = "";
String strInfo = "";
방법 : ReadFile을
/// <summary>
/// To read the file into a List
/// </summary>
private void ReadFile()
{
StreamReader Reader = new StreamReader(Application.StartupPath + "\\TestFile.txt");
while (!Reader.EndOfStream)
{
MyList.Add(Reader.ReadLine());
}
Reader.Close();
}
방법 : FormateRowData
/// <summary>
/// To remove comments
/// </summary>
private void FormateRowData()
{
MyList = MyList.Where(X => X != "").Where(X => X.StartsWith("--")==false).ToList();
}
방법 : ParseData
,방법 :의 WriteFile은
/// <summary>
/// To write parsed information into file.
/// </summary>
private void WriteFile()
{
XDocument XD = new XDocument(
new XElement(strInfo,
new XElement("Name",
new XAttribute("Value", strName)),
new XElement("Address",
new XAttribute("Value", strAddress))));
XD.Save(Application.StartupPath + "\\File.xml");
}
렉스와 Yacc에를 사용하여 파서를 작성하도록 도와주세요 ParserGenerator
들었습니다. 그 이유는 내 기존 파서 (Pattern Matching
)가 유연하지 않기 때문입니다. 올바른 방법이 아닙니다 (나는 그렇게 생각합니다).
나는 ParserGenerator
을 사용하는 방법 (나는 Code Project Sample One과 Code Project Sample Two을 읽었으나 아직도이 것에 익숙하지 않다). C# 파서를 출력하는 파서 생성기를 제안 해주십시오.