在C中构建词法分析器

Hic*_*ick 4 c implementation finite-automata

我想在C中构建一个词法分析器,我正在关注龙书,我可以理解状态转换但是如何实现它们?

有更好的书吗?

事实上,我必须通过多个状态解析字符串,以便我可以判断字符串是否可接受!

sch*_*der 6

您可以使用单个状态变量实现简单的状态转换,例如,如果您想循环通过状态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)


Rob*_*lls 4

你好,

假设您指的是有关编译器设计的《The Dragon》一书,我建议您浏览一下此页面

该页面本身很小,但提供了有关词法分析器的各种优秀资源的链接。

华泰

干杯,