bison/flex를 사용하여 간단한 xml 파서을 만들고 싶습니다. 유효성 검사, 의견, 인수가 필요하지 않습니다. 값은 숫자, 문자열 또는 기타 <tag>value</tag>
일 수 있습니다. <tag>value</tag>
만 필요합니다. 그래서 예를 들면bison/flex에있는 간단한 XML 파서
는 : 도움이된다면
<div>
<mul>
<num>20</num>
<add>
<num>1</num>
<num>5</num>
</add>
</mul>
<id>test</id>
</div>
, I가 발생할 수 있습니다 모든 태그의 이름을 알고있다. 주어진 태그에 얼마나 많은 하위 태그를 붙잡을 수 있는지 알고 있습니다.
- new Tag("num", 1) // tag1
- new Tag("num", 5) // tag2
- new Tag("add", tag1, tag2) // tag3
- new Tag("num", 20) // tag4
- new Tag("mul", tag4, tag3)
...
- root = top_tag
태그 & 하위 태그의 수 :
- NUM : 1 (전용 값)
- STR : 1 (만 그런 일을 할 것 들소 파서를 만들 수 있습니다 값)
- add | 서브 | 멀 | div : 2 (num | str | tag, num | str | tag)
위와 같이 AST를 만들 수 있도록 문법을 도와 주시겠습니까?
XML의 하위 집합을 사용하는 것이 중요합니까?귀하의 언어가 단순히 산술 표현식으로 구성되어 있다면, 당신은'(20 * (1 + 5))/test'와 같은 문자열을 사용할 수있는 중위 표현식을 파싱하는 대신에 당신이 보길 권합니다. 다른 이유가 필요하지 않다면, 특히 파서를 작성하는 경우 XML이 과도한 것처럼 보입니다! – shambulator
데이터가 XML로 유지되므로 선택의 여지가 없습니다. – user360872
늦은 응답에 대한 사과; 당신은 이것에 대한 해결책에 더 가깝습니까? XML을 사용해야한다는 점을 감안할 때 이미 작성된 라이브러리를 사용하지 않는 이유는 무엇입니까? 프로그래밍 언어를 선택할 수 있습니까? 또는 파서를 작성하는 연습의 요점은 무엇입니까? 그렇다면 파서 생성기를 사용해야합니까? 이와 같이 비교적 간단한 문법의 경우 재귀 적 파서를 쉽게 작성할 수 있습니다. – shambulator