From: Cheng-Chang Wu <che...@ya...> - 2006-09-29 11:14:40
|
--- Colin Adams <col...@ho...> 說: > > What's it supposed to do? > > I looked at the files you suggested, and they don't > tell me. > Thank you for your asking. It a tool for generating eiffel source code from a given RELAX NG grammar. By embedding code fragments in the grammar, you can take appropriate actions while parsing valid XML documents against the grammar. In gerng.e the feature 'build_start_state' is generated from gerng.rng. Feature build_start_state builds a finite state machine. In the case of gerng the state machine is a executable RelaxNG specification, i.e gerng.rng is a simplified version of RelaxNG specification with some eiffel code embedded in it with tag <eiffel:start> or <eiffel:exit>. Tag <eiffel:start> specified what action should be done before entering a state. Tag <eiffel:exit> specified what should be done upon leaving a state. The text part of <eiffel:start> and <eiffel:exit> should be an eiffel agent. If you can compile gerng.e, you can try 'gerng gerng.rng' . It will output the feature build_start_state to standard output. You can then run gerng on other RelaxNG files. If your RelaxNG files don't have <eiffel:enter> or <eiffel:exit>, the generated FSM can be used as validator to check input against the RelaxNG specification. I have no time to implement the optimizations proposed in james clark's paper under the titles 'Avoiding exponential blowup' and 'Memoization'. It was fun to develop gerng. At beginning I must write a buggy build_start_state myself, applied it on a simplified gerng.rng, generated a improved version of build_start_state. Then I improved the gerng.rng further to include more RelaxNG elements. I hope it has covered all elements of RelaxNG, but I'm not sure. I used it in my project to validate xml messages defined with RelaxNG and generate commands from the validated xml messages. Cheng-Chang Wu ___________________________________________________ 您的生活即時通 - 溝通、娛樂、生活、工作一次搞定! http://messenger.yahoo.com.tw/ |