EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

bcposix – Online in der Cloud

Führen Sie bcposix im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehl bcposix, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


bc – Arithmetiksprache mit beliebiger Genauigkeit

ZUSAMMENFASSUNG


bc [− l] [Datei...]

BESCHREIBUNG


Das bc Das Dienstprogramm muss einen Rechner mit beliebiger Präzision implementieren. Es soll Input von nehmen
alle angegebenen Dateien, dann aus der Standardeingabe lesen. Wenn die Standardeingabe und Standard
Ausgabe an bc an ein Terminal angeschlossen sind, erfolgt der Aufruf von bc gilt als
interaktive, was zu Verhaltenseinschränkungen führt, die in den folgenden Abschnitten beschrieben werden.

OPTIONAL


Das bc Dienstprogramm muss dem Band der Basisdefinitionen von POSIX.1‐2008 entsprechen, Abschnitt 12.2,
Dienstprogramm Syntax Richtlinien.

Folgende Option soll unterstützt werden:

− l (Der Buchstabe ell.) Definieren Sie die mathematischen Funktionen und initialisieren Sie sie Treppe stattdessen auf 20
des Standardnullpunkts; siehe Abschnitt ERWEITERTE BESCHREIBUNG.

OPERANDEN


Der folgende Operand soll unterstützt werden:

Datei Ein Pfadname einer Textdatei, die enthält bc Programmanweisungen. Schließlich Dateirasieren
gelesen worden, bc soll die Standardeingabe lesen.

STDIN


Siehe Abschnitt EINGABEDATEIEN.

SPEISUNG DATEIEN


Eingabedateien müssen Textdateien sein, die eine Folge von Kommentaren, Anweisungen usw. enthalten
Funktionsdefinitionen, die beim Lesen ausgeführt werden sollen.

VARIABLEN


Die folgenden Umgebungsvariablen sollen die Ausführung von bc:

SPRACHE Geben Sie einen Standardwert für die Internationalisierungsvariablen an, die nicht festgelegt sind oder
Null. (Siehe den Band Basisdefinitionen von POSIX.1‐2008, Abschnitt 8.2,
Internationalisierung Variablen für den Vorrang der Internationalisierung
Variablen, die verwendet werden, um die Werte von Gebietsschemakategorien zu bestimmen.)

LC_ALL Wenn auf einen nicht leeren Zeichenfolgenwert gesetzt, überschreiben Sie die Werte aller anderen
Internationalisierungsvariablen.

LC_CTYPE Bestimmen Sie das Gebietsschema für die Interpretation von Sequenzen von Bytes von Textdaten
als Zeichen (z. B. Einzelbyte- im Gegensatz zu Mehrbyte-Zeichen in
Argumente und Eingabedateien).

LC_MESSAGES
Bestimmen Sie das Gebietsschema, das verwendet werden soll, um das Format und den Inhalt von . zu beeinflussen
Diagnosemeldungen in Standardfehler geschrieben.

NLSPATH Bestimmen Sie den Speicherort von Nachrichtenkatalogen für die Verarbeitung von LC_MESSAGES.

ASYNCHRON Events


Standard.

STDOUT


Die Ausgabe der bc Das Dienstprogramm wird durch das gelesene Programm gesteuert und besteht aus Null
oder mehrere Zeilen, die den Wert aller ausgeführten Ausdrücke ohne Zuweisungen enthalten. Der
Basis und Genauigkeit der Ausgabe werden durch die Werte von gesteuert Chef und Treppe
Variablen; siehe Abschnitt ERWEITERTE BESCHREIBUNG.

STDERR


Der Standardfehler darf nur für Diagnosemeldungen verwendet werden.

AUSGABE DATEIEN


Keiner.

VERLÄNGERT BESCHREIBUNG


Grammatik
Die Grammatik in diesem Abschnitt und die lexikalischen Konventionen im folgenden Abschnitt gelten
beschreiben zusammen die Syntax für bc Programme. Die allgemeinen Konventionen für diesen Stil von
Grammatik sind in beschrieben Abschnitt 1.3, Grammatik Conventions. Ein gültiges Programm kann sein
dargestellt als nichtterminales Symbol Programm in der Grammatik. Diese formale Syntax soll
haben Vorrang vor der Beschreibung der Textsyntax.

%Zeichen EOF NEUE ZEILE STRING LETTER NUMBER

%token MUL_OP
/* '*', '/', '%' */

%token ASSIGN_OP
/* '=', '+=', '−=', '*=', '/=', '%=', '^=' */

%token REL_OP
/* '==', '<=', '>=', '!=', '<', '>' */

%token INCR_DECR
/* '++', '−−' */

%token Definieren Sie die Pausen-/Beenden-Länge
/* 'define', 'break', 'quit', 'length' */

%token Return For If While Sqrt
/* 'return', 'for', 'if', 'while', 'sqrt' */

%token Scale Ibase Obase Auto
/* 'scale', 'ibase', 'obase', 'auto' */

%start-Programm

%%

Programm: EOF
| input_item-Programm
;

input_item: semicolon_list NEWLINE
| Funktion
;

semicolon_list : /* leer */
| Stellungnahme
| semicolon_list ';' Stellungnahme
| semicolon_list ';'
;

Anweisungsliste: /* leer */
| Stellungnahme
| Anweisungsliste NEWLINE
| Statement_list NEWLINE-Anweisung
| Anweisungsliste ';'
| Anweisungsliste ';' Stellungnahme
;

Aussage: Ausdruck
| STRING
| Brechen
| Aufhören
| Zurückkehren
| Rückgabe '('return_expression')'
| Für '(' Ausdruck ';'
relationaler_Ausdruck ';'
Ausdruck ')'-Anweisung
| If '(' relational_expression ')'-Anweisung
| While '(' relational_expression ')'-Anweisung
| '{' Statement_list '}'
;

Funktion: Definiere BUCHSTABE '(' opt_parameter_list ')'
'{' NEWLINE opt_auto_define_list
Anweisungsliste '}'
;

opt_parameter_list : /* leer */
| Parameterliste
;

Parameterliste: BUCHSTABE
| define_list '',' BUCHSTABE
;

opt_auto_define_list : /* leer */
| Auto define_list NEWLINE
| Auto define_list ';'
;

define_list: BUCHSTABE
| BRIEF '[' ']'
| define_list '',' BUCHSTABE
| define_list ',' LETTER '[' ']'
;

opt_argument_list : /* leer */
| argument_list
;

argument_list: Ausdruck
| BUCHSTABE '[' ']' ',' argument_list
;

relationaler_Ausdruck: Ausdruck
| Ausdruck REL_OP-Ausdruck
;

return_expression : /* leer */
| Ausdruck
;

Ausdruck: benannter_Ausdruck
| NUMMER
| '(' Ausdruck ')'
| BUCHSTABE '(' opt_argument_list ')'
| '−' Ausdruck
| Ausdruck '+' Ausdruck
| Ausdruck '−' Ausdruck
| Ausdruck MUL_OP Ausdruck
| Ausdruck '^' Ausdruck
| INCR_DECR benannter_Ausdruck
| benannter_Ausdruck INCR_DECR
| benannter_Ausdruck ASSIGN_OP-Ausdruck
| Länge '('Ausdruck')'
| Sqrt '(' Ausdruck ')'
| Skala '('Ausdruck')'
;

benannter_Ausdruck: BUCHSTABE
| BUCHSTABE '[' Ausdruck ']'
| Skala
| Ibase
| Obase
;

Lexikalisch Conventions in bc
Die lexikalischen Konventionen für bc Programme, in Bezug auf die vorangehende Grammatik, müssen sein
wie folgt:

1. Sofern nicht anders angegeben, bc soll den längstmöglichen Token- bzw. Begrenzeranfang erkennen
an einem bestimmten Punkt.

2. Ein Kommentar muss aus beliebigen Zeichen bestehen, die mit den beiden benachbarten Zeichen beginnen
„/*“ und durch das nächste Auftreten der beiden benachbarten Zeichen beendet „*/“.
Kommentare haben außer der Abgrenzung lexikalischer Token keine Wirkung.

3. Die wird als Token anerkannt NEUE ZEILE.

4. Der Token STRING soll eine String-Konstante darstellen; es muss aus beliebigen Zeichen bestehen
beginnend mit dem doppelten Anführungszeichen ('"') und durch ein anderes Ereignis beendet
des doppelten Anführungszeichens. Der Wert der Zeichenfolge ist die Reihenfolge aller
Zeichen zwischen den beiden doppelten Anführungszeichen, jedoch nicht einschließlich dieser. Alle Charaktere
muss wörtlich aus der Eingabe übernommen werden und es gibt keine Möglichkeit, eine Zeichenfolge anzugeben
enthält ein doppeltes Anführungszeichen. Die Länge des Werts jeder Zeichenfolge muss sein
auf {BC_STRING_MAX} Bytes begrenzt.

5. A hat keine Wirkung, außer als gewöhnliches Zeichen, wenn es innerhalb von a erscheint
STRING Token oder um ein anderes lexikalisches Token als abzugrenzen STRING.

6. Die Kombination von a Zeichen unmittelbar gefolgt von a soll
haben keine andere Wirkung als die Begrenzung lexikalischer Token mit den folgenden Ausnahmen:

* Es ist als Zeichenfolge zu interpretieren "\ " in STRING Token.

* Es soll als Teil einer Mehrzeile ignoriert werden NUMBER Token

7. Der Token NUMBER soll eine numerische Konstante darstellen. Es wird von der anerkannt
folgende Grammatik:

NUMBER : ganze Zahl
| '.' ganze Zahl
| ganze Zahl '.'
| ganze Zahl '.' ganze Zahl
;

Ganzzahl: Ziffer
| Ganzzahlige Ziffer
;

Ziffer: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7
| 8 | 9 | A | B | C | D | E | F
;

8. Der Wert von a NUMBER Der Token ist als Zahl in der durch angegebenen Basis zu interpretieren
der Wert des internen Registers ibase (nachstehend beschrieben). Jedes von den Ziffer
Zeichen müssen den Wert von 0 bis 15 in der hier aufgeführten Reihenfolge haben und die
Das Zeichen soll den Basispunkt darstellen. Das Verhalten ist undefiniert, wenn
Ziffern größer oder gleich dem Wert von ibase erscheinen im Token. Beachten Sie jedoch
Die Ausnahme besteht bei der Zuweisung einstelliger Werte ibase und Chef selbst, in
Einkauf & Prozesse in bc.

9. Folgende Schlüsselwörter werden als Token anerkannt:

Auto ibase Länge Rückkehr während
brechen if Chef Treppe
definieren für verlassen sqrt

10. Alle folgenden Zeichen, die irgendwo außer innerhalb eines Schlüsselworts vorkommen, müssen sein
als Token erkannt LETTER:

a b c d e f g h i j k l m n o p q r s t u v w x y z

11. Die folgenden Ein- und Zweizeichenfolgen werden als erkannt
Zeichen ASSIGN_OP:

= += −= *= /= %= ^=

12. Wenn ein '=' Auf das Zeichen als Anfang eines Tokens folgt ein '-' Zeichen mit
Kein dazwischenliegendes Trennzeichen, das Verhalten ist undefiniert.

13. Die folgenden Einzelzeichen werden als Token erkannt MUL_OP:

* / %

14. Die folgenden Ein- und Zweizeichenfolgen werden als erkannt
Zeichen REL_OP:

== <= >= != < >

15. Die folgenden zweistelligen Sequenzen werden als Token erkannt INCR_DECR:

++ −−

16. Die folgenden Einzelzeichen werden als Token erkannt, deren Namen die sind
Charakter:

( ) , + - ; [ ] ^ { }

17. Der Token EOF wird zurückgegeben, wenn das Ende der Eingabe erreicht ist.

Einkauf & Prozesse in bc
Es gibt drei Arten von Bezeichnern: gewöhnliche Bezeichner, Array-Bezeichner und
Funktionsbezeichner. Alle drei Typen bestehen aus einzelnen Kleinbuchstaben. Array
Den Bezeichnern müssen eckige Klammern folgen ("[]"). Ein Array-Index ist erforderlich
außer in einem Argument oder einer automatischen Liste. Arrays sind einfach dimensioniert und können bis zu enthalten
{BC_DIM_MAX} Elemente. Die Indizierung beginnt bei Null, sodass ein Array von 0 bis indiziert wird
{BC_DIM_MAX}−1. Indizes werden auf Ganzzahlen gekürzt. Der Antrag stellt sicher
dass auf Funktionsbezeichner Klammern folgen, die möglicherweise Argumente einschließen. Der
Drei Arten von Bezeichnern stehen nicht in Konflikt.

Die folgende Tabelle fasst die Regeln für Vorrang und Assoziativität aller zusammen
Betreiber. Operatoren in derselben Leitung haben denselben Vorrang; Zeilen sind in der Reihenfolge von
abnehmender Vorrang.

Table: Betreiber in bc

┌──────────────────────────┬──────────── ───┐
OperatorAssoziativität
├──────────────────────────┼──────────── ───┤
│++, −− │ N/A │
│unär − │ N/A │
│^ │ Von rechts nach links │
│*, /, % │ Von links nach rechts │
│+, binär − │ Von links nach rechts │
│=, +=, −=, *=, /=, %=, ^= │ Von rechts nach links │
│==, <=, >=, !=, <, > │ Keine │
└──────────────────────────┴──────────── ───┘
Jeder Ausdruck oder benannte Ausdruck hat eine Treppe, also die Anzahl der Dezimalstellen
Dieser soll als Bruchteil des Ausdrucks beibehalten werden.

Namens Ausdrücke sind Orte, an denen Werte gespeichert werden. Benannte Ausdrücke gelten ab
die linke Seite einer Aufgabe. Der Wert eines benannten Ausdrucks muss der gespeicherte Wert sein
am genannten Ort. Einfache Bezeichner und Array-Elemente sind benannte Ausdrücke; Sie haben
ein Anfangswert von Null und eine Anfangsskala von Null.

Die internen Register Treppe, ibase und Chef sind alle benannte Ausdrücke. Das Ausmaß eines
Der Ausdruck, der aus dem Namen eines dieser Register besteht, muss Null sein; Werte zugewiesen
zu einem dieser Register werden auf ganze Zahlen gekürzt. Der Treppe Das Register muss Folgendes enthalten:
Globaler Wert, der bei der Berechnung der Skala von Ausdrücken verwendet wird (wie unten beschrieben). Der Wert von
das Register Treppe ist auf 0 ≤ begrenzt Treppe ≤ {BC_SCALE_MAX} und muss einen Standardwert haben
von null. Das ibase und Chef Register sind die Eingabe- und Ausgabenummernbasis,
jeweils. Der Wert von ibase ist beschränkt auf:

2 ibase 16

Der Wert der Chef ist beschränkt auf:

2 Chef {BC_BASE_MAX}

Wenn entweder ibase or Chef ist eine Single zugeordnet Ziffer Wert aus der Liste in Lexikalisch
Conventions in bc, wird der Wert hexadezimal angenommen. (Zum Beispiel, ibase=A setzt
zur Basis zehn, unabhängig vom Strom ibase Wert.) Ansonsten ist das Verhalten undefiniert
wenn Ziffern größer oder gleich dem Wert von sind ibase erscheinen in der Eingabe. Beide ibase
und Chef soll Anfangswerte von 10 haben.

Interne Berechnungen werden unabhängig von der Eingabe und im Dezimalformat durchgeführt
Ausgabebasis auf die angegebene Anzahl von Dezimalstellen. Ein genaues Ergebnis gibt es nicht
erreicht (zum Beispiel Treppe=0; 3.2/1), Das Ergebnis wird abgeschnitten.

Für alle Werte von Chef spezifiziert durch diesen Band von POSIX.1‐2008, bc soll numerisch ausgeben
Geben Sie die Werte ein, indem Sie die folgenden Schritte der Reihe nach ausführen:

1. Wenn der Wert kleiner als Null ist, a ('-') Zeichen ausgegeben werden.

2. Abhängig vom Zahlenwert wird eine der folgenden Meldungen ausgegeben:

* Wenn der Absolutwert des Zahlenwerts größer oder gleich eins ist, wird der
Der ganzzahlige Teil des Werts soll als entsprechende Ziffernreihe ausgegeben werden
Chef (wie unten beschrieben), die höchstwertige Ziffer zuerst. Das Bedeutendste
Als nächstes wird eine Ziffer ungleich Null ausgegeben, gefolgt von jeweils einer kleineren
signifikante Ziffer.

* Wenn der Absolutwert des Zahlenwerts kleiner als eins, aber größer als ist
Null und die Skalierung des numerischen Werts größer als Null ist, ist er nicht spezifiziert
ob das Zeichen 0 ausgegeben wird.

* Wenn der Zahlenwert Null ist, soll das Zeichen 0 ausgegeben werden.

3. Wenn die Skala des Werts größer als Null ist und der numerische Wert nicht Null ist, a
Es soll ein Zeichen ausgegeben werden, gefolgt von einer entsprechenden Ziffernfolge
Chef (wie unten beschrieben), der den signifikantesten Teil des Bruchteils darstellt
Teil des Wertes. Wenn s stellt die Skalierung des ausgegebenen Werts dar, die Anzahl der
Die ausgegebenen Ziffern sollen sein s if Chef ist 10, kleiner oder gleich s if Chef ist besser
als 10 oder größer oder gleich s if Chef ist kleiner als 10. Für Chef Werte
Anders als 10 sollte dies die Anzahl der Ziffern sein, die zur Darstellung einer Genauigkeit von erforderlich sind
10s.

Aussichten für Chef Werte von 2 bis 16, gültige Ziffern sind die ersten Chef der einzelnen Zeichen:

0 1 2 3 4 5 6 7 8 9 A B C D E F

die jeweils die Werte null bis einschließlich 15 darstellen.

Bei Basen größer als 16 muss jede Ziffer als separate mehrstellige Dezimalzahl geschrieben werden
Nummer. Jeder Ziffer mit Ausnahme der höchstwertigen Nachkommastelle muss ein vorangestellt werden
einzel . Für Basen von 17 bis 100, bc soll zweistellige Dezimalzahlen schreiben; für
Basen von 101 bis 1000, dreistellige Dezimalzeichenfolgen usw. Zum Beispiel die Dezimalzahl
Zahl 1024 zur Basis 25 würde wie folgt geschrieben werden:

01 15 24

und in Basis 125, als:

008 024

Sehr große Zahlen sollen im POSIX auf Zeilen mit 70 Zeichen pro Zeile aufgeteilt werden
Gebietsschema; Andere Gebietsschemas können an anderen Zeichengrenzen geteilt werden. Linien, die sind
Fortsetzung soll mit a enden .

Ein Funktionsaufruf besteht aus einem Funktionsnamen, gefolgt von Klammern, die ein enthalten
-getrennte Liste von Ausdrücken, die die Funktionsargumente sind. Eine ganze Reihe
Als Argument übergeben, muss der Array-Name gefolgt von einem leeren Quadrat angegeben werden
Klammern. Alle Funktionsargumente müssen als Wert übergeben werden. Infolgedessen wurden Änderungen vorgenommen
Die formalen Parameter dürfen keinen Einfluss auf die eigentlichen Argumente haben. Wenn die Funktion
endet durch die Ausführung von a Rückkehr Anweisung, der Wert der Funktion soll der Wert sein
des Ausdrucks in den Klammern des Rückkehr Anweisung oder soll Null sein, wenn nein
Ausdruck angegeben ist oder wenn nicht Rückkehr Aussage.

Das Ergebnis von sqrt(Ausdruck) soll die Quadratwurzel des Ausdrucks sein. Das Ergebnis
werden an der niedrigstwertigen Dezimalstelle gekürzt. Der Umfang des Ergebnisses soll
sei die Skala des Ausdrucks oder der Wert von Treppe, je nachdem, welcher Wert größer ist.

Das Ergebnis von Länge(Ausdruck) ist die Gesamtzahl der signifikanten Dezimalstellen
im Ausdruck. Die Skalierung des Ergebnisses muss Null sein.

Das Ergebnis von Treppe(Ausdruck) soll die Skala des Ausdrucks sein. Das Ausmaß der
Das Ergebnis soll Null sein.

Eine numerische Konstante soll ein Ausdruck sein. Die Skala soll die Anzahl der Ziffern sein
Folgen Sie dem Basispunkt in der Eingabe, der die Konstante darstellt, oder Null, wenn kein Basispunkt vorhanden ist
erscheint.

Der Ablauf ( Ausdruck ) muss ein Ausdruck mit demselben Wert und derselben Skala sein wie
Ausdruck. Die Klammern können verwendet werden, um die normale Priorität zu ändern.

Die Semantik der unären und binären Operatoren ist wie folgt:

-Ausdruck
Das Ergebnis soll das Negativ von sein Ausdruck. Der Umfang des Ergebnisses soll
sei der Maßstab von Ausdruck.

Die unären Inkrement- und Dekrementoperatoren dürfen die Skalierung des genannten nicht ändern
Ausdruck, nach dem sie wirken. Der Maßstab des Ergebnisses soll der Maßstab davon sein
benannter Ausdruck.

++benannter Ausdruck
Der benannte Ausdruck soll um eins erhöht werden. Das Ergebnis soll der Wert von sein
der benannte Ausdruck nach dem Inkrementieren.

−−benannter Ausdruck
Der benannte Ausdruck soll um eins dekrementiert werden. Das Ergebnis soll der Wert von sein
der benannte Ausdruck nach dem Dekrementieren.

benannter Ausdruck++
Der benannte Ausdruck soll um eins erhöht werden. Das Ergebnis soll der Wert von sein
den benannten Ausdruck vor dem Inkrementieren.

benannter Ausdruck−−
Der benannte Ausdruck soll um eins dekrementiert werden. Das Ergebnis soll der Wert von sein
den benannten Ausdruck vor dem Dekrementieren.

Der Potenzierungsoperator, ('^'), soll von rechts nach links binden.

Ausdruck^Ausdruck
Das Ergebnis soll das erste sein Ausdruck auf die Potenz der Sekunde erhöht
Ausdruck. Wenn der zweite Ausdruck keine Ganzzahl ist, ist das Verhalten undefiniert.
If a ist die Skala des linken Ausdrucks und b ist der absolute Wert des Rechts
Ausdruck, die Skala des Ergebnisses soll sein:

if b >= 0 min(a * b, max(Skala, A)) if b < 0 Treppe

Die multiplikativen Operatoren ('*', '/', '%') muss von links nach rechts gebunden sein.

Ausdruck*Ausdruck
Das Ergebnis soll das Produkt der beiden Ausdrücke sein. Wenn a und b sind die Maßstäbe von
die beiden Ausdrücke, dann ist die Skala des Ergebnisses:

min(a+b,max(scale,a,b))

Ausdruck/Ausdruck
Das Ergebnis soll der Quotient der beiden Ausdrücke sein. Das Ausmaß des Ergebnisses
soll der Wert sein Treppe.

Ausdruck%Ausdruck
Für Ausdrücke a und b, a%b wird äquivalent zu den folgenden Schritten ausgewertet:

1. Berechnen a/b zum aktuellen Maßstab.

2. Verwenden Sie das Ergebnis, um Folgendes zu berechnen:

a - (a / b) * b

maßstabsgetreu:

max(Skala + Skala(b), Skala(a))

Die Skala des Ergebnisses soll sein:

max(Skala + Skala(b), Skala(a))

Wann Treppe ist Null, die '%' Operator ist der mathematische Restoperator.

Die additiven Operatoren ('+', '-') muss von links nach rechts gebunden sein.

Ausdruck+Ausdruck
Das Ergebnis soll die Summe der beiden Ausdrücke sein. Der Umfang des Ergebnisses soll sein
das Maximum der Skalen der Ausdrücke.

Ausdruck-Ausdruck
Das Ergebnis soll die Differenz der beiden Ausdrücke sein. Das Ausmaß des Ergebnisses
soll das Maximum der Skalen der Ausdrücke sein.

Die Zuweisungsoperatoren ('=', "+=", "−=", "*=", "/=", "%=", "^=") ist rechtsverbindlich
links.

benannter Ausdruck=Ausdruck
Dieser Ausdruck soll dazu führen, dass der Wert des Ausdrucks auf der rechten Seite zugewiesen wird
zum benannten Ausdruck auf der linken Seite. Der Maßstab sowohl des genannten Ausdrucks als auch des
Das Ergebnis soll der Maßstab sein Ausdruck.

Die zusammengesetzte Aufgabe besteht aus:

benannter Ausdruck <Operator>= Ausdruck

entspricht:

benannter Ausdruck=benannter Ausdruck <Operator> Ausdruck

außer dass die benannter Ausdruck wird nur einmal ausgewertet.

Im Gegensatz zu allen anderen Operatoren sind die Vergleichsoperatoren ('<', '>', "<=", ">=", "==", "!=")
gelten nur als Gegenstand eines if, während, oder innerhalb eines für Aussage.

Ausdruck1<Ausdruck2
Die Beziehung ist wahr, wenn der Wert von Ausdruck1 ist streng genommen kleiner als die
Wert von Ausdruck2.

Ausdruck1>Ausdruck2
Die Beziehung ist wahr, wenn der Wert von Ausdruck1 ist strikt größer als die
Wert von Ausdruck2.

Ausdruck1<=Ausdruck2
Die Beziehung ist wahr, wenn der Wert von Ausdruck1 ist kleiner oder gleich
Wert von Ausdruck2.

Ausdruck1>=Ausdruck2
Die Beziehung ist wahr, wenn der Wert von Ausdruck1 ist größer oder gleich
der Wert Ausdruck2.

Ausdruck1==Ausdruck2
Die Beziehung soll wahr sein, wenn die Werte von Ausdruck1 und Ausdruck2 sind gleich.

Ausdruck1!=Ausdruck2
Die Beziehung soll wahr sein, wenn die Werte von Ausdruck1 und Ausdruck2 sind ungleich.

Es gibt nur zwei Speicherklassen bc: global und automatisch (lokal). Nur Identifikatoren
die lokal für eine Funktion sind, müssen mit deklariert werden Auto Befehl. Die Argumente zu a
Die Funktion muss lokal für die Funktion sein. Bei allen anderen Bezeichnern wird davon ausgegangen, dass sie global sind
und für alle Funktionen verfügbar. Alle Bezeichner, global und lokal, haben Anfangswerte von
null. Als auto deklarierte Bezeichner werden beim Eintritt in die Funktion zugewiesen und
nach der Rückkehr aus der Veranstaltung freigegeben. Sie behalten daher keine Werte dazwischen
Funktionsaufrufe. Automatische Arrays werden durch den Array-Namen gefolgt von einem leeren Quadrat angegeben
Klammern. Beim Eintritt in eine Funktion werden die alten Werte der Namen angezeigt, die als Parameter angezeigt werden
und als automatische Variablen sollen auf einen Stapel geschoben werden. Bis die Funktion zurückkehrt,
Verweise auf diese Namen beziehen sich nur auf die neuen Werte.

Verweise auf einen dieser Namen von anderen Funktionen, die von dieser Funktion aufgerufen werden
beziehen sich auch auf den neuen Wert, bis eine dieser Funktionen denselben Namen für einen lokalen Wert verwendet
variabel.

Wenn eine Anweisung ein Ausdruck ist, wird die Ausführung ausgeführt, es sei denn, der Hauptoperator ist eine Zuweisung
Die Anweisung soll den Wert des Ausdrucks schreiben, gefolgt von a .

Wenn eine Anweisung eine Zeichenfolge ist, wird bei der Ausführung der Anweisung der Wert geschrieben
String.

Aussagen getrennt durch oder Zeichen werden ausgeführt
der Reihe nach. In einem interaktiven Aufruf von bc, jedes Mal a ist das zu lesen
erfüllt die grammatikalische Produktion:

input_item : Semikolon_Liste NEUE ZEILE

die sequentielle Liste der Anweisungen, aus denen die besteht Semikolon_Liste soll ausgeführt werden
unverzüglich und alle durch diese Ausführung erzeugten Ergebnisse müssen unverzüglich geschrieben werden
aufgrund der Pufferung.

In einem if Aussage (if(Beziehung) Aussage), Die Aussage wird ausgeführt, wenn die
Beziehung ist wahr.

Das während Aussage (während(Beziehung) Aussage) implementiert eine Schleife, in der die Beziehung is
geprüft; jedes Mal die Beziehung stimmt, das Aussage ausgeführt werden und die Beziehung
erneut getestet. Wenn das Beziehung falsch ist, wird die Ausführung danach fortgesetzt Aussage.

A für Stellungnahme(für(Ausdruck; Beziehung; Ausdruck) Aussage) ist dasselbe wie:

erster Ausdruck
während (Beziehung) {
Aussage
letzter Ausdruck
}

Der Antrag muss sicherstellen, dass alle drei Ausdrücke vorhanden sind.

Das brechen Die Erklärung führt zur Beendigung von a für or während Aussage.

Das Auto Aussage (Auto Kennzeichnung [,Kennzeichnung] ...) soll dazu führen, dass die Werte der
Bezeichner, die nach unten gedrückt werden sollen. Die Bezeichner können gewöhnliche Bezeichner oder Arrays sein
Bezeichner. Array-Bezeichner werden angegeben, indem dem Array-Namen ein Leerzeichen folgt
eckige Klammern. Der Antrag stellt sicher, dass die Auto Aussage ist die erste
Anweisung in einer Funktionsdefinition.

A definieren Aussage:

definieren LETTER ( opt_parameter_list ) {
opt_auto_define_list
Anweisungsliste
}

definiert eine Funktion mit dem Namen LETTER. Wenn eine Funktion benannt ist LETTER wurde zuvor definiert, die
definieren Die Aussage ersetzt die bisherige Definition. Der Ausdruck:

LETTER ( opt_argument_list )

soll die genannte Funktion aufrufen LETTER. Das Verhalten ist undefiniert, wenn die Anzahl der
Die Anzahl der Argumente im Aufruf stimmt nicht mit der Anzahl der Parameter in der Definition überein.
Funktionen müssen definiert werden, bevor sie aufgerufen werden. Als Funktion gilt:
innerhalb seines eigenen Körpers definiert, daher sind rekursive Aufrufe gültig. Die Werte numerischer Konstanten
innerhalb einer Funktion wird in der durch den Wert der angegebenen Basis interpretiert ibase
registrieren, wenn die Funktion aufgerufen wird.

Das Rückkehr Aussagen (Rückkehr und Rückkehr(Ausdruck)) führt zur Beendigung von a
Funktion, Popup ihrer automatischen Variablen und Angabe des Ergebnisses der Funktion.
Die erste Form muss äquivalent sein zu Rückkehr(0). Der Wert und das Ausmaß des Ergebnisses
Der von der Funktion zurückgegebene Wert muss der Wert und die Skalierung des zurückgegebenen Ausdrucks sein.

Das verlassen Aussage (verlassen) stoppt die Ausführung von a bc Programm an der Stelle, an der die
Die Anweisung kommt in der Eingabe vor, auch wenn sie in einer Funktionsdefinition oder in einem vorkommt if,
für, oder während Aussage.

Die folgenden Funktionen müssen definiert werden, wenn die − l Option ist angegeben:

s( Ausdruck )
Argumentsinus im Bogenmaß.

c( Ausdruck )
Kosinus des Arguments im Bogenmaß.

a( Ausdruck )
Arkustangens des Arguments.

l( Ausdruck )
Natürlicher Logarithmus des Arguments.

e( Ausdruck )
Exponentialfunktion des Arguments.

j( Ausdruck, Ausdruck )
Bessel-Funktion ganzzahliger Ordnung.

Der Maßstab des von diesen Funktionen zurückgegebenen Ergebnisses ist der Wert von Treppe
Registrieren Sie sich zum Zeitpunkt des Aufrufs der Funktion. Der Wert der Treppe Melden Sie sich danach an
Funktionen, deren Ausführung abgeschlossen ist, müssen denselben Wert haben, den sie beim Aufruf hatten.
Das Verhalten ist undefiniert, wenn eine dieser Funktionen mit einem Argument außerhalb aufgerufen wird
der Bereich der mathematischen Funktion.

EXIT STATUS


Die folgenden Exit-Werte sollen zurückgegeben werden:

0 Alle Eingabedateien wurden erfolgreich verarbeitet.

nicht spezifiziert
Ein Fehler ist aufgetreten.

FOLGEN OF FEHLER


Wenn überhaupt Datei Der Operand ist angegeben und auf die genannte Datei kann nicht zugegriffen werden. bc soll a schreiben
Diagnosemeldung auf Standardfehler zurücksetzen und ohne weitere Aktion beenden.

In einem interaktiven Aufruf von bc, sollte das Dienstprogramm eine Fehlermeldung ausgeben und die Wiederherstellung durchführen
nach einem Fehler in der Eingabe. In einem nicht interaktiven Aufruf von bc, Ungültige Eingabe
verursacht undefiniertes Verhalten.

Das Folgende Abschnitte sind informativ.

Anmeldeformular ANWENDUNG


Automatische Variablen in bc funktionieren nicht genau auf die gleiche Weise wie in C oder PL/1.

Aus historischen Gründen ist der Exit-Status ab bc Es kann nicht als verlässlicher Hinweis darauf herangezogen werden, dass ein
ein Fehler ist aufgetreten. Die Rückgabe von Null nach einem Fehler ist möglich. Daher, bc sollte sein
Wird hauptsächlich von interaktiven Benutzern (die auf Fehlermeldungen reagieren können) oder von Anwendungen verwendet
Programme, die irgendwie überprüfen können, dass die zurückgegebenen Antworten keine Fehlermeldungen enthalten.

Das bc Das Dienstprogramm verwendet immer die ('.') Zeichen zur Darstellung eines Basispunkts,
unabhängig von etwaigen Dezimalzeichen, die als Teil des aktuellen Gebietsschemas angegeben sind. In
Sprachen wie C oder awk, Die Das Zeichen wird in der Programmquelle verwendet, also kann es sein
portierbar und eindeutig, während das gebietsschemaspezifische Zeichen in der Ein- und Ausgabe verwendet wird.
Weil es keinen Unterschied zwischen Quelle und Eingabe gibt bc, diese Anordnung würde nicht
möglich sein. Verwendung des gebietsschemaspezifischen Zeichens in bcDie Eingabe würde zu Unklarheiten führen
in die Sprache; Betrachten Sie das folgende Beispiel in einem Gebietsschema mit a als die
Dezimalpunktzeichen:

definieren f(a,b) {
...
}
...

f(1,2,3)

Aufgrund solcher Unklarheiten ist die Zeichen wird in der Eingabe verwendet. Eingabe folgen lassen
Unterschiedliche Konventionen von der Ausgabe wären entweder bei der Pipeline-Nutzung oder verwirrend
interaktive Nutzung, also die wird auch in der Ausgabe verwendet.

Beispiele:


In der Shell wird im Folgenden eine Näherung der ersten zehn Ziffern von zugewiesen 'π' zu den
Variable x:

x=$(printf "%s\n" 'Skala = 10; 104348 / 33215 ' | v. Chr.)

Folgende bc Das Programm gibt die gleiche Näherung aus 'π', mit Etikett, nach Norm
Ausgabe:

Treppe = 10
"Pi ist gleich "
104348 / 33215

Im Folgenden wird eine Funktion zur Berechnung eines Näherungswerts der Exponentialfunktion definiert
Funktion (beachten Sie, dass eine solche Funktion vordefiniert ist, wenn die − l Option angegeben ist):

Treppe = 20
definieren ex){
Auto a, b, c, i, s
a = 1
b = 1
s = 1
für (i = 1; 1 == 1; i++){
a = Axt
b = Bi
c = a / b
if (c == 0) {
kehrt zurück)
}
s = s+c
}
}

Im Folgenden werden Näherungswerte der Exponentialfunktion der ersten zehn gedruckt
ganze Zahlen:

für (i = 1; i <= 10; ++i) {
e(i)
}

RATIONALE


Das bc Das Dienstprogramm wurde in der Vergangenheit als Front-End-Prozessor für implementiert dc; dc war nicht
ausgewählt, um Teil dieses Bandes von POSIX.1-2008 zu sein, weil bc Es wurde angenommen, dass es mehr gibt
intuitive programmatische Schnittstelle. Aktuelle Implementierungen, die implementieren bc Verwendung von dc sind
erwartet, dass sie konform sind.

Der Exit-Status für Fehlerbedingungen wurde aus mehreren Gründen nicht angegeben:

* Die bc Das Dienstprogramm wird sowohl in interaktiven als auch in nicht interaktiven Situationen verwendet. Anders
Exit-Codes können für beide Verwendungszwecke geeignet sein.

* Es ist unklar, wann ein Exit ungleich Null erfolgen sollte; Division durch Null, undefiniert
Funktionen und Syntaxfehler sind alles mögliche.

* Es ist nicht klar, welchen Nutzen der Exit-Status hat.

* In den Implementierungen 4.3 BSD, System V und Ninth Edition bc funktioniert zusammen
mit dcdem „Vermischten Geschmack“. Seine dc Nutzen ist das übergeordnete Element, bc ist das Kind. Dies wurde auf saubere Weise durchgeführt
kündigen bc if dc abgebrochen.

Die Entscheidung zu haben bc Das Beenden bei Entdeckung einer unzugänglichen Eingabedatei basiert auf dem
glaube das bc file1 file2 wird am häufigsten verwendet, wenn mindestens file1 enthält Daten/Funktion
Deklarationen/Initialisierungen. Haben bc Fahren Sie fort, wenn die erforderlichen Dateien fehlen
wahrscheinlich nicht nützlich. Im Abschnitt „FOLGEN VON FEHLER“ gibt es keine Implikationen dafür bc
muss alle seine Dateien auf Zugänglichkeit überprüfen, bevor er sie öffnet.

Es gab erhebliche Debatten über die Angemessenheit der von ihnen akzeptierten Sprache bc.
Mehrere Rezensenten zogen es vor, entweder eine reine Teilmenge der C-Sprache oder einige Änderungen zu sehen
um die Sprache kompatibler mit C zu machen. Während die bc Sprache hat etwas Offensichtliches
Obwohl es Ähnlichkeiten mit C aufweist, hat es nie behauptet, mit irgendeiner Version von C kompatibel zu sein. An
Interpreter für eine Teilmenge von C könnte ein sehr lohnendes Dienstprogramm sein, und das könnte es auch
um bc veraltet. In der historischen Praxis ist jedoch kein solcher Nutzen bekannt, und das war auch nicht der Fall
im Rahmen dieses Bandes von POSIX.1-2008, eine solche Sprache und ein solches Dienstprogramm zu definieren. Wenn
und wenn sie definiert sind, kann es angebracht sein, sie in eine zukünftige Version von aufzunehmen
dieser Norm. Damit blieben folgende Alternativen übrig:

1. Schließen Sie alle Taschenrechnersprachen aus diesem Band von POSIX.1-2008 aus.

Die Standardentwickler waren sich einig, dass es sich um einen einfachen programmatischen Taschenrechner handeln sollte
Sprache ist sowohl für Anwendungen als auch für interaktive Benutzer sehr nützlich. Die einzige
Argumente für den Ausschluss eines Taschenrechners waren, dass er gegebenenfalls veraltet sein würde
Es entstand ein C-kompatibles, oder das Fehlen würde die Entwicklung fördern
so ein C-kompatibles. Diese Argumente gingen nicht ausreichend auf die Bedürfnisse von ein
aktuelle Anwendungsentwickler.

2. Standardisieren Sie das Historische dc, möglicherweise mit geringfügigen Änderungen.

Der Konsens der Standardentwickler war dies dc ist grundsätzlich weniger brauchbar
Sprache und dass dies eine viel zu schwere Strafe wäre, um dem Problem aus dem Weg zu gehen
ist C ähnlich, aber nicht mit ihm kompatibel.

3. Standardisieren Sie das Historische bc, möglicherweise mit geringfügigen Änderungen.

Dies war der Ansatz. Die meisten Befürworter einer Sprachänderung würden das nicht tun
wurden erfüllt, bis die meisten oder alle Inkompatibilitäten mit C behoben waren.
Da die meisten der als wünschenswert erachteten Änderungen historisch brechen würden
Anwendungen und erfordern erhebliche Änderungen an historischen Implementierungen,
Es wurden fast keine Änderungen vorgenommen. Die einzige wesentliche Änderung, die vorgenommen wurde, war
die Ersetzung des Historischen bc Zuweisungsoperatoren „=+“, und so weiter, mit dem
mehr modern "+=", und so weiter. Die älteren Versionen gelten als grundlegend
fehlerhaft aufgrund der lexikalischen Mehrdeutigkeit in den Verwendungen wie a=−1.

Damit Implementierungen nach eigenem Ermessen mit der Abwärtskompatibilität umgehen können
fit, das Verhalten dieses einen mehrdeutigen Konstrukts wurde undefiniert gemacht. (Mindestens drei
Es ist bekannt, dass Implementierungen diese Änderung bereits unterstützen, daher ist der Grad der
Die damit verbundene Änderung sollte nicht großartig sein.)

Das '%' Operator ist der mathematische Restoperator when Treppe ist Null. Das Verhalten
dieses Operators für andere Werte von Treppe ist aus historischen Implementierungen von bc und
wurde aus historischen Gründen beibehalten, obwohl es nicht intuitiv ist
Natur.

Historische Implementierungen ermöglichen die Einstellung ibase und Chef auf ein breiteres Wertespektrum.
Dazu gehören Werte unter 2, die als nicht ausreichend nützlich angesehen wurden
standardisieren. Diese Implementierungen interpretieren Eingaben für Werte von nicht richtig ibase
die größer als 16 sind. Dies liegt daran, dass numerische Konstanten syntaktisch erkannt werden.
und nicht lexikalisch, wie in diesem Band von POSIX.1-2008 beschrieben. Sie sind aus gebaut
lexikalische Token aus einzelnen Hexadezimalziffern und Figuren. Seit
Da Zeichen zwischen Token auf syntaktischer Ebene nicht sichtbar sind, ist dies nicht möglich
die in den höheren Basen verwendeten mehrstelligen „Ziffern“ richtig erkennen. Die Fähigkeit zu
Die Erkennung von Eingaben in diesen Datenbanken wurde als nicht nützlich genug angesehen, um eine Änderung dieser Datenbanken erforderlich zu machen
Implementierungen. Beachten Sie, dass die Erkennung numerischer Konstanten auf syntaktischer Ebene erfolgt
Kein Problem mit der Konformität mit diesem Band von POSIX.1-2008, da es keine Auswirkungen auf die hat
Verhalten konformer Anwendungen (und korrekt bc Programme). Historische Umsetzungen
Akzeptieren Sie auch die Eingabe mit allen Ziffern '0'-'9' und 'EIN'-'F' unabhängig vom Wert von
ibase; da Ziffern mit einem Wert größer oder gleich sind ibase sind nicht wirklich angemessen,
Das Verhalten bei ihrem Erscheinen ist undefiniert, mit Ausnahme des häufigen Falles:

ibase=8;
/* Prozess in oktal Base. */
...
ibase=A
/* Wiederherstellen dezimal Base. */

In einigen historischen Implementierungen ist der zu schreibende Ausdruck nicht initialisiert
Array-Element, ein führendes und/oder es können bis zu vier führende 0-Zeichen ausgegeben werden
vor dem Zeichen Null. Dieses Verhalten wird als Fehler betrachtet; es ist unwahrscheinlich, dass welche
Die derzeit konforme Anwendung basiert auf:

Echo 'b[3]' | bc

Gibt 00000 statt 0 zurück.

Exakte Berechnung der Anzahl der auszugebenden Nachkommastellen für einen bestimmten Wert in einer Basis
andere als 10 können rechenintensiv sein. Historische Implementierungen verwenden eine schnellere
Annäherung, und dies ist zulässig. Beachten Sie, dass die Anforderungen nur für Werte von gelten
Chef dass dieser Band von POSIX.1-2008 Implementierungen zur Unterstützung erfordert (insbesondere
nicht auf 1, 0 oder negative Basen, wenn eine Implementierung sie als Erweiterung unterstützt).

Historische Implementierungen von bc erlaubte nicht, dass Array-Parameter als letztes übergeben wurden
Parameter zu einer Funktion. Neue Implementierungen werden empfohlen, um diese Einschränkung aufzuheben
obwohl es von der Grammatik nicht verlangt wird.

ZUKUNFT RICHTUNGEN


Keiner.

Verwenden Sie bcposix online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

  • 1
    libusb
    libusb
    Bibliothek, um den Benutzerbereich zu aktivieren
    Anwendungsprogrammen, mit denen kommuniziert werden soll
    USB-Geräte. Zielgruppe: Entwickler, Ende
    Benutzer/Desktop. Programmiersprache: C.
    Kategorien...
    Laden Sie libusb herunter
  • 2
    SCHLUCK
    SCHLUCK
    SWIG ist ein Softwareentwicklungstool
    das verbindet in C geschriebene Programme und
    C++ mit einer Vielzahl von High-Level
    Programmiersprachen. SWIG wird mit verwendet
    anders...
    SWIG herunterladen
  • 3
    WooCommerce Nextjs Reaktionsthema
    WooCommerce Nextjs Reaktionsthema
    Reagieren Sie mit dem WooCommerce-Theme, das mit erstellt wurde
    Als nächstes JS, Webpack, Babel, Node und
    Express mit GraphQL und Apollo
    Klient. WooCommerce-Shop in React(
    enthält: Produkte...
    Laden Sie WooCommerce Nextjs React Theme herunter
  • 4
    archlabs_repo
    archlabs_repo
    Paket-Repo für ArchLabs Dies ist eine
    Anwendung, die auch abgerufen werden kann
    für
    https://sourceforge.net/projects/archlabs-repo/.
    Es wurde in OnWorks gehostet in...
    Laden Sie archlabs_repo herunter
  • 5
    Zephyr-Projekt
    Zephyr-Projekt
    Das Zephyr Project ist eine neue Generation
    Echtzeitbetriebssystem (RTOS), das
    unterstützt mehrere Hardware
    Architekturen. Es basiert auf einer
    Kernel mit kleinem Fußabdruck ...
    Laden Sie das Zephyr-Projekt herunter
  • 6
    SCons
    SCons
    SCons ist ein Software-Konstruktionstool
    das ist eine überlegene Alternative zum
    klassisches "Make"-Build-Tool, das
    wir alle kennen und lieben. SCons ist
    implementiert ein...
    Laden Sie SCons herunter
  • Mehr »

Linux-Befehle

Ad