我想在C语言中构建一个编译器。我现在写了一个词法分析器,它可以读取输入文件并输出一个令牌流。 现在,我理解语法背后的理论,并且我知道如何为不同的表达式手工编写解析树。 但我有点失落,将其与实际的代码相关联! 我得到令牌后应该如何开始解析过程? 首先,我的解析器程序在接收到第一个标记时应该做些什么?我知道它必须以树的形式排列。但我该如何开始? 任何帮助都会很棒,我只是一个初学者。一旦词法分析器返回一个标记,如何开始分析? (建立一个编译器)
非常感谢!
它处理当前令牌后的下一个令牌。现在,我打算假设我的语言完全由赋值语句组成。
所以,BNF形式是一样的东西:
<assignment_statement> ::= <destination> := <factor>
<destination> ::= <identifier>
<identifier> ::= [a-zA-Z][a-zA-Z0-9]*
<factor > ::= <name>|<number>|<string>
<name> ::= <identifier>
<number> ::= [0-9]+
<string> ::="[a-zA-Z0-9]*"
现在,当我看到这样的声明:var := 9
,词法分析器将返回的第一个标记为“无功”,会出现什么父规则是和子规则是? 另外,我该如何去构建这个语句的解析树?
非常感谢!
或者您可能想要使用YACC,或者更确切地说,它的盛大的孩子Bison。 – 2011-01-13 14:18:02