⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bnf.g

📁 一个非常好的检索工具
💻 G
字号:
%Options la=2,gp=java,act,an=bnfact.java,hn=bnfhdr.java,tab=space,fp=bnf,prefix=TK_,%Options nogoto-default,output-size=125,names=max,error-maps%Define-- This software is subject to the terms of the IBM Jikes Parser-- Generator License Agreement available at the following URL:-- http://www.ibm.com/research/jikes.-- Copyright (C) 1983, 1999, International Business Machines Corporation-- and others.  All Rights Reserved.-- You must accept the terms of that agreement to use this software.-- This grammar has been augmented with productions that captures-- most errors that a user is likely to make. This saves the need-- to have an error recovery system.-- -- This macro is used to initialize the rule_action array-- to the null_action function.--%null_action/.        new NullAction(),./ -- -- This macro is used to initialize the rule_action array-- to the no_action function.--%no_action/.        new NoAction(),./ %Terminals    SYMBOL PRODUCES OR EOF ERROR%Alias    '::='  ::= PRODUCES    '|'    ::= OR    %EOF   ::= EOF    %ERROR ::= ERROR%Rules/:class bnfhdr extends bnfact{    Action rule_action[] = {        null, // no element 0://.class bnfact{    Parser parser;    bnfact(Parser parser)    {        this.parser = parser;    }    void print_rule(int rule_no)    {        String rule = new String();        rule = parser.name[parser.non_terminal_index[parser.lhs[rule_no]]] + " ::=";        if (parser.rhs[rule_no] == 0)            rule += " %empty";        else        {            for (int i = 1; i <= parser.rhs[rule_no]; i++)            {                int non_term = parser.SYM(i),                    term = parser.lex_stream.Kind(parser.TOKEN(i));                rule += (" " + (non_term == 0 ? parser.name[parser.terminal_index[term]]                                              : parser.name[parser.non_terminal_index[non_term]]));            }        }        System.out.println("Reducing rule number " + rule_no + ": " + rule);        return;    }    interface Action    {        public void action();    }    final class NoAction implements Action    {        public void action() {}    }    final class NullAction implements Action    {        public void action()        {            System.out.println("A null production");        }    }./bnf ::= %empty  /:        new act%rule_number(),:/  /.    //     // Rule %rule_number:  %rule_text    //    final class act%rule_number implements Action    {        public void action()        {            print_rule(%rule_number);            parser.setSYM1((int) parser.lhs[%rule_number]);        }    }  ./bnf ::= bnf rules  /:        new act%rule_number(),:/  /.    //     // Rule %rule_number:  %rule_text    //    final class act%rule_number implements Action    {        public void action()        {            print_rule(%rule_number);            parser.setSYM1((int) parser.lhs[%rule_number]);        }    }  ./rules ::= rule  /:        new act%rule_number(),:/  /.    //     // Rule %rule_number:  %rule_text    //    final class act%rule_number implements Action    {        public void action()        {            print_rule(%rule_number);            parser.setSYM1((int) parser.lhs[%rule_number]);        }    }  ./rules ::= rules '|' symbol_list  /:        new act%rule_number(),:/  /.    //     // Rule %rule_number:  %rule_text    //    final class act%rule_number implements Action    {        public void action()        {            print_rule(%rule_number);            parser.setSYM1((int) parser.lhs[%rule_number]);        }    }  ./rule ::= SYMBOL '::=' symbol_list  /:        new act%rule_number(),:/  /.    //     // Rule %rule_number:  %rule_text    //    final class act%rule_number implements Action    {        public void action()        {            print_rule(%rule_number);            parser.setSYM1((int) parser.lhs[%rule_number]);        }    }  ./symbol_list ::= %empty  /:        new act%rule_number(),:/  /.    //     // Rule %rule_number:  %rule_text    //    final class act%rule_number implements Action    {        public void action()        {            print_rule(%rule_number);            parser.setSYM1((int) parser.lhs[%rule_number]);        }    }  ./symbol_list ::= symbol_list SYMBOL  /:        new act%rule_number(),:/  /.    //     // Rule %rule_number:  %rule_text    //    final class act%rule_number implements Action    {        public void action()        {            print_rule(%rule_number);            parser.setSYM1((int) parser.lhs[%rule_number]);        }    }  .//:    };    bnfhdr(Parser parser)    {        super(parser);    }}://.}./%End

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -