Lexer napisany w Javascript?

Mam projekt, w którym użytkownik musi zdefiniować zestaw instrukcji dla interfejsu użytkownika, który jest całkowicie napisany w javascript. Muszę mieć możliwość przetworzenia ciągu instrukcji, a następnie przetłumaczyć je na instrukcje. Czy są jakieś biblioteki do parsowania, które są w 100% javascript? Lub generator, który będzie generowany w javascript? Dzięki!

Author: Phobis, 2009-12-01

10 answers

Coś jak http://jscc.phorward-software.com / , może?

JS / CC jest pierwszym dostępnym parserem dla JavaScript i ECMAScript -derivates. Został on opracowany, zarówno z zamiarem zbudowania produktywnego systemu rozwoju kompilatora, jak i z zamiarem stworzenia łatwego w użyciu środowiska akademickiego dla osób zainteresowanych tym, jak generowanie tabeli parse odbywa się ogólnie w analiza oddolna.

The niezależne od platformy oprogramowanie łączy zarówno: analizator leksykalny oparty na wyrażeniach regularnych generator dopasowujący poszczególne tokeny ze strumienia znaków wejściowych, jak i Generator parserów LALR(1) , obliczający tabele parsowania dla danej gramatyki bezkontekstowej i budujący samodzielny, działający parser. Gramatyka bezkontekstowa przekazywana do JS / CC jest zdefiniowana w Meta języku Backus-Naur-Form i pozwala na wstawianie indywidualny kod semantyczny do oceny przy redukcji reguły.

sam JS / CC został w całości napisany w ECMAScript, więc może być wykonywany na wiele różnych sposobów: jako niezależny od platformy, oparty na przeglądarce JavaScript osadzony na stronie internetowej, jako aplikacja Windows Script Host, jako skompilowany JScript.NET wykonywalny, jako interpretowana aplikacja Mozilla / Rhino lub Mozilla / Spidermonkey lub skrypt powłoki V8 w systemach Windows, *nix, Linux i Mac OSX. Jednak dla produktywnego wykonania, to zalecane jest używanie wersji wiersza poleceń. Wersje te są zdolne do złożenia kompletnego kompilatora ze specyfikacji parsera JS / CC, który jest następnie zapisywany do .plik źródłowy JS JavaScript.

 22
Author: Stobor,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 13:19:35

Jeśli chcesz zbudować parsery JavaScript i generatory kodu, sprawdź implementację MetaII w Javascript.

Samouczek kompilatora MetaII poprowadzi Cię przez budowanie całkowicie autonomicznego systemu kompilatora, który może tłumaczyć siebie i inne języki:

MetaII Compiler Tutorial

To wszystko opiera się na niesamowitym 10-stronicowym artykule technicznym autorstwa Val Schorre: META II: a Syntax-Oriented Compiler Writing Language z 1964 roku. Na Kompilator MetaII pełny opis własny to około 30 linijek! NauczyĹ ' em siÄ ™ z tego kompilatorăłw w 1970 roku. Jest taki oszałamiający moment, kiedy w końcu przekonasz się, jak kompilator może się zregenerować....

Tutorial wyjaśnia, jak to działa i implementuje kompilację MetaII do JavaScript. Możesz łatwo zmodyfikować ten kompilator, aby parsował inne języki i produkował inny Javascript.

Znam autora strony z czasów studiów, ale nie mam nic związane ze stroną internetową.

 13
Author: Ira Baxter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-01 06:29:20

Jison jest prawdopodobnie najlepszym i najbardziej aktywnym generatorem lexerów i parserów dla Javascript. Naśladuje Bizona i Yacca.

Jison: http://zaach.github.io/jison/

Jeśli chcesz lekkiego lekera (~100 sloc), możesz rzucić okiem na Leksed.js: https://github.com/tantaman/lexed.js

 6
Author: Matt Crinklaw-Vogt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-27 23:27:37

Do prostych zadań parsowania bardzo lubię używać wariantu Pratta Top Down Operator Precedence parser. Podczas gdy Pratt napisał oryginalną pracę używając starego dialektu Lispu, te same pojęcia mogą być łatwo użyte w większości języków. W rzeczywistości Douglas Crockford napisał doskonały artykuł na temat Top Down Operator Precedence parsing w JavaScript , który może być właśnie tym, czego potrzebujesz.

 4
Author: bcat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-01 03:27:47

Oto przykład parsera dla" pseudo " naturalnego języka instrukcji, który został zaimplementowany w Pure JavaScript z parsowanie DSL :

Https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js

Ten przykład zawiera nawet wsparcie dla Wielu języków naturalnych (angielski i niemiecki) przy użyciu dziedziczenia gramatycznego.

} " biblioteki tam do parsowania, które są w 100% javascript " {[18] } Jak wykonuje Brak generowania kodu. Używanie Chevrotain jest podobne do" ręcznego tworzenia " rekurencyjnego parsera, tylko Bez większości } takich jak:

  • tworzenie funkcji Lookahead (decydowanie, którą alternatywę wziąć)
  • Automatyczne Odzyskiwanie Błędów.
  • Left recursion detection
  • Wykrywanie Niejasności.
  • pozycja informacje.
  • ...

Jak Chevrotain robi to automatycznie.

 2
Author: bd82,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-13 22:56:59

W zależności od konstrukcji 'zestawu instrukcji', możesz być w stanie użyć wbudowanej funkcji eval Javascript, która parsuje źródło Javascript; możesz być w stanie napisać prosty Tłumacz, aby przekonwertować instrukcje na kod Javascript.

Przy okazji, bądź bardzo ostrożny z dziurami XSS.

 1
Author: SLaks,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-01 02:22:04

Jeśli naprawdę szukasz tylko lexera, spróbuj prettify .

 1
Author: Naveen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-17 06:26:22

Jeśli chcesz lexera i nic poza lexerem to spójrz na to: https://github.com/aaditmshah/lexer

To czysty lexer JavaScript z wieloma potężnymi funkcjami napisanymi w zaledwie kilku linijkach kodu.

 1
Author: Aadit M Shah,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-23 16:05:03
 1
Author: mounds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-11 00:43:35

Szukałem czegoś podobnego, co nie miałoby żadnych luk w zabezpieczeniach i natknąłem się na dwa źródła. Nie analizują skryptu, ale uruchamiają go w "bezpiecznym" środowisku - czegoś, czego nie można zagwarantować przy użyciu funkcji eval. Więc nie wiem, czy to dokładnie to, czego szukasz, ale spójrz:

  1. jsandbox - Javascript sandbox
  2. Google Caja - wirtualny iframe.
 0
Author: Mottie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-12-01 02:56:43