我正在学习 Bison,此时我唯一做的就是rpcalc示例,但现在我想实现一个打印函数(如printf
C),但我不知道如何做到这一点,我正在计划有这样的语法print ("Something here");
,但我不知道如何构建打印函数,也不知道如何创建它;
作为行尾。
谢谢你的帮助。
问问题
143 次
1 回答
1
您首先需要问自己:
我的“打印(“某事”)的 [子] 部分是什么;句法 ?
一旦你确定了这些部分,“简单地”以语法语法规则的形式描述它们,以及适用的生产规则。然后让 Bison 为你生成解析器;就是这样。
让你上路:
半列可能是你用来分隔语句的元素 (比如一个“调用”从另一个打印)。
'print' 本身可能是一个关键字,或者最好是您语言的本机函数名称。print 语句似乎将
文字字符串作为其参数之一。文字字符串以双引号开头和结尾(并且可能在其自身中允许转义引号)
等。上面的粗体和斜体表达式是您可能需要定义的一些实体(解析器术语中的“符号”)您的语言的语法。为此,您将使用 Bison 语法规则,例如
stmt : print_stmt ';' | input_stmt ';'| some_other_stmt ';' ;
prnt_stmt : print '(' args ')'
{ printf( $3 ); }
;
args : arg ',' args;
...
既然问题是关于半柱的,也许有些混淆是因为它的不同用途;例如,请参见上面的 ';' 属于您的语言的语法,其中 ; (没有引号)在每个语法规则的末尾是 Bison 语言的一部分。
注意:这当然是一个简单的实现,旨在展示本质。此外,Bison 语法可能是一个 tat off(去过那里/做过,但很久以前 ;-) 然后我“遇到”了ANTLR,再也没有回到 Bison,尽管我确实看到了它的轻量级和完全自给自足的性质如何使在某些情况下是合适的)
于 2009-10-26T17:27:25.027 回答