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

  • 相关阅读:
    (22)C#windows打包部署
    (2)OLEDB数据库操作
    (5)C#工具箱-数据
    (21)C#VS快捷键
    (1)OracleClient数据库操作(淘汰)
    (4)C#工具箱-菜单和工具栏
    (3)C#工具箱-容器
    (2)C#工具箱-公共控件2
    (9)oracle 表的基本查询
    企鹅
  • 原文地址:https://www.cnblogs.com/wangzming/p/10344531.html
Copyright © 2011-2022 走看看