zoukankan      html  css  js  c++  java
  • 【自制编译器】读书笔记 -- 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部分

  • 相关阅读:
    c++ 优化的动态数组 Vector
    C++ 重载赋值运算符
    k8s中引入外部服务
    MySQL----mysql_secure_installation 安全配置向导
    elk参考连接
    限制不同的用户操作k8s的资源
    tcpdump 抓包命令使用教程
    日志管理——rsyslog、logrotate
    lsyncd配置文件详细说明
    Systemd 服务配置文件(转载)
  • 原文地址:https://www.cnblogs.com/wangzming/p/10344531.html
Copyright © 2011-2022 走看看