98 lines
1.9 KiB
Java
98 lines
1.9 KiB
Java
package pins25.common;
|
|
|
|
/**
|
|
* Leksikalni simbol.
|
|
*
|
|
* @param location Lokacija simbola v izvornem programu.
|
|
* @param symbol Vrsta simbola.
|
|
* @param lexeme Znakovna predstavitev simbola.
|
|
*/
|
|
public record Token(Report.Location location, Symbol symbol, String lexeme) implements Report.Locatable {
|
|
|
|
/**
|
|
* Vrste leksikalnih simbolov.
|
|
*/
|
|
public enum Symbol {
|
|
/** Konec datoteke. */
|
|
EOF,
|
|
/** Stevilo. */
|
|
INTCONST,
|
|
/** Znak. */
|
|
CHARCONST,
|
|
/** Niz znakov. */
|
|
STRINGCONST,
|
|
/** Ime. */
|
|
IDENTIFIER,
|
|
/** Kljucna beseda {@code fun}. */
|
|
FUN,
|
|
/** Kljucna beseda {@code var}. */
|
|
VAR,
|
|
/** Kljucna beseda {@code if}. */
|
|
IF,
|
|
/** Kljucna beseda {@code then}. */
|
|
THEN,
|
|
/** Kljucna beseda {@code else}. */
|
|
ELSE,
|
|
/** Kljucna beseda {@code while}. */
|
|
WHILE,
|
|
/** Kljucna beseda {@code do}. */
|
|
DO,
|
|
/** Kljucna beseda {@code let}. */
|
|
LET,
|
|
/** Kljucna beseda {@code in}. */
|
|
IN,
|
|
/** Kljucna beseda {@code end}. */
|
|
END,
|
|
/** Simbol {@code =}. */
|
|
ASSIGN,
|
|
/** Simbol {@code ,}. */
|
|
COMMA,
|
|
/** Simbol {@code &&}. */
|
|
AND,
|
|
/** Simbol {@code ||}. */
|
|
OR,
|
|
/** Simbol {@code !}. */
|
|
NOT,
|
|
/** Simbol {@code ==}. */
|
|
EQU,
|
|
/** Simbol {@code !=}. */
|
|
NEQ,
|
|
/** Simbol {@code >}. */
|
|
GTH,
|
|
/** Simbol {@code <}. */
|
|
LTH,
|
|
/** Simbol {@code >=}. */
|
|
GEQ,
|
|
/** Simbol {@code <=}. */
|
|
LEQ,
|
|
/** Simbol {@code +}. */
|
|
ADD,
|
|
/** Simbol {@code -}. */
|
|
SUB,
|
|
/** Simbol {@code *}. */
|
|
MUL,
|
|
/** Simbol {@code /}. */
|
|
DIV,
|
|
/** Simbol {@code %}. */
|
|
MOD,
|
|
/** Simbol {@code ^}. */
|
|
PTR,
|
|
/** Simbol {@code (}. */
|
|
LPAREN,
|
|
/** Simbol {@code )}. */
|
|
RPAREN,
|
|
}
|
|
|
|
@Override
|
|
public String toString() {
|
|
String lexeme = switch (symbol) {
|
|
case INTCONST -> "(" + this.lexeme + ")";
|
|
case CHARCONST -> "(" + this.lexeme + ")";
|
|
case STRINGCONST -> "(" + this.lexeme + ")";
|
|
case IDENTIFIER -> "(" + this.lexeme + ")";
|
|
default -> "";
|
|
};
|
|
return location + " " + symbol + lexeme;
|
|
}
|
|
|
|
} |