Inquisitor
Language Syntax
To read the syntax table, you will need to know the following conventions:
* = 0 or more instances of an item
+ = 1 or more instances of an item
? = 0 or 1 instances of an item
| = or
1..n = fixed number of instances
[ ] = optional item or set of characters ITALICS = Inquisitor keyword
LOG = short for LOGical
EXPR = EXPRession
ARITH = short for ARITHmetic
OP = short for OPerator
Table - Language Syntax
Inquisitor script -> [INITIALIZATION] QUERY [GROUP] [FINALIZATION]
INITIALIZATION -> QL_INITIALIZATION: EVALUATION
QUERY -> QL_QUERY: EVALUATION
GROUP -> QL_GROUP: EVALUATION
FINALIZATION -> QL_FINALIZATION: EVALUATION
EVALUATION -> STATEMENT* EXEC_STATEMENT*
STATEMENT -> RECORD_STATEMENT | DATA_STATEMENT | IF_STATEMENT | CONTROL_STATEMENT
RECORD_STATEMENT -> RECORD_ID := RECORD_NAME LOG_EXPR [|]
DATA_STATEMENT -> DATA_ID := LOG_EXPR | ARITH_EXPR | STRING_EXPR
EXEC_STATEMENT -> PRINT_COMMAND | FIELD_CALC | RECORD_DELETE | RECORD_INSERT | EXEC_IF_STATEMENT
RECORD_ID -> $ALPHANUM+
DATA_ID -> #ALPHANUM+
RECORD_NAME -> ID:
ID -> LETTER ALPHANUM*
ALPHANUM -> DIGIT | LETTER | _
LETTER -> [a..z,A..Z]1
DIGIT -> [0..9]1
LOGICAL ->.TRUE. |.FALSE.
LOG_EXPR -> ( UNARY_LOGICAL | BINARY_LOGICAL )
UNARY_LOGICAL -> [.NOT. | ! ] LOG_ATOM
BINARY_LOGICAL -> LOG_ATOM LOG_OP LOG_ATOM
LOG_OP ->.AND. | && |.OR. | || |.LT. | < |.GT. | > |.EQ. | == |.GE. | >= |.LE. | <= |.NE. | !=
LOG_ATOM -> LITERAL | FIELD_NAME | DATA_ID | LOG_EXPR | ARITH_EXPR
LITERAL -> INTEGER | FLOAT | STRING | LOGICAL
FIELD_NAME -> RECORD_FIELD | ID
RECORD_FIELD -> RECORD_ID [POS]: ID
POS -> CURRENT | PREVIOUS | FIRST_MATCH | PREV_MATCH | [A]INTEGER
INTEGER -> [+|-]?DIGIT+
FLOAT -> [+|-]?DIGIT+.DIGIT+
STRING -> 'PRINTABLE_CHAR*'
PRINTABLE_CHAR -> ASCII(0x20..0x7e) | ' | \
ARITH_EXPR -> ( UNARY_ARITH | BINARY_ARITH )
UNARY_ARITH -> [ + | - |.INT. ] ARITH_ATOM
BINARY_ARITH -> ARITH_ATOM ARITH_OP ARITH_ATOM
ARITH_OP -> + | - | / | * |.MAX. |.MIN.
ARITH_ATOM -> INTEGER | FLOAT | FIELD_NAME | DATA_NAME | ARITH_EXPR
STRING_EXPR -> ( UNARY_STR | BINARY_STR )
UNARY_STR -> STRING_ATOM
BINARY_STR -> STRING_ATOM STR_OP STRING_ATOM
STRING_OP -> +
STRING_ATOM -> STRING | FIELD_NAME | DATA_ID | STRING_EXPR | CHAR+
PRINT_COMMAND -> PRINT [ RECORD_FIELD | LITERAL | DATA_ID | ARITH_EXPR | STRING_EXPR | LOG_EXPR [FORMAT] ]*
FORMAT -> %[ FLOAT | INTEGER ]?[cdiefosux]1
FIELD_CALC -> FIELD_WRITE RECORD_FIELD := RECORD_FIELD | LITERAL | DATA_ID | ARITH_EXPR | STRING_EXPR | LOG_EXPR
RECORD_DELETE -> DELETE_RECORD RECORD_ID [POS]
RECORD_INSERT -> INSERT_RECORD_BEFORE | INSERT_RECORD_AFTER RECORD_ID [POS]
IF_STATEMENT -> IF LOG_EXPR THEN STATEMENT+[ELSE STATEMENT+ ]ENDIF
EXEC_IF_STATEMENT -> E_IF LOG_EXPR THEN EXEC_STATEMENT+[ELSE EXEC_STATEMENT+ ]ENDIF
CONTROL_STATEMENT -> QL_PRINTSEPARATOR CHAR | QL_OUTPUT_ALL_MATCHES LOG_ATOM |
QL_REMOVE_TRAILING_BLANKS LOG_ATOM
COMMENT -> // STRING NEWLINE
WHITESPACE -> SPACE | TAB | NEWLINE
NEWLINE -> \n
Was this page helpful?