2012-05-03 71 views
0

我正在嘗試爲一個語法編寫一個簡單的解析器。解析器不需要創建分析樹,只需要識別句子是否與語法相匹配。到目前爲止,我有以下的謂詞,採用DCG符號:編寫序言解析器

program-->[]. 
    program-->stmt_list. 
    stmt_list-->stmt,stmt_list. 
    stmt-->[id,:=],expr;[read],[id];[write],expr. 
    expr-->term, term_tail. 
    term_tail-->add_op,term,term_tail. 
    term_tail-->[]. 
    term-->factor, factor_tail. 
    factor_tail-->mult_op, factor, factor_tail. 
    factor_tail-->[]. 
    factor-->[(expr)]. 
    factor-->[id]. 
    factor-->[number]. 
    add_op-->[+]. 
    add_op-->[-]. 
    mult_op-->[*]. 
    mult_op-->[/]. 

使用的查詢,如程序([閱讀,ID],[])。我應該得到一個真正的迴應,但我得到一個錯誤的迴應。缺少什麼導致了這一點?感謝您的幫助。

+0

您可以使用trace/0來查找錯誤 – whd

回答

0

stmt_list也可以是空的。加入stmt_list --> []解決了這個問題。

+0

我無法弄清楚如何讓程序讀入包含要解析的標記的文件。另外,我認爲沿着解析(輸入):=程序(輸入,[])的規則是一條規則。會像運行程序查詢一樣工作,但它會給出未定義的過程錯誤。任何想法爲什麼? – jldavis76

+0

您需要添加圍繞您的DCG的Prolog代碼。可以用'open/4'或'see/1'來打開文件進行閱讀 –