BC- (1) Manuelle Seite

BC- (1) Manuelle Seite

Name

BC - Eine willkürliche Präzisionsrechnersprache

Syntax

BC [ -hlwsqv ] [Langstöcke] [ Datei… ]

Ausführung

Diese Mannseite dokumentiert GNU BC Version 1.06.

Beschreibung

BC ist eine Sprache, die willkürliche Präzisionsnummern mit interaktiver Ausführung von Aussagen unterstützt. Es gibt einige Ähnlichkeiten in der Syntax mit der C -Programmiersprache. Eine Standard -Mathematikbibliothek ist nach Befehlszeilenoption verfügbar. Auf Anfrage wird die Mathematikbibliothek vor der Verarbeitung von Dateien definiert. BC Startet durch Verarbeitung von Code aus allen in der Befehlszeile aufgeführten Dateien in der aufgeführten Bestellung. Nachdem alle Dateien verarbeitet wurden, BC liest aus dem Standardeingang. Der gesamte Code wird so ausgeführt, wie er gelesen wird. (Wenn eine Datei einen Befehl enthält, um den Prozessor zu stoppen, BC Wird niemals aus dem Standardeingang lesen.)

Diese Version von BC enthält mehrere Erweiterungen über traditionelles BC Implementierungen und der POSIX -Entwurf Standard. Befehlszeilenoptionen können dazu führen, dass diese Erweiterungen eine Warnung drucken oder abgelehnt werden. Dieses Dokument beschreibt die von diesem Prozessor akzeptierte Sprache. Erweiterungen werden als solche identifiziert.

Optionen

-H, -Help
Drucken Sie die Nutzung aus und beenden Sie.
-i, -interaktiv
Interaktive Modus erzwingen.
-l, -mathlib
Definieren Sie die Standard -Mathematikbibliothek.
-W, -Warn
Warnungen für Erweiterungen an POSIX geben BC.
-s, -standard
Verarbeiten Sie genau den POSIX BC Sprache.
-Q, -quiet
Drucken Sie den normalen GNU BC nicht willkommen. Begrüßt nicht.
-v, -version
Drucken Sie die Versionsnummer und das Urheberrecht aus und beenden Sie.

Zahlen

Das grundlegendste Element in BC ist die Zahl. Zahlen sind willkürliche Präzisionszahlen. Diese Präzision befindet sich sowohl im Ganzzahl als auch im fraktionalen Teil. Alle Zahlen sind intern in Dezimalheit dargestellt und alle Berechnung erfolgen in Dezimal. (Diese Version schneidet die Ergebnisse aus Divide- und Multiply -Operationen ab.) Es gibt zwei Attribute von Zahlen, die Länge und die Skala. Die Länge ist die Gesamtzahl der signifikanten Dezimalstellen in einer Zahl und die Skala ist die Gesamtzahl der Dezimalstellen nach dem Dezimalpunkt. Zum Beispiel:

 .000001 hat eine Länge von 6 und eine Skala von 6. 1935.000 hat eine Länge von 7 und eine Skala von 3.

Variablen

Die Zahlen werden in zwei Arten von Variablen, einfachen Variablen und Arrays, gespeichert. Sowohl einfache Variablen als auch Array -Variablen werden benannt. Namen beginnen mit einem Brief, gefolgt von einer beliebigen Anzahl von Buchstaben, Ziffern und Unterstrichen. Alle Buchstaben müssen ein niedrigerer Fall sein. (Vollständige alpha-numerische Namen sind eine Erweiterung. In posix BC Alle Namen sind ein einzelner Unterrichtsbuchstaben.) Die Art der Variablen wird durch den Kontext klar, da alle Array -Variablennamen von Klammern folgen ([]).

Es gibt vier besondere Variablen, Skala, Ibase, Obase, Und zuletzt. Skala definiert, wie einige Operationen nach dem Dezimalpunkt Ziffern verwenden. Der Standardwert von Skala ist 0. Ibase Und Obase Definieren Sie die Konvertierungsbasis für Eingangs- und Ausgangszahlen. Die Standardeinstellung für Eingabe und Ausgabe ist Basis 10. zuletzt (Eine Erweiterung) ist eine Variable, die den Wert der letzten gedruckten Zahl hat. Diese werden gegebenenfalls ausführlicher erörtert. Alle diese Variablen können ihnen Werte zugewiesen und in Ausdrücken verwendet werden.

Kommentare

Kommentare in BC Beginnen Sie mit den Charakteren /* und enden mit den Charakteren */. Kommentare können überall beginnen und als einzelner Speicherplatz in der Eingabe erscheinen. (Dies führt dazu, dass Kommentare andere Eingabeelemente abgrenzen. Zum Beispiel kann ein Kommentar in der Mitte eines variablen Namens nicht gefunden werden.) Kommentare enthalten Newlines (Ende der Zeile) zwischen dem Start und dem Ende des Kommentars.

Um die Verwendung von Skripten für die Verwendung von Skripten zu unterstützen BC, Als Erweiterung wurde ein einzelner Zeilenkommentar hinzugefügt. Ein einzelner Zeilenkommentar beginnt bei a # Charakter und setzt sich bis zum nächsten Ende der Linie fort. Das Ende des Zeilenzeichens ist nicht Teil des Kommentars und wird normal verarbeitet.

Ausdrücke

Die Zahlen werden durch Ausdrücke und Aussagen manipuliert. Da die Sprache als interaktiv ausgelegt war, werden Aussagen und Ausdrücke so bald wie möglich ausgeführt. Es gibt kein Hauptprogramm. Stattdessen wird der Code ausgeführt, sobald er auftritt. (Die später detaillierten Funktionen werden bei der Begegnung definiert.)

Ein einfacher Ausdruck ist nur eine Konstante. BC Konvertiert Konstanten unter Verwendung der durch die Variablen angegebenen aktuellen Eingangsbasis in interne Dezimalzahlen Ibase. (Es gibt eine Ausnahme in Funktionen.) Die rechtlichen Werte von Ibase sind 2 bis 16. Zuweisen eines Wertes außerhalb dieses Bereichs zu Ibase wird zu einem Wert von 2 oder 16 führen. Eingabennummern können die Zeichen 0-9 und A-F enthalten. (Hinweis: Sie müssen Kapitelle sein. Untere Fallbuchstaben sind variable Namen.) Einstellige Zahlen haben immer den Wert der Ziffer unabhängig vom Wert von Ibase. (ich.e. A = 10.) Für mehrstellige Zahlen, BC ändert alle Eingangsstellen größer oder gleich IBase zum Wert von Ibase-1. Das macht die Nummer F F F Seien Sie immer die größte 3 -stellige Anzahl der Eingangsbasis.

Vollständige Ausdrücke ähneln vielen anderen Sprachen auf hoher Ebene. Da es nur eine Art von Zahl gibt, gibt es keine Regeln für das Mischen von Typen. Stattdessen gibt es Regeln auf dem Ausdruckskala. Jeder Ausdruck hat eine Skala. Dies wird aus der Skala der ursprünglichen Zahlen, der durchgeführten Operation und in vielen Fällen der Wert der Variablen abgeleitet Skala. Rechtliche Werte der Variablen Skala sind 0 zur maximalen Zahl, die durch eine C -Ganzzahl dargestellt werden kann.

In den folgenden Beschreibungen von Rechtsausdrücken bezieht sich „EXPR“ auf einen vollständigen Ausdruck, und „var“ bezieht sich auf eine einfache oder eine Array -Variable. Eine einfache Variable ist nur eine

Name

und eine Array -Variable wird als angegeben als

Name[Expr]

Sofern nicht ausdrücklich erwähnt wird, ist die Skala des Ergebnisses die maximale Skala der beteiligten Ausdrücke.

- Expr
Das Ergebnis ist die Negation des Ausdrucks.
++ var
Die Variable wird durch eins erhöht und der neue Wert ist das Ergebnis des Ausdrucks.
- var
Die Variable wird durch eins verringert und der neue Wert ist das Ergebnis des Ausdrucks.
var ++
Das Ergebnis des Ausdrucks ist der Wert von
die Variable und dann die Variable wird durch eins erhöht.
var -
Das Ergebnis des Ausdrucks ist der Wert der Variablen und dann wird die Variable durch eins verringert.
expr + expr
Das Ergebnis des Ausdrucks ist die Summe der beiden Ausdrücke.
expr - expr
Das Ergebnis des Ausdrucks ist der Unterschied der beiden Ausdrücke.
expr * expr
Das Ergebnis des Ausdrucks ist das Produkt der beiden Ausdrücke.
Expr / Expr
Das Ergebnis des Ausdrucks ist der Quotient der beiden Ausdrücke. Die Skala des Ergebnisses ist der Wert der Variablen Skala.
Expring % Expr
Das Ergebnis des Ausdrucks ist der „Rest“ und wird auf folgende Weise berechnet. Um ein%B zu berechnen, wird der erste A/B berechnet Skala Ziffern. Dieses Ergebnis wird verwendet, um a- (a/b)*b auf die Skala von maximal von zu berechnen Skala+Skala (b) und Skalierung (a). Wenn Skala ist auf Null eingestellt und beide Ausdrücke sind Ganzzahlen. Dieser Ausdruck ist die ganzzahlige Restfunktion.
Expr ^ expr
Das Ergebnis des Ausdrucks ist der Wert des ersten an den zweiten erhöhten Wert. Der zweite Ausdruck muss eine Ganzzahl sein. (Wenn der zweite Ausdruck keine Ganzzahl ist, wird eine Warnung erzeugt und der Ausdruck wird abgeschnitten, um einen Ganzzahlwert zu erhalten.) Die Skala des Ergebnisses ist Skala Wenn der Exponent negativ ist. Wenn der Exponent positiv ist, ist die Skala des Ergebnisses das Minimum der Skala der ersten Ausdruckszeiten der Wert des Exponenten und das Maximum von Skala und die Skala des ersten Ausdrucks. (e.G. Skala (a^b) = min (Skala (a)*b, max ( Skala, Skala (a))).) Es ist zu beachten, dass Expr^0 immer den Wert von 1 zurückgibt.
(Expr.)
Dies verändert den Standardvorrang, um die Bewertung des Ausdrucks zu erzwingen.
var = expr
Den Variablen wird der Wert des Ausdrucks zugewiesen.
var = expr
Dies entspricht der Ausnahme, dass der Teil „var“ nur einmal bewertet wird. Dies kann einen Unterschied machen, wenn „var“ ein Array ist.

Relationale Ausdrücke sind eine besondere Art von Ausdruck, die immer auf 0 oder 1 bewertet wird, 0, wenn die Beziehung falsch ist und 1, wenn die Beziehung wahr ist. Diese können in jedem rechtlichen Ausdruck erscheinen. (POSIX BC verlangt, dass relationale Ausdrücke nur dann verwendet werden, wenn, während und für Aussagen und dass nur ein relationaler Test durchgeführt werden kann.) Die relationalen Operatoren sind

Expr1 < expr2
Das Ergebnis ist 1, wenn expr1 streng geringer ist als expr2.
Expr1 <= expr2
Das Ergebnis ist 1, wenn expr1 kleiner oder gleich expr2 ist.
expr1> expr2
Das Ergebnis ist 1, wenn expr1 streng größer als expr2 ist.
expr1> = expr2
Das Ergebnis ist 1, wenn expr1 größer oder gleich expr2 ist.
expr1 == expr2
Das Ergebnis ist 1, wenn expr1 gleich expr2 ist.
Expr1 != expr2
Das Ergebnis ist 1, wenn expr1 nicht gleich expr2 ist.

Boolesche Operationen sind ebenfalls legal. (Possix BC hat keine booleschen Operationen). Das Ergebnis aller booleschen Operationen beträgt 0 und 1 (für falsche und wahre) wie in relationalen Ausdrücken. Die Booleschen Betreiber sind:

!Expr
Das Ergebnis ist 1, wenn die Expr 0 beträgt.
Expr && expr
Das Ergebnis ist 1, wenn beide Ausdrücke ungleich Null sind.
expr || Expr
Das Ergebnis ist 1, wenn ein der Ausdruck ungleich Null ist.

Der Ausdrucksvorrang lautet wie folgt: (am niedrigsten bis zum höchsten)

|| Operator, linker assoziativ && Operator, links assoziativ ! Bediener, nicht assoziativ
Relationale Operatoren,
linker assoziativer Zuweisungsbetreiber, rechter assoziativer + und - Operatoren,
linker assoziativ *, / und % Operatoren, linker assoziativer Operator, rechter assoziativer
UNARARY - Operator, nicht assoziativ ++ und - Betreiber, nicht assoziativ

Diese Vorrang wurde so ausgewählt, dass POSIX konforme BC Programme werden korrekt ausgeführt. Dies führt dazu. Betrachten Sie den Ausdruck:

A = 3 < 5

Die meisten C -Programmierer würden annehmen, dass dies das Ergebnis von „3 < 5” (the value 1) to the variable “a”. What this does in BC Weisen Sie der Variablen „A“ den Wert 3 zu und vergleichen Sie dann 3 bis 5. Es ist am besten, Klammern zu verwenden, wenn Sie relationale und logische Operatoren mit den Zuordnungsoperatoren verwenden.

Es gibt ein paar weitere spezielle Ausdrücke, die in in der Lage sind BC. Diese haben mit benutzerdefinierten Funktionen und Standardfunktionen zu tun. Sie alle erscheinen als "Name(Parameter) “. Siehe den Abschnitt über Funktionen für benutzerdefinierte Funktionen. Die Standardfunktionen sind:

Länge (Ausdruck)
Der Wert der Längenfunktion ist die Anzahl der signifikanten Ziffern im Ausdruck.
lesen ( )
Die Lesefunktion (eine Erweiterung) liest eine Zahl aus der Standardeingabe, unabhängig davon, wo die Funktion auftritt. Achten Sie auf, dies kann Probleme bei der Mischung von Daten und dem Programm im Standardeingang verursachen. Die beste Verwendung für diese Funktion ist in einem zuvor geschriebenen Programm, das vom Benutzer eingegeben werden muss, aber niemals den Programmcode vom Benutzer eingegeben werden kann. Der Wert der Lesefunktion ist die Anzahl der aus der Standardeingabe unter Verwendung des aktuellen Wertes der Variablen gelesenen Zahl Ibase Für die Konversionsbasis.
Skala (Ausdruck)
Der Wert der Skalenfunktion ist die Anzahl der Ziffern nach dem Dezimalpunkt im Ausdruck.
SQRT (Ausdruck)
Der Wert der SQRT -Funktion ist die Quadratwurzel des Ausdrucks. Wenn der Ausdruck negativ ist, wird ein Laufzeitfehler erzeugt.

Aussagen

Aussagen (wie in den meisten algebraischen Sprachen) liefern die Sequenzierung der Expressionsbewertung. In BC Aussagen werden so schnell wie möglich ausgeführt.”Ausführung tritt auf, wenn eine neue Zeile in begegnen und es eine oder mehrere vollständige Aussagen gibt. Aufgrund dieser sofortigen Ausführung sind Newlines sehr wichtig in BC. Tatsächlich werden sowohl ein Semikolon als auch eine neue Linie als Statement -Separatoren verwendet. Eine nicht ordnungsgemäß platzierte Newline verursacht einen Syntaxfehler. Da Neuleitungen Anweisungsabschlüsse sind, ist es möglich, eine Newline durch die Verwendung des Backslash -Charakters zu verbergen. Die Sequenz "\", wo ist die neue Linie erscheint zu BC als Whitespace statt einer neuen Linie. Eine Aussageliste ist eine Reihe von Aussagen, die von Semikolons und Newlines getrennt sind. Das Folgende ist eine Liste von BC Aussagen und was sie tun: (Dinge, die in Klammern ([]) eingeschlossen sind ([]) sind optionale Teile der Erklärung.)

Ausdruck
Diese Aussage macht eines von zwei Dingen. Wenn der Ausdruck mit „…“ beginnt, wird er als Zuweisungsanweisung angesehen. Wenn der Ausdruck keine Zuordnungsanweisung ist, wird der Ausdruck bewertet und in die Ausgabe gedruckt. Nachdem die Nummer gedruckt wurde, wird eine neue Linie gedruckt. Zum Beispiel ist ""a = 1"" eine Zuweisungsanweisung und ""(a = 1)"" ist ein Ausdruck, der eine eingebettete Zuordnung hat. Alle gedruckten Zahlen werden in der von der Variablen angegebenen Basis gedruckt Obase. Die rechtlichen Werte für Obase sind 2 bis bc_base_max. (Siehe Abschnittsgrenzen.) Für die Basen 2 bis 16 wird die übliche Methode zum Schreiben von Zahlen verwendet. Für Basen größer als 16, BC Verwendet eine Multi-Charakter-Ziffern-Methode zum Drucken der Zahlen, bei denen jede höhere Basis-Ziffer als Basis 10-Nummer gedruckt wird. Die Multi-Charakter-Ziffern werden durch Leerzeichen getrennt. Jede Ziffer enthält die Anzahl der Zeichen, die erforderlich sind, um den Basis-Zehn-Wert von ""Obase-1"" darzustellen. Da die Zahlen von willkürlicher Genauigkeit sind, können einige Zahlen auf einer einzelnen Ausgabestelle nicht druckbar sind. Diese langen Zahlen werden über Zeilen unter Verwendung des ""\"" als letzten Zeichen einer Zeile aufgeteilt. Die maximale Anzahl der pro Zeile gedruckten Zeichen beträgt 70. Aufgrund der interaktiven Natur von BC, Das Drucken einer Zahl führt dazu, dass die Nebenwirkung des gedruckten Werts der speziellen Variablen zugewiesen wird zuletzt. Auf diese Weise kann der Benutzer den letzten gedruckten Wert wiederherstellen, ohne den Ausdruck neu zu machen, der die Nummer gedruckt hat. Zuweisen zu zuletzt ist legal und überschreibt den zuletzt gedruckten Wert mit dem zugewiesenen Wert. Der neu zugewiesene Wert bleibt verbleiben, bis die nächste Nummer gedruckt ist oder ein anderer Wert zugewiesen wird zuletzt. (Einige Installationen können die Verwendung eines einzelnen Zeitraums ermöglichen (.) was nicht Teil einer Zahl als kurze Handnotation für ist für zuletzt.)
Saite
Die Zeichenfolge wird in die Ausgabe gedruckt. Saiten beginnen mit einem doppelten Zitatcharakter und enthalten alle Zeichen bis zum nächsten Doppel -Zitat -Zeichen. Alle Charaktere werden buchstäblich eingenommen, einschließlich einer neuen Linie. Nach der Zeichenfolge wird kein Newline -Zeichen gedruckt.
drucken Liste
Die Druckanweisung (eine Erweiterung) bietet eine weitere Ausgangsmethode. Die „Liste“ ist eine Liste von Strings und Ausdrücken, die durch Kommas getrennt sind. Jede Zeichenfolge oder Ausdruck wird in der Reihenfolge der Liste gedruckt. Es wird keine Beendigung von Newline gedruckt. Ausdrücke werden bewertet und der Wert wird gedruckt und der Variablen zugeordnet zuletzt. Saiten in der Druckanweisung werden in die Ausgabe gedruckt und können Sonderzeichen enthalten. Sonderzeichen beginnen mit dem Backslash -Charakter (\). Die Sonderzeichen erkannt von BC sind ""a"" (Alarm oder Bell), ""B"" (Rücktaste), ""F"" (Formfutter), ""N"" (Newline), ""R"" (Wagenrendite), ""Q"" (Doppelzitat), ""T"" ""(Tab) und"" \ ""(Backslash). Jeder andere Charakter, der dem Backslash folgt, wird ignoriert.
Anweisung_List
Dies ist die zusammengesetzte Aussage. Es ermöglicht es, mehrere Aussagen für die Ausführung zu gruppieren.
Wenn (Ausdruck) Statement1 [anders Erklärung2]
Die IF -Anweisung bewertet den Ausdruck und führt die Anweisung1 oder Anweisung2 ab, abhängig vom Wert des Ausdrucks. Wenn der Ausdruck ungleich Null ist, wird Anweisung1 ausgeführt. Wenn Anweisung2 vorhanden ist und der Wert des Ausdrucks 0 ist, wird Anweisung2 ausgeführt. (Die else -Klausel ist eine Erweiterung.)
während (Ausdruck) Aussage
Die Anweisung wird die Anweisung ausführen, während der Ausdruck ungleich Null ist. Es bewertet den Ausdruck vor jeder Ausführung der Anweisung. Die Beendigung der Schleife wird durch einen Null -Expression -Wert oder die Ausführung einer Break -Anweisung verursacht.
für ([Expression1]