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部分

  • 相关阅读:
    USB 描述符详细解析,来自老外网站,比协议描述清晰
    linux那些事儿之我是usb
    usb开源项目
    Quartus II 增量编译
    Quartus II 与 Modelsim 联调【转】
    Matlab语法
    RC上电复位时间计算
    Quartus 编译错误
    UltraEdit 所有快捷键 说明
    [转载]BT656/BT601/BT1120协议
  • 原文地址:https://www.cnblogs.com/wangzming/p/10344531.html
Copyright © 2011-2022 走看看