Hic*_*ick 4 c implementation finite-automata
我想在C中构建一个词法分析器,我正在关注龙书,我可以理解状态转换但是如何实现它们?
有更好的书吗?
事实上,我必须通过多个状态解析字符串,以便我可以判断字符串是否可接受!
您可以使用单个状态变量实现简单的状态转换,例如,如果您想循环通过状态start-> part1-> part2-> end,那么您可以使用枚举来跟踪当前状态并使用switch语句对于要在每个州运行的代码.
enum state { start=1, part1, part2, end} mystate;
// ...
mystate = start;
do {
switch (mystate) {
case start:
// ...
case part1:
// ...
case part2:
// ...
if (part2_end_condition) mystate = end; // state++ will also work
// Note you could also set the state back to part1 on some condition here
// which creates a loop
break;
}
} while (mystate != end);
Run Code Online (Sandbox Code Playgroud)
对于依赖于多个变量的更复杂的状态转换,您应该使用这样的表/数组:
var1 var2 var_end next_state
0 0 0 state1
0 1 0 state2
1 0 0 state3
1 1 0 state4
-1 -1 1 state_end // -1 represents "doesn't matter" here
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17884 次 |
| 最近记录: |