antlr html pcdata - PullRequest
       11

antlr html pcdata

1 голос
/ 18 декабря 2011

Я пытаюсь написать очень простой HTML-парсер с ANTLR и сталкиваюсь с проблемой, это правило, которое должно соответствовать всем, пока указанный символ не работает.

Моя лексерская грамматика:

lexer grammar HtmlParserLexer;

HTML: OHTML PCDATA CHTML;

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

OHTML: '<html>';

CHTML: '</html>';

Я пытаюсь соответствовать:

<html>foo bar</html>

Ошибка от интерпретатора плагина Eclipse ANTLR:

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

Это означает, что моя грамматика игнорирует правило PCDATA, и я не знаю почему. Заранее благодарим за помощь.

1 Ответ

3 голосов
/ 18 декабря 2011

Правило PCDATA :(~'<') ; соответствует одному символу, отличному от '<'. Вам нужно будет повторить это один или несколько раз: PCDATA :(~'<')+ ; (обратите внимание на +).

Вы также можете разрешить <html></html> (ничего между <html> и </html>). В этом случае вы не должны менять PCDATA :(~'<')+ ; на PCDATA :(~'<')* ;, а делать это вместо этого:

HTML: OHTML PCDATA? CHTML;

PCDATA : (~'<')+ ;

потому что вы не должны создавать правила лексера, которые потенциально могут соответствовать пустой строке.

...