javacc

5.JavaCC官方入门指南-概述

故事扮演 提交于 2020-05-01 20:10:09
一、前言   在最开始使用JavaCC的时候,从网上查询了许多资料,但是网上的资料水平是参差不齐的,走了许多弯路,不得已自己查阅了英文版官网文档。令我伤心的是最后我回过头来再看那些博客资料时,发现其实他们写的都是没错的,只不过某些地方少了必要的讲解,以至于新手刚接触的时候是持续懵逼的。   不管怎样,下面内容是对官方文档的翻译,加上一些自己的理解。   官方文档连接: https://www.engr.mun.ca/~theo/JavaCC-Tutorial/javacc-tutorial.pdf   这里所翻译的部分是JavaCC的入门知识,通过由浅入深的几个小例子,可以循序渐进的一步步了解JavaCC技术。 二、 JavaCC概述   JavaCC全称为Java Compiler Compiler,它是一个生成器,用于生成词法分析器(lexical analysers)和语法分析器(parsers)。它可以通过读取一个词法和语法描述文件(即词法和语法描述是写在同一个文件中的),来生成一个java程序,这个java程序就包括了词法分析器和语法分析器。接着就可以用生成的词法分析器和语法分析器来对我们的输入进行判断,判断输入是否符合我们所要求的语法规则。   编程语言中的编译器,其实就包含了词法分析器和语法分析器,编译器便是通过这两者来识别我们所编写的代码。除了在编译器中的应用之外

深入理解Java虚拟机_10_早期(编译期)优化

戏子无情 提交于 2020-03-10 17:04:54
10.1 概述 Java 语言的编译期是一段“不确定”的操作过程,因为它可能是指一个前端编译器(其实应该叫做“编译器的前端”)把 *.java 文件编译成 *.class 文件的过程;也可能是指虚拟机的后端运行期编译器(JIT 即时编译器,just in time compiler)把字节码转变为机器码的操作过程;还可能指使用静态提前编译器(AOT 编译器,Ahead of time compiler)把 *.java 文件编译成机器代码的过程。下面列举三个有代表性的编译器: 前端编译器:Sun 的 javac、eclipse JDT 中的增量式编译器(ECJ)。 JIT 编译器:Hotspot VM 的 C1、C2 编译器。 AOT 编译器:GNU Compiler for the Java(GCJ)、Excelsior JET。 本章中的“编译期”和“编译器”都局限于第一类编译过程。Java 中即时编译器在运行期的优化过程对程序运行来说更重要,而前端编译器在编译期的优化对程序编码来说关系更密切。 10.2 Javac 编译器 我们开始分析下 javac 编译器的源码。 10.2.1 Javac 的源码与调试 我们可建立一个名为“Compiler_javac” 的 Java 工程,然后把 JDK_SRC_HOME/langtools/src/share/classes/com

Java无可匹敌的变身装备,钢铁侠客的绝密味道

耗尽温柔 提交于 2020-02-27 13:59:23
以上几个工具包,有些是比较偏门的,但它们完成的功能却非常酷炫。不仅酷炫,而且非常有用。在领导们频繁开会,使用各种方法论探讨怎么管理文档,怎么自动化,怎么代码审查的时候,你就已经把功能完成了。 我讨厌写一些业务代码,不仅仅因为它们的原始意图不是我设计的,成功了是产品的功劳,失败了代码要背锅。一个重要的原因,就是重复的代码太多,一个复杂的业务逻辑要找到它的Bug,也要下一番“苦力”。这里说的真的是苦力,而不是脑力,说明了大部分是低劣的重复劳动。 所以随着在项目中有了话语权,我会特别善待这些可怜的同学们。一个问题,直到发现的时候,才发现它的低级,但中间的曲折,很少有人能看到,一个非技术出身的管理者对此就很难理解。职位越是高,就越关注整体的目标达成,对个体的感受却关注的很少,这不是一个好的现象。千里之堤,溃于蚁穴。普通研发的整体水平代表了公司的竞争力。哦哦哦,我竟然违背了精英主义论调。 扯远了。下面介绍几个开发中常用的工具包,可以在Java源文件、语法树、字节码之间进行转换。用好了它们,不仅仅能实现一些黑科技,还能大大提高我们的生产力。 1、JavaPoet 有时候,我们要做一些代码生成工具,需要生成一些Java类源文件。如果使用字符串去拼接的话,很容易拼的乱七八糟。为了解放双手,就可以使用工具JavaPoet进行方法或者代码块的构建。它还提供了占位符等一系列方便的操作

JavaCC - parse a step of an XPATH expression

三世轮回 提交于 2020-01-25 12:52:26
问题 I'm trying to write a JavaCC script for a (simple) XPath parser and I'm having problems with the part to parse individual steps. My idea of the grammar is this: Step ::= ( AxisName "::" )? NodeTest ( "[" Predicate "]" )* I have transformed it into the following script snippet: Step Step() : { Token t; Step step; Axis axis; NodeTest nodeTest; Expression predicate; } { { axis = Axis.child; } ( t = <IDENTIFIER> { axis = Axis.valueOf(t.image); } <COLON> <COLON> )? t = <IDENTIFIER> { nodeTest =

How to implement a negative LOOKAHEAD check for a token in JavaCC?

旧时模样 提交于 2020-01-15 19:16:42
问题 I currently implementing a JavaScript/ECMAScript 5.1 parser with JavaCC. I recently learned about LOOKAHEAD s which are handy here as the grammar is not fully LL(1). One of the things I see in the ECMAScript grammar is "negative lookahead check", like in the following ExpressionStatement production: ExpressionStatement : [lookahead ∉ {{, function}] Expression ; So I'll probably need something like LOOKAHEAD(!("{" | "function")) but it does not work in this syntax. My question is, how could I

Explanation and solution for JavaCC's warning “Regular expression choice : FOO can never be matched as : BAR”?

 ̄綄美尐妖づ 提交于 2020-01-03 15:50:09
问题 I am teaching myself to use JavaCC in a hobby project, and have a simple grammar to write a parser for. Part of the parser includes the following: TOKEN : { < DIGIT : (["0"-"9"]) > } TOKEN : { < INTEGER : (<DIGIT>)+ > } TOKEN : { < INTEGER_PAIR : (<INTEGER>){2} > } TOKEN : { < FLOAT : (<NEGATE>)? <INTEGER> | (<NEGATE>)? <INTEGER> "." <INTEGER> | (<NEGATE>)? <INTEGER> "." | (<NEGATE>)? "." <INTEGER> > } TOKEN : { < FLOAT_PAIR : (<FLOAT>){2} > } TOKEN : { < NUMBER_PAIR : <FLOAT_PAIR> | <INTEGER

Source for parsing C grammar using JavaCC

大憨熊 提交于 2019-12-25 10:01:05
问题 As an project assignment, I need to parse a plain-C grammar from Java to generate AST output. As a startup, I am using the file c.jj that I have found among grammar files at http://java.net/projects/javacc/sources/svn/ but I found that it only has syntactic and lexical actions and no real semantics for parsing C source. Is there some other source that incorporate typedef, variables, construct functions, include files? 回答1: You could go looking for a complete grammar. Will you learn much this

Source for parsing C grammar using JavaCC

╄→гoц情女王★ 提交于 2019-12-25 09:59:28
问题 As an project assignment, I need to parse a plain-C grammar from Java to generate AST output. As a startup, I am using the file c.jj that I have found among grammar files at http://java.net/projects/javacc/sources/svn/ but I found that it only has syntactic and lexical actions and no real semantics for parsing C source. Is there some other source that incorporate typedef, variables, construct functions, include files? 回答1: You could go looking for a complete grammar. Will you learn much this