我目前正在尝试构建一个相当原始的解析器,它强烈地面向本文评论中的代码:What is the best way to write a syntax tokenizer/parser in C? . 这个示例代码已经非常有用了 .

现在我遇到了一个问题:我有一个在字符串标记内的状态 . 解析字符串意味着令牌由多个单词组成,因此带有引号 .

示例:“Hello to”the world - > 3 Tokens:1)Hello to 2)3)world

还有另一种情况,即解析变量 . 如果getc()达到'$'而不是以下字符,直到下一个空格被视为来自main()的环境变量名称 .

示例:$ PWD - > 1令牌:/ Users / John / Documents

问题既不是ParseString也不是ParseVariable状态 .

我的问题是:如果字符串中出现“$”怎么办?我想我需要切换到ParseVariable状态 . 但之后我必须回来 . 我怎样才能做到这一点?

我有几个想法,但觉得所有这些都是解决方法..

1)简单地在ParseString状态下编程ParseVariable状态的函数 - >重复代码永远不会很好....

2)有一个全局变量来保存状态机之后应该返回的先前状态 - >全局变量也是一个坏主意

我很乐意接受帮助:)