2016-07-31 15 views
2

Wenn ich zum Beispiel wollte die Programmiersprache Lisp zu definieren, wo ein Name auch nicht-alphanumerische Zeichen umfassen kann, sollte ich mit einer Notation alle verwendbaren Zeichen Liste wie:Sind Regexs in BNF- und EBNF-Notationen erlaubt?

validchar ::= "a" | "b" | "c" ... "-" | "*" | "$" ... ; 
name = validchar, (validchar | digit)+; 

Oder bin ich zu verwenden, erlaubt regexs, wie:

validchar ::= "[^(^)^\s^\d]"; 
name ::= validchar, (validchar | digit)*; 

Oder auch:

name ::= "[^(^)^\s^\d]", "[^(^)^\s]"*; 

Dies würde es viel verkürzen, und es würde sogar Zeichen wie ₩, ¥, € usw., die ich nicht aufzählen kann, aber tatsächlich nutzbar ist.

Antwort

3

Ob dies zulässig ist, hängt vom verwendeten Werkzeug ab, das die (E) BNF-Notation implementiert.

Einige Tools sind eher streng und halten sich an die ursprüngliche Definition von (E) BNF, was bestenfalls Kleene * oder + auf Sprach-Tokens erlaubt. Ein weiterer Punkt ist, dass es keine Notwendigkeit für klassische (E) BNF gibt, an Zeichen als Terminals zu arbeiten.

Natürlich ist es praktisch, in der Lage zu sein, einige Sprach-Token direkt in Zeichen zu definieren, und man kann sich (wie Sie) eine EBNF vorstellen, in der man nicht nur Zeichen als Terminals schreiben kann, sondern auch Regexes über Zeichen.

Ob das Werkzeug, das Sie verwenden möchten, dies erlaubt, hängt vollständig vom Werkzeug ab. Viele Werkzeuge, die (E) BNF verarbeiten, wie YACC, sind tatsächlich so konzipiert, dass sie in Verbindung mit einem anderen Werkzeug, einem "Lexer-Generator" (für YACC heißt das FLEX) arbeiten, der Zeichenfolgen für Tokens definiert. Mit solchen Werkzeugpaaren erlaubt das (E) BNF-Werkzeug normalerweise keine Erwähnung von Zeichen oder Regexen über ihnen, aber das Lexer-Generator-Werkzeug erlaubt ausdrücklich Zeichen- und Regex-Spezifikationen für Tokens.

Es gibt Hunderte von (E) BNF und Lexer Generator Tools, jeder mit etwas (ungeheuer verschiedenen) Regeln. Überprüfen Sie die Werkzeugdokumentation.

Oder schreiben Sie es so, wie Sie es schreiben möchten, und bauen Sie Ihr eigenes (101.) Werkzeug.