【发布时间】:2011-07-26 09:27:40
【问题描述】:
我正在开发一个 shell,一个类似 bash 的小型 shell,没有脚本(如果 while ...) 我必须手工制作词法分析器/解析器 (LL)。
因此词法分析器会将命令 (char *cmd) 转换为链表 (t_list *list)。 并且 LL 解析器会将链表 (t_list *list) 转换为带有 grammar
的 AST(二叉树 t_btree *root)所以,我知道如何制作 LL 解析器,但我不知道如何标记我的命令。
例如:ps | grep ls >> file ; make && ./a.out
=> 'ps' '|' 'grep' 'ls' '>>' 'file' ';' ''make '&&' './a.out'
谢谢。
(我不想使用任何生成器)
【问题讨论】:
-
到目前为止你有什么?你被困在哪里了?
-
由于您将其标记为“普通 C”,听起来您应该使用重复调用
strchr(cmd, ' ')或类似的东西来针对命令字符串进行循环。 -
是的,我的命令字符串上有一个循环。但我不知道如何定义我的标记以及如何在字符串中标记它们。 http://pastebin.com/K1YZchMK
-
@Spudd86 不,我不能,因为我的命令字符串中有一些字符串,所以如何将
ls -la标记在一个标记中? -
strtok 做你想做的事。