Exempel på användning av lexikanalysatorn JFlex och parsergeneratorn Cup för att skapa en parser från en språkspecifikation.
Författare: Per Austrin
Rekursiv medåkning görs enligt följande grammatik i BNF:
<BinTree> ::= LEAF LPAR NUM RPAR | BRANCH LPAR <BinTree> COMMA <BinTree> RPAR
där:
LEAF
ärleaf
BRANCH
ärbranch
NUM
är heltalLPAR
är(
ochRPAR
är)
COMMA
är,
-
Filerna
Main.java
ochParseTree.java
är väsentligen desamma som i BinTreeParser (mindre ändringar iMain.java
pga att gränssnittet för den genererade parsern är lite annorlunda än den egenkonstruerade). -
Filen
Lexer.java
från BinTreeParser är nu ersatt av filen Lexer.lex, som innehåller lexikal specifikation till JFlex. -
Filen
Parser.java
från BinTreeParser är nu ersatt av filenParser.cup
, som innehåller specifikation av grammatiken till Cup. -
Filerna
Token.java
ochSyntaxError.java
med klasser för att representera tokens och syntaxfel från BinTreeParser behövs inte längre, eftersom dessa saker tas hand om av JFlex och Cup.
Ladda hem JFlex 1.5.1 och packa upp arkivet på lämpligt ställe.
Provkörning från terminal på fil test.in
:
path/to/jflex-1.5.1/bin/jflex Lexer.lex
java -jar path/to/jflex-1.5.1/lib/java-cup-11a.jar -parser Parser Parser.cup
javac -cp path/to/jflex-1.5.1/lib/java-cup-11a.jar:. *.java
java -cp path/to/jflex-1.5.1/lib/java-cup-11a.jar:. Main < test.in