W flexie chcę zwrócić wiele tokenów za jeden mecz wyrażenia regularnego. Czy jest jakiś sposób na zrobienie tego?FLEX: Czy istnieje sposób na natychmiastowe zwrócenie wielu znaczników?
7
A
Odpowiedz
0
Masz na myśli wszystkie mecze? Czy używasz funkcji regularnych lub łańcuchowych? Użyj flagi globalnej.
Jeśli chodzi o flex, nie sądzę, że można to zrobić. Testujesz na mecz z jednym wzorcem na raz, więc prawdopodobnie jest poza zakresem. Dlaczego tego chcesz? Jako optymalizacja? Problemy z określaniem zakresu?
2
Sposób, w jaki to robię, polega na utworzeniu kolejki tokenów, które należy zwrócić, a na początku yylex()
należy sprawdzić tokeny i je zwrócić.
-1
Zwykle jest to obsługiwane przez analizator składający się na skanerze, który zapewnia znacznie czystszy kod. Możesz naśladować to w pewnym stopniu za pomocą stanów:
%option noyywrap
%top {
#define TOKEN_LEFT_PAREN 4711
#define TOKEN_RIGHT_PAREN 4712
#define TOKEN_NUMBER 4713
}
%x PAREN_STATE
%%
"(" BEGIN(PAREN_STATE); return TOKEN_LEFT_PAREN;
<PAREN_STATE>{
[0-9]+ return TOKEN_NUMBER;
")" BEGIN(INITIAL); return TOKEN_RIGHT_PAREN;
.|\n /* maybe signal syntax error here */
}
%%
int main (int argc, char *argv [])
{
int i;
while ((i = yylex()))
printf ("%d\n", i);
return 0;
}
, ale stanie się to bardzo kłopotliwe, gdy tylko gramatyka stanie się bardziej skomplikowana.
Powiązane problemy
- 1. Czy istnieje sposób na zwrócenie wielu wyników z podzapytaniem?
- 2. Czy istnieje sposób na zwrócenie HTML przez YQL?
- 3. Czy istnieje sposób na skomentowanie znaczników na stronie .ASPX?
- 4. Czy istnieje sposób na przetwarzanie wielu warstw?
- 5. Java - Najlepszy sposób na zwrócenie wielu typów obiektów z metody
- 6. Najprostszy sposób na zwrócenie tablicy zagnieżdżonej w wielu tablicach
- 7. Czy istnieje właściwy sposób na zwrócenie nowej instancji obiektu przez odwołanie w C++?
- 8. Czy istnieje sposób, aby sformatować ciąg w Flex
- 9. Czy istnieje sposób na uzyskanie danych wyjściowych jQuery * rzeczywisty znacznik *?
- 10. Czy istnieje sposób na odinstalowanie wielu pakietów za pomocą pip?
- 11. Czy istnieje sposób na rozwiązanie wielu obietnic za pomocą kątomierza?
- 12. Implementacja wielu interfejsów z Javą - czy istnieje sposób na delegowanie?
- 13. Czy istnieje sposób na podświetlenie wielu wyszukiwań w (g) Vim?
- 14. Czy istnieje sposób na dodanie wielu odbiorników w Pythonie SMTPlib?
- 15. Czy istnieje sposób na otwarcie wielu plików naraz z vim?
- 16. Czy istnieje odpowiednik GWT-RPC Flex?
- 17. Czy istnieje sposób na uproszczenie tego przypadku?
- 18. Czy istnieje #F DEBUG dla znaczników Asp.net?
- 19. Czy istnieje ASP MVC odpowiednik znaczników JSTL?
- 20. Zapobieganie wielu żądaniom $ http w Angular. Czy istnieje lepszy sposób?
- 21. W Heroku istnieje sposób na dodanie wielu haków po HTTP?
- 22. Natychmiastowe wyświetlenie autouzupełniania na Androidzie
- 23. actionscript (flex): jak sprawdzić, czy właściwość obiektu istnieje (lub zdefiniowana)?
- 24. Czy istnieje sposób na uniknięcie wyszukiwania liniowego?
- 25. Czy istnieje sposób na utrzymanie danych HSQLDB?
- 26. Czy istnieje sposób na ukształtowanie zasięgu HTML5?
- 27. Czy istnieje sposób na uniezależnienie UserControl?
- 28. Czy istnieje sposób na wstawienie funkcji rekursywnej?
- 29. Czy istnieje sposób przekonwertować RedisValue [] na ciąg []?
- 30. Czy istnieje sposób na przetestowanie połączenia SQLAlchemy?
Szczerze mówiąc, jestem dość nowy, aby się wygiąć i nie jestem pewien. Myślałem, że używam kombinacji wyrażeń regularnych i dopasowywania ciągów. Oto przykład "(" \t \t {return L_PAREN;} {INT} {yylval.Int = atoi (yytext); return INT;} Co chcę jest aby móc powrócić dwa żetony na raz . – Eburetto