我試圖用PLY編寫一個語法分析文件中的路徑。我正在進入輪班減少衝突,我不知道如何改變語法來修復它。 這是我試圖解析的文件的一個例子。路徑/文件名可以是任何可接受的linux路徑。如何編寫PLY語法來解析路徑?
file : ../../dir/filename.txt
file : filename.txt
file : filename
所以這裏是我寫的語法。
header : ID COLON path
path : pathexpr filename
pathexpr : PERIOD PERIOD DIVIDE pathexpr
| PERIOD DIVIDE pathexpr
| ID DIVIDE pathexpr
|
filename : ID PERIOD ID
| ID
這是我的代幣。我正在使用包含ctokens庫的PLY。只是爲了節省寫作自己的努力。
t_ID = r'[A-Za-z_][A-Za-z0-9_]*'
t_PERIOD = r'\.'
t_DIVIDE = r'/'
t_COLON = r':'
所以我相信這是一個轉變降低在「文件名」的規則衝突,因爲分析器不知道是否減少令牌「ID」,或爲「ID期間ID」轉變。我認爲在沒有路徑(「文件名」)的情況下會出現另一個問題,它將在pathexpr中使用該標記而不是將其還原爲空。
如何修復我的語法來處理這些情況?也許我需要更換我的令牌?
感謝您的幫助!從右遞歸更改爲左可解決問題。 – jjm012