c++ - 是否可以使用带有 bison/yacc 的逆波兰符号为一种语言生成解析器?

标签 c++ yacc bison

是否可以使用 bison/yacc 为使用逆波兰符号(和类似 Postscript 的语法)的脚本语言生成解析器?

解析器应该能够解析类似于下面的代码:

/fib
{
  dup dup 1 eq exch 0 eq or not
  {
    dup 1 sub fib
    exch 2 sub fib
    add
  } if
} def

最佳答案

鉴于上面的简短描述和维基百科上的注释:
http://en.wikipedia.org/wiki/Stack-oriented_programming_language#PostScript_stacks

上面的一个简单的 Bison 语法可以是:

%token          ADD
%token          DUP
%token          DEF
%token          EQ
%token          EXCH
%token          IF
%token          NOT
%token          OR
%token          SUB
%token          NUMBER
%token          IDENTIFIER

%%


program         :   action_list_opt
action_list_opt :   action_list
                |                           /* No Action */
action_list     :   action
                |   action_list action
action          :   param_list_opt operator
param_list_opt  :   param_list
                |                           /* No Parameters */
param_list      :   param
                |   param_list param
param           :   literal
                |   name
                |   action_block

operator        :   ADD
                |   DUP
                |   DEF
                |   EQ
                |   EXCH
                |   IF
                |   NOT
                |   OR
                |   SUB

literal         :   NUMBER
name            :   '/' IDENTIFIER
action_block    :   '{' program '}'


%%

关于c++ - 是否可以使用带有 bison/yacc 的逆波兰符号为一种语言生成解析器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3553905/

相关文章:

c++ - Windows 服务启动失败 "Path ' .' not found"

c++ - 在 C++ 中嵌入 Guile 的问题

c - 为什么 YACC 不产生 shift-reduce 冲突?

parsing - 编写 BNF 时 { 和 } 之间有什么?

c - 我在 Bison 中的 C 函数?

idl 中 COM 的 C++ 公开属性显示为小写 "all of a sudden"

c++ - Visual Studio 中 _WIN64 和 TARGET_X64 宏的具体区别

c++ - 如何在 CGI 的 POST 请求中处理 0 内容长度?

c - Flex 和 Bison C 加法器在不执行表达式后给出错误