JFlex is a lexical analyzer generator (also known as scanner generator) for Java.
JFlex takes as input a specification with a set of regular expressions and corresponding actions. It generates Java source of a lexer that reads input, matches the input against the regular expressions in the spec file, and runs the corresponding action if a regular expression matched. Lexers usually are the first front-end step in compilers, matching keywords, comments, operators, etc, and generating an input token stream for parsers.
JFlex lexers are based on deterministic finite automata (DFAs). They are fast, without expensive backtracking.
For documentation and more information see the JFlex documentation and the wiki.
You need Maven 3.5.2 or later, and JDK 8 or later.
-
Place grammar files in
src/main/flex/directory. -
Extend the project POM build section with the
maven-jflex-plugin<build> <plugins> <plugin> <groupId>de.jflex</groupId> <artifactId>jflex-maven-plugin</artifactId> <version>1.9.0</version> <executions> <execution> <goals> <goal>generate</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
-
Voilà: Java code is produced in
target/generated-sources/during thegenerate-sourcesphase (which happens before thecompilephase) and included in the compilation scope.
You need ant, the binary JFlex jar and JDK 8 or later.
-
Define ant task
<taskdef classname="jflex.anttask.JFlexTask" name="jflex" classpath="path-to-jflex.jar"/>
-
Use it
<jflex file="src/grammar/parser.flex" destdir="build/generated/"/> <javac srcdir="build/generated/" destdir="build/classes/"/>
You need the binary jflex jar and JDK 8 or later.
You can also use JFlex directly from the command line:
jflex/bin/jflex src/grammar/parser.flex
Or:
java -jar jflex-full-1.9.0.jar -d output src/grammar/parser.flex
See Build tool plugins.
Have a look at the sample project: simple and other examples.
JFlex is free software, contributions are welcome. See the Contributing page for instructions.
The top level directory of the JFLex git repository contains:
- benchmark JMH benchmarks of generated scanners
- cup-maven-plugin a simple Maven plugin to generate a parser with CUP
- docs the Markdown sources for the user manual
- jflex JFlex, the scanner/lexer generator for Java
- jflex-maven-plugin the JFlex Maven plugin, that helps to integrate JFlex in your project
- LICENSES the license texts, see REUSE.toml
- scripts scripts for building, testing and releasing
- src/site the descriptor of the Maven site
- tests the test modules, which are not deployed:
framework(test support),generators(Unicode generators),regression(end-to-end regression tests) andunicode(tests against the Unicode Character Database), see tests/README.md
You need JDK 8 or later.
./mvnw install
This generates jflex/target/jflex-full-1.9.1-SNAPSHOT.jar that you can use, e.g.
java -jar jflex-full-1.9.1-SNAPSHOT.jar --info