Click here to Skip to main content
15,885,546 members
Articles / Programming Languages / Java

Create Your Own Programming Language

Rate me:
Please Sign up or sign in to vote.
4.87/5 (53 votes)
21 Jan 2010CPOL12 min read 486.4K   15.4K   87  
I've created my own programming language called Alef++ for fun, and for better understanding: What is a programing language? How does it work? Can I can create my own?
<!-- This comment will put IE 6, 7 and 8 in quirks mode -->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>St4tic: st4tic.Token Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javaScript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body onload='searchBox.OnSelectItem(0);'>
<!-- Generated by Doxygen 1.6.1 -->
<script type="text/javascript"><!--
var searchBox = new SearchBox("searchBox", "search",false,'Search');
--></script>
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Packages</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <img id="MSearchSelect" src="search/search.png"
             onmouseover="return searchBox.OnSearchSelectShow()"
             onmouseout="return searchBox.OnSearchSelectHide()"
             alt=""/>
        <input type="text" id="MSearchField" value="Search" accesskey="S"
             onfocus="searchBox.OnSearchFieldFocus(true)" 
             onblur="searchBox.OnSearchFieldFocus(false)" 
             onkeyup="searchBox.OnSearchFieldChange(event)"/>
        <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
        </div>
      </li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="annotated.html"><span>Class&nbsp;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&nbsp;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&nbsp;Members</span></a></li>
    </ul>
  </div>
  <div class="navpath"><a class="el" href="namespacest4tic.html">st4tic</a>.<a class="el" href="classst4tic_1_1_token.html">Token</a>
  </div>
</div>
<div class="contents">
<h1>st4tic.Token Class Reference</h1><!-- doxytag: class="st4tic::Token" -->
<p><a href="classst4tic_1_1_token-members.html">List of all members.</a></p>
<table border="0" cellpadding="0" cellspacing="0">
<tr><td colspan="2"><h2>Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">Object&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#afc6b00db5c3e07cb27bedafed0d93a7c">getValue</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#ab0bade02e11a0c7fe8b46c38935404ad">Token</a> ()</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#ac825df3d5f30ae7a777d6db323593249">Token</a> (int <a class="el" href="classst4tic_1_1_token.html#af27f55f44a9a602e4ea0102e59b8fe53">kind</a>)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#afb6ef245d6e5af34b84769c35328b062">Token</a> (int <a class="el" href="classst4tic_1_1_token.html#af27f55f44a9a602e4ea0102e59b8fe53">kind</a>, String <a class="el" href="classst4tic_1_1_token.html#adad024b6dedeb6ff533c43a3d09e274d">image</a>)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">String&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#a865b14e05e4042cb1fcf772c1f07256c">toString</a> ()</td></tr>
<tr><td colspan="2"><h2>Static Public Member Functions</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classst4tic_1_1_token.html">Token</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#a38e75c2763b49c37f967927ab9b3584d">newToken</a> (int ofKind, String <a class="el" href="classst4tic_1_1_token.html#adad024b6dedeb6ff533c43a3d09e274d">image</a>)</td></tr>
<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classst4tic_1_1_token.html">Token</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#a4b55f05192d3dc7b03738059ce39a9bd">newToken</a> (int ofKind)</td></tr>
<tr><td colspan="2"><h2>Public Attributes</h2></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#af27f55f44a9a602e4ea0102e59b8fe53">kind</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#a93b7ae54e7bac748081d99f26ba515ae">beginLine</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#adcb1e487ad427c00c20dcc1c222d81d6">beginColumn</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#ad61c2ad1a6a3ae387588a3d3db9f1d37">endLine</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">int&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#a3d24f8c780a3fa302d7f0f818160959f">endColumn</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top">String&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#adad024b6dedeb6ff533c43a3d09e274d">image</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classst4tic_1_1_token.html">Token</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#a5d90c1a05cb4f890c1b529647962b08f">next</a></td></tr>
<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classst4tic_1_1_token.html">Token</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="classst4tic_1_1_token.html#afc8ca11a83a5f355087a7c90c42ed86e">specialToken</a></td></tr>
</table>
<hr/><a name="_details"></a><h2>Detailed Description</h2>
<p>Describes the input token stream. </p>
<hr/><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="ab0bade02e11a0c7fe8b46c38935404ad"></a><!-- doxytag: member="st4tic::Token::Token" ref="ab0bade02e11a0c7fe8b46c38935404ad" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">st4tic.Token.Token </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>No-argument constructor </p>

</div>
</div>
<a class="anchor" id="ac825df3d5f30ae7a777d6db323593249"></a><!-- doxytag: member="st4tic::Token::Token" ref="ac825df3d5f30ae7a777d6db323593249" args="(int kind)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">st4tic.Token.Token </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>kind</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Constructs a new token for the specified Image. </p>

</div>
</div>
<a class="anchor" id="afb6ef245d6e5af34b84769c35328b062"></a><!-- doxytag: member="st4tic::Token::Token" ref="afb6ef245d6e5af34b84769c35328b062" args="(int kind, String image)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">st4tic.Token.Token </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>kind</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">String&nbsp;</td>
          <td class="paramname"> <em>image</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Constructs a new token for the specified Image and Kind. </p>

</div>
</div>
<hr/><h2>Member Function Documentation</h2>
<a class="anchor" id="afc6b00db5c3e07cb27bedafed0d93a7c"></a><!-- doxytag: member="st4tic::Token::getValue" ref="afc6b00db5c3e07cb27bedafed0d93a7c" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">Object st4tic.Token.getValue </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>An optional attribute value of the <a class="el" href="classst4tic_1_1_token.html">Token</a>. Tokens which are not used as syntactic sugar will often contain meaningful values that will be used later on by the compiler or <a class="el" href="namespacest4tic_1_1interpreter.html">interpreter</a>. This attribute value is often different from the image. Any subclass of <a class="el" href="classst4tic_1_1_token.html">Token</a> that actually wants to return a non-null value can override this method as appropriate. </p>

</div>
</div>
<a class="anchor" id="a4b55f05192d3dc7b03738059ce39a9bd"></a><!-- doxytag: member="st4tic::Token::newToken" ref="a4b55f05192d3dc7b03738059ce39a9bd" args="(int ofKind)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="classst4tic_1_1_token.html">Token</a> st4tic.Token.newToken </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>ofKind</em></td>
          <td>&nbsp;)&nbsp;</td>
          <td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">

</div>
</div>
<a class="anchor" id="a38e75c2763b49c37f967927ab9b3584d"></a><!-- doxytag: member="st4tic::Token::newToken" ref="a38e75c2763b49c37f967927ab9b3584d" args="(int ofKind, String image)" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">static <a class="el" href="classst4tic_1_1_token.html">Token</a> st4tic.Token.newToken </td>
          <td>(</td>
          <td class="paramtype">int&nbsp;</td>
          <td class="paramname"> <em>ofKind</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">String&nbsp;</td>
          <td class="paramname"> <em>image</em></td><td>&nbsp;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td><td><code> [static]</code></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns a new <a class="el" href="classst4tic_1_1_token.html">Token</a> object, by default. However, if you want, you can create and return subclass objects based on the value of ofKind. Simply add the cases to the switch for all those special cases. For example, if you have a subclass of <a class="el" href="classst4tic_1_1_token.html">Token</a> called IDToken that you want to create if ofKind is ID, simply add something like :</p>
<p>case MyParserConstants.ID : return new IDToken(ofKind, image);</p>
<p>to the following switch statement. Then you can cast matchedToken variable to the appropriate type and use sit in your lexical actions. </p>

</div>
</div>
<a class="anchor" id="a865b14e05e4042cb1fcf772c1f07256c"></a><!-- doxytag: member="st4tic::Token::toString" ref="a865b14e05e4042cb1fcf772c1f07256c" args="()" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">String st4tic.Token.toString </td>
          <td>(</td>
          <td class="paramname"></td>
          <td>&nbsp;)&nbsp;</td>
          <td></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>Returns the image. </p>

</div>
</div>
<hr/><h2>Member Data Documentation</h2>
<a class="anchor" id="adcb1e487ad427c00c20dcc1c222d81d6"></a><!-- doxytag: member="st4tic::Token::beginColumn" ref="adcb1e487ad427c00c20dcc1c222d81d6" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classst4tic_1_1_token.html#adcb1e487ad427c00c20dcc1c222d81d6">st4tic.Token.beginColumn</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The column number of the first character of this <a class="el" href="classst4tic_1_1_token.html">Token</a>. </p>

</div>
</div>
<a class="anchor" id="a93b7ae54e7bac748081d99f26ba515ae"></a><!-- doxytag: member="st4tic::Token::beginLine" ref="a93b7ae54e7bac748081d99f26ba515ae" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classst4tic_1_1_token.html#a93b7ae54e7bac748081d99f26ba515ae">st4tic.Token.beginLine</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The line number of the first character of this <a class="el" href="classst4tic_1_1_token.html">Token</a>. </p>

</div>
</div>
<a class="anchor" id="a3d24f8c780a3fa302d7f0f818160959f"></a><!-- doxytag: member="st4tic::Token::endColumn" ref="a3d24f8c780a3fa302d7f0f818160959f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classst4tic_1_1_token.html#a3d24f8c780a3fa302d7f0f818160959f">st4tic.Token.endColumn</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The column number of the last character of this <a class="el" href="classst4tic_1_1_token.html">Token</a>. </p>

</div>
</div>
<a class="anchor" id="ad61c2ad1a6a3ae387588a3d3db9f1d37"></a><!-- doxytag: member="st4tic::Token::endLine" ref="ad61c2ad1a6a3ae387588a3d3db9f1d37" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classst4tic_1_1_token.html#ad61c2ad1a6a3ae387588a3d3db9f1d37">st4tic.Token.endLine</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The line number of the last character of this <a class="el" href="classst4tic_1_1_token.html">Token</a>. </p>

</div>
</div>
<a class="anchor" id="adad024b6dedeb6ff533c43a3d09e274d"></a><!-- doxytag: member="st4tic::Token::image" ref="adad024b6dedeb6ff533c43a3d09e274d" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">String <a class="el" href="classst4tic_1_1_token.html#adad024b6dedeb6ff533c43a3d09e274d">st4tic.Token.image</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>The string image of the token. </p>

</div>
</div>
<a class="anchor" id="af27f55f44a9a602e4ea0102e59b8fe53"></a><!-- doxytag: member="st4tic::Token::kind" ref="af27f55f44a9a602e4ea0102e59b8fe53" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname">int <a class="el" href="classst4tic_1_1_token.html#af27f55f44a9a602e4ea0102e59b8fe53">st4tic.Token.kind</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>An integer that describes the kind of this token. This numbering system is determined by JavaCCParser, and a table of these numbers is stored in the file ...Constants.java. </p>

</div>
</div>
<a class="anchor" id="a5d90c1a05cb4f890c1b529647962b08f"></a><!-- doxytag: member="st4tic::Token::next" ref="a5d90c1a05cb4f890c1b529647962b08f" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classst4tic_1_1_token.html">Token</a> <a class="el" href="classst4tic_1_1_token.html#a5d90c1a05cb4f890c1b529647962b08f">st4tic.Token.next</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>A reference to the next regular (non-special) token from the input stream. If this is the last token from the input stream, or if the token manager has not read tokens beyond this one, this field is set to null. This is true only if this token is also a regular token. Otherwise, see below for a description of the contents of this field. </p>

</div>
</div>
<a class="anchor" id="afc8ca11a83a5f355087a7c90c42ed86e"></a><!-- doxytag: member="st4tic::Token::specialToken" ref="afc8ca11a83a5f355087a7c90c42ed86e" args="" -->
<div class="memitem">
<div class="memproto">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="classst4tic_1_1_token.html">Token</a> <a class="el" href="classst4tic_1_1_token.html#afc8ca11a83a5f355087a7c90c42ed86e">st4tic.Token.specialToken</a></td>
        </tr>
      </table>
</div>
<div class="memdoc">
<p>This field is used to access special tokens that occur prior to this token, but after the immediately preceding regular (non-special) token. If there are no such special tokens, this field is set to null. When there are more than one such special token, this field refers to the last of these special tokens, which in turn refers to the next previous special token through its specialToken field, and so on until the first special token (whose specialToken field is null). The next fields of special tokens refer to other special tokens that immediately follow it (without an intervening regular token). If there is no such token, this field is null. </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>F:/Java/St4tic/st4tic/src/st4tic/<a class="el" href="_token_8java.html">Token.java</a></li>
</ul>
</div>
<!--- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&nbsp;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&nbsp;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&nbsp;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&nbsp;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&nbsp;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&nbsp;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<hr size="1"/><address style="text-align: right;"><small>Generated on Sun Dec 27 10:50:23 2009 for St4tic by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.1 </small></address>
</body>
</html>

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Technical Lead
Morocco Morocco
Adrabi!, Just another Ghost in the Shell =)

Comments and Discussions