All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.vesalainen.parser.annotation.Terminal Maven / Gradle / Ivy

Go to download

Java Lookahead Parser Generator. Generator produces LALR(k) parsers. Grammar rules are entered using annotations. Rule annotation can be attached to reducer method, which keeps rule and it's action together.

The newest version!
/*
 * Copyright (C) 2012 Timo Vesalainen
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see .
 */
package org.vesalainen.parser.annotation;

import org.vesalainen.regex.Regex;
import java.lang.annotation.ElementType;
import java.lang.annotation.Repeatable;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * Annotation Terminal is used to add terminals to a grammar. Terminals are regular
 * expression with a limitation, that the expression is not allowed to accept
 * empty string.
 *
 * 

doc is the terminal documentation. * *

left is the name of terminal. If omitted the method name is used. * *

expression is the regular expression. * *

priority set priority for terminal. * *

reducer method in text form. Used only with class annotation. Format is * <canonical name of method class> ' ' <method name> '(' arguments ')' * * Arguments is a comma separated list of argument type names. Argument type name * is canonical name of argument class. Arrays however are printed with leading '['. * Example T0.class.getDeclaredMethod("m1", String.class, int.class, long[].class) * produces "org.vesalainen.bcc.T0 m1(java.lang.String,int,[long)" * * @author tkv */ @Repeatable(Terminals.class) @Retention(RetentionPolicy.CLASS) @Target({ElementType.TYPE, ElementType.METHOD}) public @interface Terminal { String doc() default ""; String left() default ""; String expression(); Regex.Option[] options() default {}; /** * Set priority > 0 for reserved words when E.g identifier matches reserved words * @return */ int priority() default 0; /** * If type is int, the radix tells the integer radix. * *

If radix = 2 means 1-complement while radix=-2 means 2-complement * @return * @see org.vesalainen.lang.Primitives */ int radix() default -1; String reducer() default ""; }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy