|
OsfV3Rules.grm
|
// FILE. . . . . /home/hak/hlt/src/hlt/osf/apps/v3/sources/OsfV3Rules.grm // EDIT BY . . . Hassan Ait-Kaci // ON MACHINE. . Hak-Laptop // STARTED ON. . Sun Mar 29 16:07:43 2015
|
/* ************************************************************************ */ /* **************************** GRAMMAR RULES ***************************** */ /* ************************************************************************ */ %%
| OsfV3Program is the grammar's start symbol. It denotes an OSF V3 program, which consists in a sequence of Statement constructs. |
OsfV3Program : Statements_opt ;
| A Statements_opt is a possibly empty sequence of Statement constructs. |
Statements_opt : // Empty programs are ok. */ | Statements_opt Statement ;
| A Statement is StatementType followed by an end of statement marker. |
Statement : StatementType EndOfStatement ;
| EndOfStatement denotes the end of a statement. Upon the end of statement marker EOS the statement is processed and errors that may have occurred are reported. In interactive mode, it also triggers a prompt for additional statements. In case of syntax error, error recovery skips all input until the next end-of-statement marker EOS. |
EndOfStatement : { commitParse(); } EOS ;
A StatementType is the main language unit, an element of the
sequence of statements that make up an OSF V3 program. It can be one
of the following:
|
StatementType : // Empty statements are ok. */ | PragmaStatement | SortDeclarationStatement | OsfExpression | error ; SortDeclarationStatement : IsaDeclarationStatement { setLocation(); processIsaDeclaration($1.lhs,$1.rhs); } // | SortNameDeclarationStatement // { // setLocation(); // processtSortNameDeclaration($1.symbols); // } ; IsaDeclarationStatement : SortSymbols ISA SortSymbols { $$.lhs = $1.symbols; $$.rhs = $3.symbols; } ; // SortNameDeclarationStatement // : DECLARESORTS SortSymbols // { // $$.symbols = $2.symbols; // } // ; SortSymbol : IDENTIFIER ; SortSymbols : SortSymbol { $$.symbols = new Stack(); $$.symbols.push($1.svalue()); } | SortSymbol ',' SortSymbols { ($$.symbols = $3.symbols).push($1.svalue()); } ; OsfExpression : // SortExpression // { // processSortExpression($1.expression); // } // | PsiTerm { processPsiTerm($1.tag,$1.sort,$1.keys,$1.subterms); } ; PsiTerm : TAG { $$.tag = $1.svalue(); $$.sort = new SymbolSortExpression("@",context); } // XML serialization: [ n:"osf" l:"term" a:{tag=1/value} ] | UntaggedPsiTerm { $$.sort = $1.sort; $$.keys = $1.keys; $$.subterms = $1.subterms; } | TAG ':' UntaggedPsiTerm { $$.tag = $1.svalue(); $$.sort = $3.sort; $$.keys = $3.keys; $$.subterms = $3.subterms; } // XML serialization: [ n:"osf" l:"term" a:{tag=1/value} c:(3[0]) ] ; UntaggedPsiTerm : SortExpression Body_opt { $$.sort = $1.expression; $$.keys = $2.keys; $$.subterms = $2.subterms; } // XML serialization: [ n:"osf" l:"term" c:(1 2) ] ; Body_opt : /* empty */ | '(' SubTerms ')' { $$.keys = $2.keys; $$.subterms = $2.subterms; } ; SubTerms : SubTerm { $$.keys = new Stack(); $$.keys.push($1.key); $$.subterms = new Stack(); $$.subterms.push($1.psiterm); } | SubTerm ',' SubTerms { ($$.keys = $3.keys).push($1.key); ($$.subterms = $3.subterms).push($1.psiterm); } ; SubTerm : PsiTerm { $$.key = null; $$.psiterm = new RawPsiTerm($1.tag,$1.sort,$1.keys,$1.subterms); } | Feature ARROW PsiTerm { $$.key = $1.feature; $$.psiterm = new RawPsiTerm($3.tag,$3.sort,$3.keys,$3.subterms); } // XML serialization: [ n:"osf" l:"feature" a:{name=1/value} c:(3) ] ; Feature : INTEGER { $$.feature = Integer.valueOf((int)$1.nvalue()); } | IDENTIFIER { $$.feature = $1.svalue(); } ; SortExpression : Constant { $$.expression = new ConstantSortExpression($1.constant); } | Sort { $$.expression = new SymbolSortExpression($1.svalue(),context); } | '{' SortList '}' { $$.expression = new DisjunctiveSort($2.sortList,context); } // XML serialization: [ n:"osf" l:"disjunction" c:(2) ] | NOT SortExpression { $$.expression = new NotSortExpression($2.expression); } // XML serialization: [ n:"osf" l:"not" c:(2) ] | SortExpression AND SortExpression { $$.expression = new AndSortExpression($1.expression,$3.expression); } // XML serialization: [ n:"osf" l:"and" c:(1 3) ] | SortExpression OR SortExpression { $$.expression = new OrSortExpression($1.expression,$3.expression); } // XML serialization: [ n:"osf" l:"or" c:(1 3) ] | SortExpression BUTNOT SortExpression { $$.expression = new ButnotSortExpression($1.expression,$3.expression); } // XML serialization: [ n:"osf" l:"butnot" c:(1 3) ] | '(' SortExpression ')' { $$.expression = $2.expression.setParenthesized(true); } // XML serialization: [ n:"osf" l:"parenthesis" c:(2) ] ; Constant : INTEGER { $$.constant = new IntegerConstant((int)$1.nvalue()); } | CHAR // should check that there's exactly one character! { $$.constant = new CharConstant($1.svalue().charAt(0)); } | FLOAT { $$.constant = new FloatConstant($1.nvalue()); } | STRING { $$.constant = new StringConstant($1.svalue()); } | BOOLEAN { $$.constant = new BooleanConstant($1.svalue() == "true" ? true : false); } // | 'null' // { $$.constant = Constant.NULL(); } ; Sort : TOP | BOTTOM | IDENTIFIER // XML serialization: [ n:"osf" l:"sort" a:{symbol=1/value} ] ; SortList : Sort { ($$.sortList = new Stack()).push($1.svalue()); } | Sort ';' SortList { ($$.sortList = $3.sortList).push($1.svalue()); } ; // /** // * This non-terminal denotes statements used to define a global // * name associated to a ψ-term. // */ // DefinitionStatement // : DEF '=' PsiTerm // { // processDefinition($1.name,$3.psiterm); // } // ;
|
This node stands for a pragma statement which allows the user to
query state parameters or up some options using a few built-in
extra-language commands of the form %pragma where pragma is an identifier,
possibly followed with arguments, and always terminated with a dot
(".").
A (partial) list of pragmas to be supported eventually is:
|
PragmaStatement : HELP_PRAGMA // %help { setLocation(); helpPragma(); } | EXIT_PRAGMA // %exit { setLocation(); OsfV3Main.exit(); } | INCLUDE_PRAGMA FileList // %include { setLocation(); includeFiles($2.files); } | ENCODE_PRAGMA // %encode { setLocation(); displaySize(); encodeSorts(); } | EVAL_PRAGMA // %eval { setLocation(); PsiTerm.evaluateSorts(true); displayLine("*** Sort expression evaluation has been turned on..."); } | SORTS_PRAGMA // %sorts { setLocation(); displaySorts(); } | DEFINED_PRAGMA // %defined { setLocation(); // to do } | SYMBOLS_PRAGMA // %symbols { setLocation(); } | MUTE_PRAGMA // %mute { setLocation(); isMute = !isMute; display("Muted output has been turned "+(isMute ? "on" : "off")+"...\n"); if (isMute) displayLine("*** ..."); } | SIZE_PRAGMA // %size { setLocation(); displaySize(); } | HEIGHT_PRAGMA // %height { setLocation(); // to do } | WIDTH_PRAGMA // %width { setLocation(); // to do } | CHILDREN_PRAGMA SortExpression // %children { setLocation(); displayChildren($2.expression); } | DESCENDANTS_PRAGMA SortExpression // %descendants { setLocation(); showDescendants($2.expression); } | PARENTS_PRAGMA SortExpression // %parents { setLocation(); displayParents($2.expression); } | ANCESTORS_PRAGMA SortExpression // %ancestors { setLocation(); showAncestors($2.expression); } | ENUMSIZE_PRAGMA INTEGER // %enumsize { setLocation(); Decoded.setEnumSize((int)$2.nvalue()); } | ISA_PRAGMA SortExpression SortExpression // %isa { setLocation(); // to do } | REFRESH_PRAGMA // %refresh { setLocation(); Tag.clearKnownTags(); context.reset(); displayLine("*** The sort taxonomy has been cleared ("+ numberOfSorts(context.taxonomy().size())+" defined)"); } | TREE_PRAGMA // %tree { setLocation(); parseTreeType = (showTree = !showTree) ? COMPACT_TREE : NO_TREE; display("Parse tree display has been turned "+(showTree ? "on" : "off")+"...\n"); } | TIMING_PRAGMA // %timing { setLocation(); Context.toggleTiming(); displayLine("*** Processing timing has been turned "+(Context.isTiming() ? "on" : "off")+"..."); } | GC_PRAGMA // %gc { setLocation(); display("\n"); Misc.forceGC(!isMute,dm.getOutputStream()); } | SYNTAX_PRAGMA // %syntax { setLocation(); toggleTrace(); display("Parser trace has been turned "+(tracingIsOn() ? "on" : "off")+"...\n"); } | TRACE_PRAGMA // %trace { setLocation(); if (isMute) { display("Cannot trace evaluation in mute mode; turn mute mode off with '%mute.'"); break; } Context.toggleTracing(); display("Execution tracing has been turned "+(Context.isTracing() ? "on" : "off")+"...\n"); } | UNKNOWN_PRAGMA // %unknown { setLocation(); displayLine("*** Unknown pragma (ignored) - type '%help.' for known pragmas."); // displayLine("*** Unknown pragma: '%"+pragma+"' (ignored) - type '%help.' for known pragmas."); } ; // PragmaArguments_opt // : /* empty */ // | INTEGER // integer argument to a pragma %setenum // { // Decoded.setEnumSize((int)$1.nvalue()); // } // | FileList // { // $$.args = $1.files; // } // | SortExpression // argument to pragmas %parents, %ancestors, %children, %descendants, etc., ... // { // ($$.args = new Stack(1)).add($1.expression); // } // | SortExpression SortExpression // arguments to pragma %isa // { // ($$.args = new Stack(2)).add($1.expression); // $$.args.add($2.expression); // } // ; FileList : STRING { ($$.files = new Stack()).push($1.svalue()); } | STRING FileList { ($$.files = $2.files).push($1.svalue()); } ; %% /* ************************************************************************ */ /* ************************* END OF GRAMMAR RULES ************************* */ /* ************************************************************************ */
This file was generated on Fri Aug 16 04:59:19 PDT 2019 from file OsfV3Rules.grm
by the hlt.language.tools.Hilite Java tool written by Hassan Aït-Kaci