2017-04-17 5 views
0

J'ai commencé à apprendre à écrire un lexer dans ANTLR 4.5. De this page, qui sert de documentation, je vois que les commandes Lexer suivantes existent: plus, pushMode (x), popMode, type (x), canal (x), mode (x), skip.Fonction des différentes commandes Lexer dans ANTLR4. Est-ce que mon interprétation est correcte? Que font chacun d'eux?

Je n'ai pas été en mesure de comprendre clairement leur fonction. Ce qui suit est ma compréhension de ce que chacun d'entre eux fait:

sauter

Cette saute tous les personnages qui ont été lus dans le jeton en cours. Les jetons passés ne sont pas touchés.

Ainsi, si le lexer a lu un certain caractère a, et il lit le prochain b, correspondant à

SOME_RULE : 'b' -> skip; 

alors il jettera à la fois a et b et aller au jeton suivant.

plus

Je ne suis pas sûr de ce que cela fait. La documentation dit que le texte qui a été lu ne sera pas jeté, mais rien sur ce que les jetons seront finalement là. Supposons que je

RULE_1 : 'a' -> more; 
RULE_2 : 'b'; 

Si un a est lu, puis un b, sera le jeton correspond à RULE_2 résultant d'une valeur sémantique ab ou RULE_1 RULE_2, ou autre chose?

Type

(x)

Si je

RULE_1 : 'a' -> type(TOKEN_1); 
RULE_2 : 'b'; 

ne fera que a être pris comme la valeur sémantique de TOKEN_1, ou ce que tous les caractères correspondant à des règles qui n'étaient pas des jetons, depuis le être pris comme valeur sémantique? Si un b et un a arrivent, la valeur de TOKEN_1 sera-t-elle a ou ba?

Mode

(x)

Ceci commute le mode vers un nouveau mode. Mais ici, les caractères sont-ils lus jusqu'à ce que le point de commutation soit gardé ou jeté? Qu'en est-il des jetons? Chaque mode a-t-il une pile séparée?

pushMode (x)

Comment est-ce différent de mode? Est-il vrai que les caractères déjà lus sont poussés au mode auquel il va, ce qui n'arrive pas dans mode?

popMode

Qu'est-ce sauté sur?Si je

RULE_1 : 'a' -> popMode; 
RULE_2 : 'b' ; 

Si je reçois un b et un a, sera popMode seule cause a à retourner, ou ba, ou les jetons, le cas échéant? Pourquoi ai-je parfois une erreur due à une pile vide?

canal

(x)

Je ne pouvais pas trouver une explication à ce sujet. Qu'est-ce qu'une chaîne?

Quelqu'un pourrait-il clarifier la fonction de chacune de ces commandes, si possible avec des exemples?

S'il vous plaît laissez-moi savoir si c'est trop large.

Merci.

Répondre