我要建立在C词法分析器和我下面的龙书,我可以理解的状态转换,但是如何实施呢?

有没有更好的书?

,我要通过解析多个状态的一个字符串,以便能告诉我的字符串是否是可接受的或不!事实

有帮助吗?

解决方案

天儿真好,

假设你的意思是龙书上的编译器的设计,我建议你在看看周围此页面上编译工具。

在页面本身是相当小,但具有通过各种优秀资源的词法分析器链接。

HTH

欢呼声,

其他提示

您可以实现用一个单一的状态变量简单的状态转换,例如,如果你想循环状态开始 - > 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++;
}

构建词法分析器的过渡表的方法是,在我看来,不必要复杂的,并且显然运行速度较慢。

如果你正在寻找一个更现代的处理比龙书(S):安德鲁·W·阿佩尔和马亚金斯伯格,现代的用C 编译器实现,剑桥大学出版社,2008年。

第2章聚焦在词法分析:词法标记,正则表达式,有限自动机;非确定有限状态自动机;词法分析器发电机

看内容的

在程序挠曲(法的一个克隆)将创建为您词法分析器。

给定一个输入文件与词法分析规则,它会产生一个C文件与这些规则词法分析器的实施方案。

您可以这样检查的Flex如何用C编写一个词法分析器也就是说,如果你不就是想用柔性的词法分析器...

输出
scroll top