Gần đây tôi đã mua The Definitive ANTLR Reference và tôi rất vui khi bắt đầu sử dụng ANTLR.
Trong chương đầu tiên, ngữ pháp này được thể hiện:Tham chiếu ANTLR dứt khoát - Chương trình đầu tiên không hoạt động
grammar T;
options {
language = Java;
}
r : 'call' ID ';' {System.out.println("invoke " + $ID.text);} ;
ID : 'a'..'z'+ ;
WS : (' '|'\n'|'\r')+ {$channel=HIDDEN;} ;
tôi sao chép văn phạm này xuống vào một tập tin, (mở rộng .g), tạo ra lexer và Parser, và tạo ra một lớp học chính như sau:
import org.antlr.runtime.*;
public final class Test {
public static void main(String[] args) throws Exception {
ANTLRInputStream input = new ANTLRInputStream(System.in);
TLexer lexer = new TLexer(input);
CommonTokenStream tokens = new CommonTokenStream(lexer);
TParser parser = new TParser(tokens);
parser.r();
}
}
không có lỗi thật, nhưng khi tôi chạy lớp chính và nhập:
call foo;
không có gì xảy ra. "gọi foo" nên được xuất ra màn hình, nhưng không có gì xảy ra. Tôi không muốn tiếp tục trong cuốn sách mà không hoàn thành bất kỳ bài tập nào. Tôi đang sử dụng ANTLR 3.4 trong Eclipse nếu nó quan trọng. Xin lỗi nếu điều này có vẻ như một câu hỏi dễ, nhưng tôi mới dùng ANTLR.
Cảm ơn,
Omer
Chào mừng bạn đến với ANTLR. Câu hỏi của bạn rất hợp lệ cho người mới bắt đầu. –
Bạn đã nhập ký tự cuối tập tin như nó ghi chú trong sách chưa? –
Không, tôi chưa bao giờ nghĩ về điều đó. Trên hệ thống Windows, đó có phải là \ n, \ r hoặc \ r \ n không? Hoặc chỉ cần nhấn nút enter? – leaf