我目前正在尝试构建一个相当原始的解析器,它强烈地面向本文评论中的代码: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)有一个全局变量来保存状态机之后应该返回的先前状态 - >全局变量也是一个坏主意
我很乐意接受帮助:)