首页 > 解决方案 > 当我用bison解析一个java写的helloworld文件时,bison只能一行行解析。如何在多行中解析它?

问题描述

其实不用看代码,只需要告诉我如何解析一个方法体或类,bison如何解析多行结构化代码,而不是逐行解析

如何使用野牛来解析这个文件的代码?我目前的技术只能逐行解析。

public class test {
    public static void main(String[] args) {
        System.out.println("hello world");
    }
}

野牛代码

program: /* nothing */
    | program statement EOL
        {
            printf("%g\n>> ", eval($2));
            treefree($2);
        }
    | program declare_pre EOL 
        { printf("\n>> "); }
    | program declare_class EOL
        {
            printf("\n>>");
        }

    | program EOL
        { printf(">> "); }
    | program error EOL
        {
            yyerrok;
            printf("\n>> ");
        }
;

declare_class: /* nothing */    { $$ = NULL; }
    | class_access_modifier CLASS NAME '{' list '}'
        {
            defcls($3, $5);
            printf("%g\n>> ", eval($5));
            $$ = $3;
        }
;

例如,文件中的内容是:

public class test {}

bison 可以直接解析成功 但是如果换成另一种形式

public class test {
     void demo(int i, int j) {}
}

这时bison会报错,因为没有办法处理第一行'{'之后的内容,规则是'{'list'}' 不能匹配一个或多个换行符

标签: c

解决方案


推荐阅读