我試圖撰寫一個RACC決議器,其中一部分可以用正則運算式a[b][c][d]來表示。
我想出了下面的制作方法(每個標記代表標記名稱的小寫字符):
expr
: A
| A b
;
b
: B
| B c
| c
;
c
: C
| C D
| D
這是最簡單的形式,還是我錯過了什么?
uj5u.com熱心網友回復:
如果B。C和D可以通過它們的第一個標記相互區分(如果它們是標記而不是更復雜的語法的簡化,那肯定是這樣的),那么一個替代方法是定義代表可選擇性的非標記。
optional_B: /* empty */| B
optional_C: /*空 */ | C
optional_D: /*為空 */ | D
運算式。A optional_B optional_C optional_D
當可選子運算式不能被立即區分時,這就變得更加復雜了,因為決議器需要僅根據下面的標記來正確識別可選非終端與空字串相匹配。但聽起來你的語法不是這樣的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/314869.html
標籤:
上一篇:在找到一個模式后迭代以前的行
