Mercurial > ~dholland > hg > ag > index.cgi
diff tests/agcl/oldagsrc/cf.syn @ 0:13d2b8934445
Import AnaGram (near-)release tree into Mercurial.
author | David A. Holland |
---|---|
date | Sat, 22 Dec 2007 17:52:45 -0500 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/agcl/oldagsrc/cf.syn Sat Dec 22 17:52:45 2007 -0500 @@ -0,0 +1,402 @@ +{/* + AnaGram Syntax Analyzer. + Copyright (c) Parsifal Software, 1993-1999. + All Rights Reserved. + + Configuration file module +*/ + +//#define INCLUDE_LOGGING + +#include "arrays.h" //ARRAYS +#include "assert.h" //ASSERT +#include "cint.h" +#include "config.h" +#include "data.h" //DATA +#include "error.h" +#include "log.hpp" +#include "myalloc.h" //MYALLOC +#include "pf.h" //PF +#include "tfile.h" //TFILE +#include <ctype.h> //CTYPE +#include <stdlib.h> //STDLIB +#include <string.h> //STRING + +#undef MODULE +#define MODULE 50 +} +[ + auto resynch + context type = cint + grammar token = config file + ~declare pcb + diagnose errors + lines and columns + line numbers + ~allow macros + line numbers + error frame + nest comments + ~test range + token names + pointer input + default token type = int + parser file name = "#.cpp" + escape backslashes +] + +any digit = digit + hex letter +backslash = '\\' +blank char = ' ' + '\t' +carriage return = '\r' +digit = '0-9' +double quote = '"' +eof = 0 + 26 +eol chars = newline + carriage return +hex letter = 'a-f' + 'A-F' +letter = 'a-z' + 'A-Z' + '_' +newline = '\n' +nonoctal digit = any digit - octal digit +octal digit = '0-7' +simple string char = ~eof - (any digit + double quote + backslash + eol chars) +tab = '\t' +vertical space = '\f' + '\v' + +equals + -> '=', space? + +minus + -> '-', space? + +plus + -> '+', space? + +tilde + -> '~', space? + +left parenthesis + -> '(', space? + +right parenthesis + -> ')', blank?... + + +config file + -> blank?..., [global parameter | end of line]/..., eof + +(void) global parameter + -> name =ConfigParam::set(1, cfErrorHandler); //cf_gp4(1); + -> tilde, name =ConfigParam::set(0, cfErrorHandler); //cf_gp4(0); + -> name, equals, data type =ConfigParam::set(cfErrorHandler); //cf_gp2(); + -> name, equals, keyword string =ConfigParam::set(cfErrorHandler); //cf_gp3(); + -> name, equals, number:n =ConfigParam::set(cfErrorHandler); //cf_gp5(n); + +(void) data type + -> name + -> name, abstract declarator =concat_string(); + +(void) abstract declarator + -> indirect data type + -> direct abstract declarator + -> indirect data type, direct abstract declarator =concat_string(); + + +(void) direct abstract declarator + -> {left parenthesis =scs('('),0;}, abstract declarator, + right parenthesis =concat_string(), acs(')'); + +(void) pointer + -> star + -> star, name =concat_string(); + +(void) star + -> '*', blank?... =sss(" *"); + +(void) indirect data type + -> pointer + -> indirect data type, pointer =concat_string(); + +(void) name string + -> letter:a =scs(a); + -> name string, letter + digit :a =acs(a); + -> name string, blank..., letter + digit :a =acs(' '), acs(a); + +name + -> name string, blank?... + +blank + -> blank char + -> c comment + +space + -> blank... + -> blank..., continuation + -> continuation + +continuation + -> comment, next line + -> next line + +next line + -> carriage return?, newline + -> carriage return?, newline, blank... + +white + -> blank + -> carriage return?, newline + -> comment, carriage return?, newline + +end of line + -> comment, carriage return?, newline + -> carriage return?, newline + -> end of line, white + -> end of line, vertical space //form feed + +comment + -> "//", ~eol chars & ~eof?... + +decimal number + -> '1-9':d =d - '0'; + -> decimal number:n, '0-9':d =10*n + d - '0'; + +octal number + -> '0' =0; + -> octal number:n, '0-7':d =8*n + d - '0'; + +hex number + -> "0x" =0; + -> "0X" =0; + -> hex number:n, '0-9':d =16*n + d - '0'; + -> hex number:n, 'A-F' + 'a-f':d =16*n + (d&7) + 9; + +simple number + -> decimal number + -> octal number + -> hex number + +number + -> sign:s, simple number:n, blank?... =s*n; + +sign + -> plus? =1; + -> minus =-1; + +keyword string + -> keyword string head, string, double quote, blank?... + +string + -> string A | string B | string C + +(void) keyword string head + -> double quote =ics(); + +string char + -> simple string char + -> escape sequence + +escape sequence + -> "\\a" ='\a'; + -> "\\b" ='\b'; + -> "\\f" ='\f'; + -> "\\n" ='\n'; + -> "\\r" ='\r'; + -> "\\t" ='\t'; + -> "\\v" ='\v'; + -> "\\\\" ='\\'; + -> "\\?" = '\?'; + -> "\\'" ='\''; + -> "\\\"" ='"'; + -> three octal:n =n==0?cf_error("Null character in string"),0 : n; + +one octal + -> backslash, '0-7':n =n&7; + +two octal + -> one octal:n, '0-7':d = n*8 + (d&7); + +three octal + -> two octal:n, '0-7':d = n*8 + (d&7); + +octal escape + -> {one octal | two octal}:n = + n==0?cf_error("Null character in string"),0 : n; + +hex escape + -> "\\x", hex number:n =n; + +(void) string A + -> string char:c =acs(c); + -> any digit:c =acs(c); + -> string, string char:c =acs(c); + -> string A, any digit:c =acs(c); + -> string B, nonoctal digit:c =acs(c); + +(void) string B + -> octal escape:n =acs(n); + -> string, octal escape:n =acs(n); + +(void) string C + -> hex escape:n =acs(n); + -> string, hex escape:n =acs(n); + +(void) c comment + -> c comment text, "*/" + +(void) c comment text + -> "/*" + -> c comment text, ~eof + +c comment, c comment text + -> c comment text, c comment = +{if (nest_comments) PCB.reduction_token = cf_c_comment_text_token;} + +[ + hidden { + left parenthesis, right parenthesis, + pointer, indirect data type, name string, + space, next line, sign, one octal, two octal, three octal, + string A, string B, string C, c comment text, escape sequence, + octal escape, hex escape, name string + } +] + +{ + +#define PARSER_STACK_OVERFLOW assert(0) +#define REDUCTION_TOKEN_ERROR assert(0) +#define SYNTAX_ERROR cf_syn_error() +#define GET_CONTEXT CONTEXT.x = PCB.column, CONTEXT.y = PCB.line + +static void cf_error(const char *); + +class CfErrorHandler : public ConfigParam::ErrorHandler { + void badParam(const char *s){cf_error(s);} +} cfErrorHandler; + + + +static cf_pcb_type cfcb; +#define PCB cfcb + +extern unsigned char *input_base; + +static AgString config_file; + +void read_config(const AgString path) { + LOGSECTION("read_config"); + LOGV(path); + config_file = path.lastCut(PATH_DELIMITER).leftI().concat("AnaGram.cfg"); + text_file tf(config_file); + cfcb.pointer = input_base = (unsigned char *) tf; + if (input_base) cf(); + config_file = "AnaGram.cfg"; + tf = text_file(config_file); + cfcb.pointer = input_base = (unsigned char *) tf; + LOGS("Starting parse"); + if (input_base) cf(); +} + +static void cf_error(const char *msg) { + errorList.push(Error(config_file, msg, 1)); +} + +Error::Error(AgString f, AgString msg, int contextFlag) + : file(f), + line(contextFlag? ERROR_CONTEXT.y : PCB.line), + column(contextFlag? ERROR_CONTEXT.y :PCB.column), + key(warn), + message(msg) +{ + // Nothing here +} + + +static void cf_syn_error(void) { + reset_stk(); + cf_error(PCB.error_message); +} + + + int allow_macros = 1; + int auto_init = 1; + int auto_resynch = 0; + int backtrack = 1; + int bottom_margin = 3; + int bright_background = 1; + + int case_sensitive = 1; + AgString compile_command(""); + int const_data = 1; + AgString context_type; + AgString coverage_file_name("#.nrc"); + + int declare_pcb = 1; + int default_input_type; + int default_token_type; + int default_reductions = 1; + int diagnose_errors = 1; + int distinguish_lexemes = 0; + + AgString edit_command("ed #.syn"); + int enable_mouse = 1; + AgString enum_constant_name("$_%_token"); + int error_frame = 0; + int error_trace = 0; + int escape_backslashes = 0; + int event_driven = 0; + + int far_tables = 0; + + int grammar_token = 0; + AgString header_file_name("#.h"); + int input_values = 0; + int iso_latin_1 = 1; + + int line_length = 80; + int line_numbers = 0; + AgString line_numbers_path; + int lines_and_columns = 1; + + int main_program = 1; + int max_conflicts = 50; + //AgString mutex_type; + + int near_functions = 0; + int nest_comments = 0; + + int old_style = 0; + + int page_length = 66; + AgString parser_file_name("#.c"); + AgString parser_name("#"); + int parser_stack_alignment; + int parser_stack_size = 32; + int pointer_input = 0; + AgString pointer_type("unsigned char *"); + AgString print_file_name("LPT1"); + + int quick_reference = 0; + + int reduction_choices =0; + int reentrant_parser = 0; + int rule_coverage = 0; + + int tab_spacing = 8; + int test_file_binary = 0; + AgString test_file_mask("*.*"); + int test_range = 1; + int token_names = 0; + int top_margin = 3; + int traditional_engine = 0; + + int video_mode = -1; + + int trial_copy_code = 0; + +int error_token; +int eof_token = 0; + +} + + +