私は過去に再帰降下と PEG のようなパーサーを実装しました。ここでは、次のようなことができます。
Path -> Segment+
Segment -> Slash Name
Segment -> /
Name -> /\w+/
Slash -> /
- where
Segment+
は「1 つ以上に一致する」ことを意味しSegment
ます - そして、1つ以上の単語文字を一致させるための普通の古い正規表現があります
\w+
LR文法/パーサーを使用して、これと同じ種類のことを通常どのように達成しますか? 私が見た LR パーサーの例はすべて非常に基本的なもの1 + 2 * 3
で、パターンは非常に単純で、「1 つ以上」の機能 (またはゼロ以上の、またはオプションの)(())()
を含まないようです。. 一般に、LR パーサーでどのように行うのですか?*
?
それとも、LR 構文解析は最初に字句解析フェーズを必要としますか (つまり、LR パーサーは端末と非端末の「トークン」を必要とします)。そのような 2 つのフェーズなしで LR 解析を行う方法があることを願っています。LRパーサーの定義は、私が読んでいる本/サイトの「入力文字」について語っていますが、さりげなく/微妙に次のような行が表示されます。
文法の終端記号は、字句スキャナによって入力ストリームで検出された複数文字記号または「トークン」です。
そして、スキャナーはどこから来たのですか。