题
解决方案
其他提示
您可以实现用一个单一的状态变量简单的状态转换,例如,如果你想循环状态开始 - > part1-> part2->结束,那么你可以使用一个枚举,以保持目前的状态和使用的轨道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);
有关依赖于几个变量更复杂的状态转换,则应该使用表/阵列是这样的:
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
不止一种方法去做一件事。每个正则表达式直接对应于一个简单的结构化程序。例如,对于数字的表达可能是这样的:
// regular expression
digit* [.digit*]
和相应的C代码将是:
// corresponding code
while(DIGIT(*pc)) pc++;
if (*pc=='.'){
pc++;
while(DIGIT(*pc)) pc++;
}
构建词法分析器的过渡表的方法是,在我看来,不必要复杂的,并且显然运行速度较慢。
在程序挠曲(法的一个克隆)将创建为您词法分析器。
给定一个输入文件与词法分析规则,它会产生一个C文件与这些规则词法分析器的实施方案。
您可以这样检查的Flex如何用C编写一个词法分析器也就是说,如果你不就是想用柔性的词法分析器...
输出不隶属于 StackOverflow