3
我有句法謂詞,我必須轉換成Antlr 4.語法不會寫入我的,所以我不知道如何以有意義的方式轉換它們。這些是我必須轉換的語法的主要變體。句法謂詞 - 從Antlr 3升級到Antlr 4
1.
simpleSelector
: elementName
((esPred)=>elementSubsequent)*
| ((esPred)=>elementSubsequent)+
;
esPred
: HASH | DOT | LBRACKET | COLON
;
elementSubsequent
: HASH
| cssClass
| attrib
| pseudo
;
2.
fragment EMS :; // 'em'
fragment EXS :; // 'ex'
fragment LENGTH :; // 'px'. 'cm', 'mm', 'in'. 'pt', 'pc'
fragment ANGLE :; // 'deg', 'rad', 'grad'
fragment TIME :; // 'ms', 's'
fragment FREQ :; // 'khz', 'hz'
fragment DIMENSION :; // nnn'Somethingnotyetinvented'
fragment PERCENTAGE :; // '%'
NUMBER
:(
'0'..'9' ('.' '0'..'9'+)?
| '.' '0'..'9'+
)
(
(E (M|X))=>
E
(
M { $type = EMS; } //action in lexer rule 'NUMBER' must be last element of single outermost alt
| X { $type = EXS; }
)
| (P(X|T|C))=>
P
(
X
| T
| C
)
{ $type = LENGTH; }
| (C M)=>
C M { $type = LENGTH; }
| (M (M|S))=>
M
(
M { $type = LENGTH; }
| S { $type = TIME; }
)
| (I N)=>
I N { $type = LENGTH; }
| (D E G)=>
D E G { $type = ANGLE; }
| (R A D)=>
R A D { $type = ANGLE; }
| (S)=>S { $type = TIME; }
| (K? H Z)=>
K? H Z { $type = FREQ; }
| IDENT { $type = DIMENSION; }
| '%' { $type = PERCENTAGE; }
| // Just a number
)
;
3.
URI : U R L
'('
((WS)=>WS)? (URL|STRING) WS?
')'
;
一些指導不勝感激。
編輯:
難道如下。
simpleSelector
: elementName
(elementSubsequent)*
| (elementSubsequent)+
;
你能否給我提供一個例子,闡述上面的一個(最好是第二個) - 請參閱編輯。 –
當我將其更改爲新的錯誤時,我收到了一個新錯誤我在代碼中提到了其中一個錯誤。請看看這個,並給我一些指導方針來解決這個問題。就像明智一樣,這個錯誤出現在每個$類型的代碼行中。 –
@Diode該錯誤與句法謂詞無關。你應該爲它發佈一個新問題。 –