2011-12-17 4 views
1

私は非常に単純なHTMLパーサーで、ANTLRとImの問題に直面しています。antlr html pcdata

マイレクサー・文法:一致しようとして

lexer grammar HtmlParserLexer; 

HTML: OHTML PCDATA CHTML; 

PCDATA :(~'<') ; //match all until < 

OHTML: '<html>'; 

CHTML: '</html>'; 

イム:EclipseのANTLRプラグインインタープリタから

<html>foo bar</html> 

エラー:

MismatchedTokenException: line 1:7 mismatched input UNKNOW expecting '<' 

意味、私の文法はPCDATAのルールを無視していることなぜ私は知りません。 ご協力いただきありがとうございます。

答えて

3

ルールPCDATA :(~'<') ;は、'<'以外の1文字に一致します。 1回以上それを繰り返す必要があります:PCDATA :(~'<')+ ;+に気付きます)。

また、<html></html>(間には何もありません。<html></html>)を許可することもできます。その場合、あなたはPCDATA :(~'<')* ;PCDATA :(~'<')+ ;を変更するべきではありませんが、代わりにこれを行う:

HTML: OHTML PCDATA? CHTML; 

PCDATA : (~'<')+ ; 

をあなたが潜在的に空の文字列に一致する可能性が字句解析ルールを作成するべきではありませんので。

+0

ありがとう、それは問題でした。私は〜で例を繰り返し見ましたが、私はそれを試していませんでした。私はそれが繰り返しを使用せずに任意の文字まですべてに一致すると思った... – matejuh

+0

あなたは大歓迎です@ matejuh。 –