【问题标题】:Parser Generators and Ragel... Making my own D Parser解析器生成器和 Ragel... 制作我自己的 D 解析器
【发布时间】:2011-01-18 00:38:32
【问题描述】:
我是编译器领域的新手,最近听说了一种叫做解析器生成器的东西。根据我(认为)我的理解,解析器生成器接收一个语法文件并输出一个源代码文件,该文件可以解析具有给定语法的文件。
几个问题:
我理解正确吗?
如果是这样,Ragel 是这样的工具吗?
如果是,Ragel能否将D解析器输出为D源代码?
谢谢!
【问题讨论】:
标签:
d
parser-generator
ragel
【解决方案2】:
虽然 Ragel 基于正则表达式,但它只是一个正则表达式 FSM 生成器。它允许使用额外的调用/返回语法以及允许解析非常规语言的其他功能进行递归。因此,尽管 Ragel 确实生成了 FSM,但它允许生成多个不同的 FSM,并提供在任意点之间跳转的机制,或者使用特殊的机器转换语法。它还允许在状态转换时执行任意代码。
使 Ragel 与众不同的另一件事是它是在线的。换句话说,它很容易用于从异步源(例如非阻塞套接字)扫描数据。它也不使用动态资源,除了调用/返回可以使用堆栈的静态、自动或动态内存;随你怎么便。也没有全局状态。
Ragel 非常独特。与大多数(全部?)传统生成器不同,它是为网络编程而设计的。
【解决方案3】:
可能是:
MySourceCode --> (Scanner) --> MyScannerDataFile
MyScannerDataFile --> (解析器) --> MyParserDataFile
MyParserDataFile --> (CodeGenerator) --> MyExecutableFile
或:
MySourceCode --> (ScannerAndParser) --> MyScannerAndParserDataFile
MyScannerAndParserDataFile --> (CodeGenerator) --> MyExecutableFile