创建打印功能

时间:2009-10-26 15:40:53

标签: printing bison

我正在学习Bison,此时我唯一能做的就是 rpcalc 示例,但现在我想实现一个打印功能(如C的printf),但我不知道如何做到这一点,我打算有这样的print ("Something here");语法,但我不知道如何构建打印功能,我不知道如何创建它{ {1}}作为行尾。
感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

你首先要问问自己:
 什么是我的'印刷品的“子”部分(“某物”);'语法?

一旦识别出这些部分,就“简单地”以语法语法规则的形式描述它们,以及适用的生产规则。然后让Bison为你生成解析器;就是这个。

让您继续前进
半列可能是您用来分隔 statemements 的元素(这样一个“调用”来打印另一个)。
'print'本身可能是 关键字 ,或者最好是您语言的原生函数名称。
打印语句 似乎将 文字字符串 作为其参数之一。文字字符串以双引号开头和结尾(并且可能允许在其内部转义引号)
等等 上面的 粗体和斜体 表达式是您可能需要在语言语法中定义的一些实体(解析器术语中的“符号”)。为此,您将使用Bison语法规则,例如

stmt : print_stmt ';' | input_stmt ';'| some_other_stmt ';' ;
prnt_stmt : print '(' args ')' 
     { printf( $3 ); }
    ;

args : arg ',' args;
...

由于有关半柱的问题,可能有些混淆来自于它的不同用途;例如见上面的';'属于你的语言的语法,其中; (每个语法规则末尾没有引号)是Bison语言的一部分。

注意:这当然是一种简单的实现,旨在展示必要的。此外,Bison的语法可能很糟糕(曾经/做过,但很久以后;-)然后我“遇到” ANTLR 永远不会回到Bison,虽然我确实看到它的轻量级完全自包含的性质可以使它在某些情况下适当)