BC- (1) Página manual

BC- (1) Página manual

Nombre

BC: un lenguaje de calculadora de precisión arbitraria

Sintaxis

antes de Cristo [ -HLWSQV ] [Opciones largas] [ archivo… ]

Versión

Esta página de Man documenta GNU BC versión 1.06.

Descripción

antes de Cristo es un lenguaje que admite números de precisión arbitrarios con la ejecución interactiva de declaraciones. Hay algunas similitudes en la sintaxis al lenguaje de programación C. Una biblioteca de matemáticas estándar está disponible por opción de línea de comandos. Si se solicita, la biblioteca de matemáticas se define antes de procesar cualquier archivo. antes de Cristo Comienza por procesar el código de todos los archivos enumerados en la línea de comando en el pedido listado. Después de que todos los archivos se hayan procesado, antes de Cristo lectura de la entrada estándar. Todo el código se ejecuta mientras se lee. (Si un archivo contiene un comando para detener el procesador, antes de Cristo nunca leerá de la entrada estándar.)

Esta versión de antes de Cristo contiene varias extensiones más allá de antes de Cristo implementaciones y el borrador de POSIX estándar. Las opciones de línea de comando pueden hacer que estas extensiones impriman una advertencia o sean rechazadas. Este documento describe el lenguaje aceptado por este procesador. Las extensiones se identificarán como tales.

Opción

-h, -help
Imprima el uso y la salida.
-yo, -interactivo
Force el modo interactivo.
-l, -mathlib
Definir la biblioteca de matemáticas estándar.
-w, -warn
Dar advertencias para extensiones a Posix antes de Cristo.
-s, -estándar
Procesar exactamente el POSIX antes de Cristo idioma.
-Q, -quiet
No imprima la bienvenida de GNU BC normal.
-V, -versión
Imprima el número de versión y los derechos de autor y renuncia.

Números

El elemento más básico en antes de Cristo es el número. Los números son números de precisión arbitrarios. Esta precisión está tanto en la parte entera como en la parte fraccional. Todos los números están representados internamente en decimal y todo el cálculo se realiza en decimal. (Esta versión trunca los resultados de las operaciones de divide y multiplicar.) Hay dos atributos de números, la longitud y la escala. La longitud es el número total de dígitos decimales significativos en un número y la escala es el número total de dígitos decimales después del punto decimal. Por ejemplo:

 .000001 tiene una longitud de 6 y una escala de 6. 1935.000 tiene una longitud de 7 y una escala de 3.

Variables

Los números se almacenan en dos tipos de variables, variables simples y matrices. Se nombran tanto variables simples como variables de matriz. Los nombres comienzan con una carta seguida de cualquier número de letras, dígitos y subrayos. Todas las cartas deben ser minúsculas. (Los nombres alfa-numéricos completos son una extensión. En Posix antes de Cristo Todos los nombres son una sola carta de minúsculas.) El tipo de variable está claro por el contexto porque todos los nombres de variables de matriz serán seguidos por los soportes ([]).

Hay cuatro variables especiales, escala, ibase, obase, y último. escala Define cómo algunas operaciones usan dígitos después del punto decimal. El valor predeterminado de escala es 0. ibase y obase Definir la base de conversión para números de entrada y salida. El valor predeterminado tanto para la entrada como para la salida es la base 10. último (una extensión) es una variable que tiene el valor del último número impreso. Estos se discutirán con más detalle cuando sea apropiado. Todas estas variables pueden tener valores asignados y utilizados en expresiones.

Comentario

Comentarios antes de Cristo Empiece con los personajes /* Y termina con los personajes */. Los comentarios pueden comenzar en cualquier lugar y aparecer como un solo espacio en la entrada. (Esto hace que los comentarios delimiten otros elementos de entrada. Por ejemplo, no se puede encontrar un comentario en el medio de un nombre de variable.) Los comentarios incluyen cualquier línea nueva (fin de línea) entre el inicio y el final del comentario.

Para apoyar el uso de scripts para antes de Cristo, Se ha agregado un comentario de una sola línea como una extensión. Un comentario de una sola línea comienza en un # personaje y continúa hasta el siguiente extremo de la línea. El carácter final de la línea no es parte del comentario y se procesa normalmente.

Expresiones

Los números se manipulan por expresiones y declaraciones. Dado que el lenguaje fue diseñado para ser interactivo, las declaraciones y las expresiones se ejecutan lo antes posible. No hay un programa "principal". En cambio, el código se ejecuta como se encuentra. (Las funciones, discutidas en detalle más tarde, se definen cuando se encuentran.)

Una expresión simple es solo una constante. antes de Cristo Convierte constantes en números decimales internos utilizando la base de entrada actual, especificada por la variable ibase. (Hay una excepción en las funciones.) Los valores legales de ibase son de 2 a 16. Asignando un valor fuera de este rango a ibase dará como resultado un valor de 2 o 16. Los números de entrada pueden contener los caracteres 0-9 y A-F. (Nota: deben ser capitales. Las letras minúsculas son nombres de variables.) Los números de un solo dígito siempre tienen el valor del dígito independientemente del valor de ibase. (i.mi. A = 10.) Para números de múltiples dígitos, antes de Cristo cambia todos los dígitos de entrada mayores o iguales a IBase al valor de ibase-1. Esto hace que el número FFF siempre sea el número de 3 dígitos más grande de la base de entrada.

Las expresiones completas son similares a muchos otros idiomas de alto nivel. Dado que solo hay un tipo de número, no hay reglas para mezclar tipos. En cambio, hay reglas sobre la escala de expresiones. Cada expresión tiene una escala. Esto se deriva de la escala de los números originales, la operación realizada y, en muchos casos, el valor de la variable escala. Valores legales de la variable escala son 0 al número máximo representable por un entero C.

En las siguientes descripciones de expresiones legales, "expr" se refiere a una expresión completa y "var" se refiere a una variable simple o simple. Una variable simple es solo una

nombre

y una variable de matriz se especifica como

nombre[expr]

A menos que se mencione específicamente, la escala del resultado es la escala máxima de las expresiones involucradas.

- expr
El resultado es la negación de la expresión.
++ varilla
La variable se incrementa por una y el nuevo valor es el resultado de la expresión.
- varilla
La variable se disminuye por una y el nuevo valor es el resultado de la expresión.
varilla ++
El resultado de la expresión es el valor de
la variable y luego la variable se incrementa por una.
varilla -
El resultado de la expresión es el valor de la variable y luego la variable es disminuida por una.
EXPR + EXPR
El resultado de la expresión es la suma de las dos expresiones.
EXPR - EXPR
El resultado de la expresión es la diferencia de las dos expresiones.
EXPR * EXPR
El resultado de la expresión es el producto de las dos expresiones.
EXPR / EXPR
El resultado de la expresión es el cociente de las dos expresiones. La escala del resultado es el valor de la variable escala.
expr % expr
El resultado de la expresión es el "resto" y se calcula de la siguiente manera. Para calcular un%B, se calcula el primer A/B para escala dígitos. Ese resultado se usa para calcular A- (A/B)*B a la escala del máximo de escala+escala (b) y escala (a). Si escala se establece en cero y ambas expresiones son enteros Esta expresión es la función de resto de enteros.
Expr ^ Exrr
El resultado de la expresión es el valor del primero elevado al segundo. La segunda expresión debe ser un entero. (Si la segunda expresión no es un entero, se genera una advertencia y la expresión se trunca para obtener un valor entero.) La escala del resultado es escala Si el exponente es negativo. Si el exponente es positivo, la escala del resultado es el mínimo de la escala de la primera expresión tiempos del valor del exponente y el máximo de escala y la escala de la primera expresión. (mi.gramo. escala (a^b) = min (escala (a)*b, max ( escala, escala (a))).) Cabe señalar que Expr^0 siempre devolverá el valor de 1.
(Expr)
Esto altera la precedencia estándar para forzar la evaluación de la expresión.
var = expr
A la variable se le asigna el valor de la expresión.
var = expr
Esto es equivalente a "var = var expr" con la excepción de que la parte "var" se evalúa solo una vez. Esto puede marcar la diferencia si "var" es una matriz.

Las expresiones relacionales son un tipo especial de expresión que siempre evalúa a 0 o 1, 0 si la relación es falsa y 1 si la relación es verdadera. Estos pueden aparecer en cualquier expresión legal. (Posix BC requiere que las expresiones relacionales se usen solo en si, mientras, y para declaraciones y que solo se puede hacer una prueba relacional en ellas.) Los operadores relacionales son

expr1 < expr2
El resultado es 1 si Expr1 es estrictamente menor que Expr2.
expr1 <= expr2
El resultado es 1 si Expr1 es menor o igual a Expr2.
Expr1> Expr2
El resultado es 1 si Expr1 es estrictamente mayor que Expr2.
expr1> = expr2
El resultado es 1 si Expr1 es mayor o igual a Expr2.
Expr1 == ExpR2
El resultado es 1 si Expr1 es igual a Expr2.
expr1 != expr2
El resultado es 1 si Expr1 no es igual a Expr2.

Las operaciones booleanas también son legales. (Posix antes de Cristo no tiene operaciones booleanas). El resultado de todas las operaciones booleanas son 0 y 1 (para falso y verdadero) como en las expresiones relacionales. Los operadores booleanos son:

!expr
El resultado es 1 si Expr es 0.
Expr && Expr
El resultado es 1 si ambas expresiones no son cero.
Expr || expr
El resultado es 1 si alguna expresión no es cero.

La precedencia de la expresión es la siguiente: (de menor a más alta)

|| Operador, Left Associative && Operator, Left Associative ! operador, no asociativo
Operadores relacionales,
Operador de asignación asociativa de izquierda, operadores de asociación derecha + y -,
Left Associative *, / y % Operadores, Operador de Asociativo de Left, Derecho Asociativo
Unary - operador, no asociativo ++ y - operadores, no asociativos

Esta precedencia fue elegida para que Posix cumpliera antes de Cristo Los programas se ejecutarán correctamente. Esto hará que el uso de los operadores relacionales y lógicos tenga algún comportamiento inusual cuando se use con expresiones de asignación. Considere la expresión:

a = 3 < 5

La mayoría de los programadores C supondría que esto asignaría el resultado de "3 < 5” (the value 1) to the variable “a”. What this does in antes de Cristo es asignar el valor 3 a la variable "a" y luego comparar 3 a 5. Es mejor usar paréntesis al usar operadores relacionales y lógicos con los operadores de asignación.

Hay algunas expresiones más especiales que se proporcionan en antes de Cristo. Estos tienen que ver con las funciones definidas por el usuario y las funciones estándar. Todos aparecen como "nombre(parámetros) ". Consulte la sección sobre funciones para funciones definidas por el usuario. Las funciones estándar son:

longitud (expresión)
El valor de la función de longitud es el número de dígitos significativos en la expresión.
leer ( )
La función de lectura (una extensión) leerá un número de la entrada estándar, independientemente de dónde ocurra la función. Cuidado, esto puede causar problemas con la mezcla de datos y el programa en la entrada estándar. El mejor uso para esta función está en un programa previamente escrito que necesita información del usuario, pero nunca permite que el código del programa se ingrese del usuario. El valor de la función de lectura es el número leído de la entrada estándar utilizando el valor actual de la variable ibase para la base de conversión.
escala (expresión)
El valor de la función de escala es el número de dígitos después del punto decimal en la expresión.
sqrt (expresión)
El valor de la función sqrt es la raíz cuadrada de la expresión. Si la expresión es negativa, se genera un error de tiempo de ejecución.

Declaraciones

Las declaraciones (como en la mayoría de los idiomas algebraicos) proporcionan la secuenciación de la evaluación de la expresión. En antes de Cristo Las declaraciones se ejecutan "tan pronto como sea posible."La ejecución ocurre cuando se encuentra una nueva línea y hay una o más declaraciones completas. Debido a esta ejecución inmediata, las nuevas líneas son muy importantes en antes de Cristo. De hecho, tanto un punto y coma y una nueva línea se utilizan como separadores de declaración. Una nueva línea de colocación incorrecta causará un error de sintaxis. Debido a que las nuevas líneas son separadores de declaración, es posible ocultar una nueva línea utilizando el carácter de barra de barra de barra. La secuencia "\", ¿dónde parece la nueva línea? antes de Cristo como espacios en lugar de una nueva línea. Una lista de declaraciones es una serie de declaraciones separadas por Semicolons y Newlines. La siguiente es una lista de antes de Cristo declaraciones y lo que hacen: (las cosas encerradas en los soportes ([]) son partes opcionales de la declaración.)

expresión
Esta declaración hace una de las dos cosas. Si la expresión comienza con ""..."", se considera una declaración de asignación. Si la expresión no es una declaración de asignación, la expresión se evalúa e imprime a la salida. Después de imprimir el número, se imprime una nueva línea. Por ejemplo, ""a = 1"" es una declaración de asignación y ""(a = 1)"" es una expresión que tiene una asignación incrustada. Todos los números que se imprimen se imprimen en la base especificada por la variable obase. Los valores legales para obase son 2 a través de bc_base_max. (Consulte los límites de la sección.) Para las bases 2 a 16, se utiliza el método habitual de escribir números. Para bases mayores de 16, antes de Cristo Utiliza un método de dígitos multi-caracteres para imprimir los números donde cada dígito base más alto se imprime como un número de base 10. Los dígitos multi-caracteres están separados por espacios. Cada dígito contiene el número de caracteres necesarios para representar el valor de la base diez de ""Obase-1"". Dado que los números son de precisión arbitraria, algunos números pueden no ser imprimibles en una sola línea de salida. Estos números largos se dividirán a través de las líneas utilizando el ""\"" como el último carácter en una línea. El número máximo de caracteres impresos por línea es 70. Debido a la naturaleza interactiva de antes de Cristo, Impresión de un número provoca el efecto secundario de asignar el valor impreso a la variable especial último. Esto permite al usuario recuperar el último valor impreso sin tener que volver a escribir la expresión que imprimió el número. Asignación a último es legal y sobrescribirá el último valor impreso con el valor asignado. El valor recién asignado permanecerá hasta que se imprima el siguiente número o se asigne otro valor a último. (Algunas instalaciones pueden permitir el uso de un solo período (.) que no es parte de un número como una notación de mano corta para último.)
cadena
La cadena se imprime a la salida. Las cadenas comienzan con un personaje de doble cita y contienen todos los caracteres hasta el siguiente personaje de doble cita. Todos los personajes se toman literalmente, incluida cualquier nueva línea. No se imprime ningún personaje de Newline después de la cadena.
imprimir lista
La instrucción de impresión (una extensión) proporciona otro método de salida. La ""lista"" es una lista de cuerdas y expresiones separadas por comas. Cada cadena o expresión se imprime en el orden de la lista. No se imprime la nueva línea de terminación. Se evalúan las expresiones y su valor se imprime y se asigna a la variable último. Las cadenas en la declaración de impresión se imprimen a la salida y pueden contener caracteres especiales. Los caracteres especiales comienzan con el personaje de Back -savlash (\). Los caracteres especiales reconocidos por antes de Cristo son ""A"" (alerta o campana), ""B"" (Backspace), ""F"" (Forma de formulario), ""N"" (Newline), ""R"" (retorno de carro), ""Q"" (Cita doble), ""T ""(Pestaña) y"" \ ""(barra de retroceso). Cualquier otro personaje que siga la barra invertida será ignorado.
Declaration_list
Esta es la declaración compuesta. Permite que múltiples declaraciones se agrupen para su ejecución.
si (expresión) Declaración1 [demás Declaración 2]
La declaración IF evalúa la expresión y ejecuta la declaración1 o la declaración2 dependiendo del valor de la expresión. Si la expresión no es cero, la declaración1 se ejecuta. Si la declaración2 está presente y el valor de la expresión es 0, entonces la declaración2 se ejecuta. (La cláusula delse es una extensión.)
mientras Declaración (expresión)
La declaración While ejecutará la declaración mientras que la expresión no es cero. Evalúa la expresión antes de cada ejecución de la declaración. La terminación del bucle es causada por un valor de expresión cero o la ejecución de una declaración de ruptura.
para ([Expression1]