2008-12-08 66 views
0

我正在編譯器實現上工作並希望檢查是否已達到文件末尾?語法實現中文件描述符的結尾

我知道這可以在lex文件中使用yywrap()函數來完成,但需求是我們希望如果EOF明確定義爲十六進制值0x1a,那麼我們如何引用它。

實施例:

主() { 的printf( 「檢查EOF標記\ n」); '0x1a'< - 實際的EOF標記。

我想上述不是一個語法錯誤,但要報告爲錯誤 不平衡的括號,或者是錯誤地定義。

以上可以完成嗎?我的要求是在解析器中使用EOF標記,但不幸的是,直到日期我還沒有做到這一點: - ((其餘的工作將很容易完成,我只需要給出一個規則如:

print : print_stmt '(' stmt_valid ')' colon '\n' 
{ 
    OK do the rest 
} 
     | print_stmt '(' stmt_valid ')' colon end_indicator 
{ 
    print error message and close application. 
} 
+0

你的配置是什麼?我知道你使用lex掃描和yacc解析。爲什麼不讓lex讀取EOF字符並返回yacc一個專門的EOF標記? – 2008-12-08 06:37:23

回答

3

讓你的詞法分析器返回一個標記的EOF

我建議你返回令牌兩種情況:

  1. getc()返回-1(通常EOF標誌)。在這種情況下,使標記文本爲空

  2. getc()返回'\x1a'。在這種情況下,將這個字符放在標記文本中。

這可以讓你的語法區分這兩種情況。