为什么在识别词法单元时,会返回回车?
buchenglei opened this issue · 2 comments
buchenglei commented
识别如下文本时:
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
buchenglei commented
终于发现问题了。
这不是一个bug,而是逻辑上造成的差异,file模块中的get_char函数在从buffer中读取数据的时候会将空白符全部转换成空格,但是并没有改变buffer里的值,查看代码
但是在parse模块中执行run的时候,当使用了file模块中的get_word()函数时,直接从buffer读取的数据,并没有对空白符做处理。
其实这个问题不算大,因为run中始终是从get_char中获得字符的,这些字符都被处理过了,要修改这个问题只需要在get_word中添加同样的处理即可。
但是,考虑一下,这样做是否有必要,因为空白符并不会生成Token。
buchenglei commented
由于有些DFA需要处理换行符,换行符应该统一不在处理成空格