我试图用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