Я пытаюсь написать парсер для подмножества G-кода с использованием Javacc, но столкнулся с проблемами с регулярными выражениями. Когда я использую символы "^"
и "$"
, чтобы соответствовать началу и концу строки, я получаю ошибки, если я их удаляю, но регулярное выражение неверно.Регулярное выражение Javacc
Например, я хочу лексер принять строку "G01"
или "G02"
но без ^
и $
это позволит "G01G02"
.
options {
STATIC = true;
}
PARSER_BEGIN(Parser)
class Parser {
public static void main(String[] args) {
Parser lexan = new Parser(System.in);
try {
lexan.start();
} catch (Exception e) {
System.out.println(e.getMessage());
}
System.out.println("Finished Lexical Analysis");
} // END main
} // END class
PARSER_END(Parser)
// TOKENS
// Ignore all whitespace
SKIP:{" " | "\t" | "\n" | "\r"}
// Declare tokens
TOKEN:{<G0X: ^"G0"["1", "2"]$>}
void start():
{}
{
(<G0X> {System.out.println("\G0X\n");})+
}
Какое регулярное выражение мне нужно, чтобы заставить это работать?
Заранее спасибо
Пробовал это, то я получаю следующее сообщение об ошибке: org.javacc.parser.ParseException: Обнаружен " "(" "(" "\" "" в строке 36, столбец 31. –
Gavin0487
Таким образом, каждый маркер" G01 "или" G02 "должен быть на отдельной строке без пробелов до или после? Или вы хотите разрешить пробел перед «G» и после «1» или «2»? –