summaryrefslogtreecommitdiff
path: root/tutorial/examples/syntax/RichSyntaxClass.oj
blob: 61005a79f24c60bafb240688d62aabd4aff2e0e6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
/*
 * RichSyntaxClass.java
 *
 * comments here.
 *
 * @author   Michiaki Tatsubori
 * @version  %VERSION% %DATE%
 * @see      java.lang.Object
 *
 * COPYRIGHT 1999 by Michiaki Tatsubori, ALL RIGHTS RESERVED.
 */
package examples.syntax;


import java.lang.Object;
import openjava.mop.*;
import openjava.ptree.*;
import openjava.syntax.*;


public class RichSyntaxClass instantiates Metaclass extends OJClass
{
    public void translateDefinition() {
    String[] str = new String[] {
        "hates", "loves", "keeps", "forwards", "before", "after",
        "chooses", "adapts", "pre" };
    for (int i = 0; i < str.length; ++i) {
        ParseTree suffix;
        suffix = this.getSuffix( str[i] );
        if (suffix != null) {
        System.out.println( this.toString() + " involves a suffix " +
                   " \"" + str[i] + "\" :" );
        System.out.println( "\t" + suffix );
        }
        OJMethod[] methods = getDeclaredMethods();
        for (int j = 0; j < methods.length; ++j) {
        suffix = methods[j].getSuffix( str[i] );
        if (suffix != null) {
            System.out.println( methods[j].toString() +
                       " involves a suffix " +
                       " ( " + str[i] + " ):" );
            System.out.println( "\t" + suffix );
        }
        }
    }
    }

    public static boolean isRegisteredKeyword( String keyword ) {
    if (keyword.equals( "replacedBy" ))  return true;
    if (keyword.equals( "hates" ))  return true;
    if (keyword.equals( "loves" ))  return true;
    if (keyword.equals( "keeps" ))  return true;
    if (keyword.equals( "forwards" ))  return true;
    if (keyword.equals( "before" ))  return true;
    if (keyword.equals( "after" ))  return true;
    if (keyword.equals( "chooses" ))  return true;
    if (keyword.equals( "adapts" ))  return true;
    if (keyword.equals( "pre" ))  return true;
        return OJClass.isRegisteredKeyword( keyword );
    }

    public static SyntaxRule getDeclSuffixRule( String keyword ) {
    if (keyword.equals( "hates" ))  return new NameRule();
    if (keyword.equals( "loves" ))  return new TypeNameRule();
    if (keyword.equals( "keeps" ))  return new ExpressionRule();
    if (keyword.equals( "forwards" )) {
        return new IterationRule( new TypeNameRule(), false );
    }
    if (keyword.equals( "before" ) || keyword.equals( "after" )) {
        return new BlockRule();
    }
    if (keyword.equals( "chooses" ) || keyword.equals( "after" )) {
        return new SelectionRule( new TypeNameRule(), new BlockRule() );
    }
    if (keyword.equals( "adapts" ) || keyword.equals( "after" )) {
        return new CompositeRule(
        new NameRule(),
        new PrepPhraseRule( "in", new NameRule() ),
        new PrepPhraseRule( "to", new NameRule() ) );
    }
        return OJClass.getDeclSuffixRule( keyword );
    }

    public static SyntaxRule getDeclSuffixRule(Environment env,
                           String keyword)
    {
    if (keyword.equals("pre"))  return new ExpressionRule(env);
        return OJClass.getDeclSuffixRule(env, keyword);
    }

    public static SyntaxRule getTypeSuffixRule( String keyword ) {
    if (keyword.equals( "replacedBy" ))  return new TypeNameRule();
        return OJClass.getTypeSuffixRule( keyword );
    }

    public static boolean isRegisteredModifier( String keyword ) {
    if (keyword.equals( "remote" ))  return true;
    if (keyword.equals( "crazy" ))  return true;
        return false;
    }

}