BNF Grammar: Difference between revisions

no edit summary
(→‎{{header|J}}: Interwiki for J)
No edit summary
Line 420:
See link on syntax [http://cui.unige.ch/db-research/Enseignement/analyseinfo/LISP/BNFindex.html Lisp Syntax]
Outside of particularly restricted variants, no static grammar can exactly describe Lisp due to macros and reader-macros.
 
=={{header|Lua}}==
<div style="height:30ex;overflow:scroll"><pre>
chunk ::= {stat [`;´]} [laststat [`;´]]
 
block ::= chunk
 
stat ::= varlist `=´ explist |
functioncall |
do block end |
while exp do block end |
repeat block until exp |
if exp then block {elseif exp then block} [else block] end |
for Name `=´ exp `,´ exp [`,´ exp] do block end |
for namelist in explist do block end |
function funcname funcbody |
local function Name funcbody |
local namelist [`=´ explist]
 
laststat ::= return [explist] | break
 
funcname ::= Name {`.´ Name} [`:´ Name]
 
varlist ::= var {`,´ var}
 
var ::= Name | prefixexp `[´ exp `]´ | prefixexp `.´ Name
 
namelist ::= Name {`,´ Name}
 
explist ::= {exp `,´} exp
 
exp ::= nil | false | true | Number | String | `...´ | function |
prefixexp | tableconstructor | exp binop exp | unop exp
 
prefixexp ::= var | functioncall | `(´ exp `)´
 
functioncall ::= prefixexp args | prefixexp `:´ Name args
 
args ::= `(´ [explist] `)´ | tableconstructor | String
 
function ::= function funcbody
 
funcbody ::= `(´ [parlist] `)´ block end
 
parlist ::= namelist [`,´ `...´] | `...´
 
tableconstructor ::= `{´ [fieldlist] `}´
 
fieldlist ::= field {fieldsep field} [fieldsep]
 
field ::= `[´ exp `]´ `=´ exp | Name `=´ exp | exp
 
fieldsep ::= `,´ | `;´
 
binop ::= `+´ | `-´ | `*´ | `/´ | `^´ | `%´ | `..´ |
`<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ |
and | or
 
unop ::= `-´ | not | `#´
</pre></div>
Source: http://www.lua.org/manual/5.1/manual.html
 
=={{header|Modula2}}==
Anonymous user