![]() |
1
4
所以你不能用
在其他语言中,这意味着翻译字符流,如
由于所有Brainfuck代币都只包含一个字符,所以对Brainfuck进行词法分析的帮助要小得多。因此,找出每个标记的结束位置和下一个标记的开始位置是不可行的,而找出标记的类型只意味着将字符与“[”、“+”等进行比较。因此,Brainfuck lexer所做的唯一有用的事情是丢弃空格和注释。
所以你的lexer要做的就是转动输入
如果您想使用解析器生成器,您需要在解析器的语法中定义令牌类型,并使lexer生成这些类型的值。然后解析器可以只解析令牌流。
如果你想手工解析,你可以调用lexer的
也就是说,我建议一直使用解析器生成器来创建AST。这样你就不必为循环创建令牌缓冲区,拥有AST实际上可以节省一些工作(你不再需要一个堆栈来跟踪哪一个)
|
![]() |
Tosh · ocaml获取语法错误[已关闭] 7 年前 |
![]() |
Beta Ziliani · OCaml-与类型别名混淆(警告40) 7 年前 |
![]() |
Jheel rathod · 带有构造函数的ocaml递归类型记录 7 年前 |
![]() |
HegoDamask · (OCaml:非穷举模式匹配) 7 年前 |
![]() |
Flux · 如何以静默方式加载顶级模块 7 年前 |
![]() |
Flux · 如何编写显示HTML或重定向到其他页面的服务 7 年前 |
![]() |
Daiwen · ocaml中GADT的异构列表[重复] 7 年前 |
![]() |
nejifnjalz · OCaml语法错误-有趣的模式匹配 7 年前 |
![]() |
M. Walker · 无法键入多态[%bs.raw函数 7 年前 |