繁体   English   中英

编译器设计代码来解析goto和块

[英]compiler design code to parse goto and blocks

有人可以帮我理解如何为C程序解析lex和yacc文件来解析goto和blocks(labels)。

这是我在网上找到的一些示例:

<statement> ::= 
<variable> <inc> <semi>
| <variable> <assign> <null> <semi> 
| <goto> <label> <semi>

但是如何唯一地标识标签。 有人可以给我举这个例子或提到的任何链接的例子。

<label>在这里实际上意味着一个符号-一个标识符-必须与其他地方的标签定义相对应才能使程序正确。

您无需在语法分析器中“唯一标识”,即可通过语言的语法来标识标签。 允许标签与其他符号/变量名称重叠是完全合法的。 只需为合法标签添加规则,将词法分析器令牌用于IDENTIFIER,然后将标签存储在每个函数的符号表中,以便您可以检测重复的标签。

通常在类C语言中,标签是语句规则的一部分。 通常在其他任何地方都没有意义。 我的方式:

labeled_statement:
    IDENTIFIER ':' statement
    {
        $$ = $3;
        $$->label = new Label($1);
    }
    ;

其他方式:

 label:
     IDENTIFIER ':'
     { $$ = new Label($1); }
     ;

labeled_statement:
    label statement
    {
        $$ = $2;
        $$->label = $1;
    }
    ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM