buchenglei / rust-simple-c-compiler

一个使用Rust实现的simple C的编译器

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

为什么在识别词法单元时,会返回回车?

buchenglei opened this issue · comments

识别如下文本时:

char int
string

确返回了如下结果:

Accept word is |char|, is keyword? true
Accept word is | |, is keyword? false
Accept word is |int|, is keyword? true
Accept word is |
|, is keyword? false
Accept word is |string|, is keyword? true

为什么在int后边的换行符没有处理?
考虑一下这段代码:

https://github.com/buchenglei/rust-simple-c-compiler/blob/master/src/lexer/file.rs#L81

终于发现问题了。
这不是一个bug,而是逻辑上造成的差异,file模块中的get_char函数在从buffer中读取数据的时候会将空白符全部转换成空格,但是并没有改变buffer里的值,查看代码

但是在parse模块中执行run的时候,当使用了file模块中的get_word()函数时,直接从buffer读取的数据,并没有对空白符做处理。

其实这个问题不算大,因为run中始终是从get_char中获得字符的,这些字符都被处理过了,要修改这个问题只需要在get_word中添加同样的处理即可。

但是,考虑一下,这样做是否有必要,因为空白符并不会生成Token。

由于有些DFA需要处理换行符,换行符应该统一不在处理成空格