[英]Grammar for Arithmetic Expressions
我被分配了一個為算術表達式創建解析器的任務(帶括號和一元運算符)。 所以我只想知道這個語法是否正確,是否為LL(1)形式,並為此構造解析表時遇到實際問題
S -> TS'
S' -> +TS' | -TS' | epsilon
T -> UT'
T' -> *UT' | /UT' | epsilon
U -> VX
X -> ^U | epsilon
V -> (W) | -W | W | epsilon
W -> S | number
優先級(從高到低)
(), unary –
^
*, /
+, -
二進制運算符的關聯性
^ = right
+, -, *, / = left
它是LL(1)形式嗎?
要判斷語法是否為LL(1),您需要擴展生產規則。 如果您可以生成任何產生式序列,從而導致左側在第一手出現在右側,則語法不是LL(1)。
例如,考慮以下規則:
X --> X | x | epsilon
顯然,這不是LL(1)語法的一部分,因為如果應用最左邊的產生式,則它是左遞歸的。 但是呢?
X --> Y | x
Y --> X + X
這也不是LL(1)語法,但是更微妙:首先您必須應用X-> Y,然后應用Y-> X + X才能看到現在有了X-> X + X ,這是左遞歸的。
對於一元加號運算符,您似乎缺少任何內容。 試試這個...
V->(W)| -W | + W | ε
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.