• 【自制编译器】读书笔记 -- JavaCC使用的JJ文件格式


    options {
        STATIC = false;
    }
    PARSER_BEGIN(Adder)
    import java.io.*;
    
    class Adder {
        static public void main(String[] args) {
            for (String arg: args) {
                try {
                   System.out.println(evaluate(arg));
                }
                catch (ParseException ex) {
                    System.err.println(ex.getMessage());
                }
            }
        }
        static public long evaluate(String src) throws ParseException {
            Reader reader = new StringReader(src);
            return new Adder(reader).expr();
        }
    }
    PARSER_END(Adder)
    
    SKIP: {<[" ", "	", "
    ", "
    "]>}
    TOKEN: {
        <INTEGER: (["0"-"9"])+>
    }
    TOKEN: {
        <VOID : "void">
       |<CHAR : "char">
       |<INT  : "short">
    }
    
    long expr():
    {
        Token x,y;
    }

    PASER_BEGIN, PARSER_END 定义了parser使用到的类

    SKIP,TOKEN 等是保留的单词,存在的意义是用于解析代码

    long是类型,代表的是long类型的符号字面量和它的实际用到的语义

    expr():{...} 这里表示了一个表达式,在编译原理课程中是指生成式

    其他的还有一些通用的函数如name()

    这些语法都用在JavaCC使用的jj后缀文件里,在JavaCC里可以用来写语法制导的翻译,还有AST(抽象语法树的生成

    利用javacc 编译jj后缀的文件得到java文件,编译后得到parser类,用于后续处理。至于解析后单元翻译成的代码,要继续看IR部分

  • 相关阅读:
    动手动脑及作业
    技能——沟通
    大道至简第三章读后感
    编写一个程序,用户输入两个数,求其加减乘除,并用消息框显示计算结果。
    动手动脑及课后实验
    大道至简第六章
    继承与接口
    产生随机数并窗口显示他们的和
    大道至简——失败也是积累
    动手动脑
  • 原文地址:https://www.cnblogs.com/wangzming/p/10344531.html
Copyright © 2020-2023  润新知